用C++产生QL*Loader各类文件
作者 佚名技术
来源 程序设计
浏览
发布时间 2012-06-30
edef struct field // dbf字段结构 { unsigned char name[11]; unsigned char type ; unsigned long add; unsigned char length; unsigned char dec ; } FIELD ; int main(int argc,char **argv) { char buf[MAX_ROW_LENGTH],dbf[40],*sqlload; unsigned int i,field_num; HEAD *dbfhead ; FIELD dbffield[MAX_FIELD_NUMBER]; FILE *fout, *fp; if (argc!=2) { cout < < "Usage : load dbfile" < < endl ; return -1; } sqlload = new char(40); dbfhead = new HEAD; strcpy(buf,""); strcpy(dbf,argv[1]); strcat(dbf,".dbf"); if ((fp=fopen(dbf,"rb")) == NULL) { cout < < "Cannot open file " < < dbf < < endl; return -1 ; } fseek(fp,0,SEEK_SET); fread(dbfhead,sizeof(HEAD),1,fp); // 读dbf头文件信息 field_num = (dbfhead- >head_length-1)/32 -1 ; //字段个数 for( i=0; i< field_num; i++) { fseek(fp,32*(i+1),SEEK_SET); fread(&dbffield[i],sizeof(FIELD),1,fp); // 读dbf结构信息 } // 产 生SQL*Loader 控 制 文 件 strcpy(sqlload,argv[1]); strcat(sqlload,".ctl"); if ((fout=fopen(sqlload,"w")) == NULL) { cout < < "Cannot open file " < < sqlload < < endl; return -1 ; } fprintf(fout,"LOAD DATA\n"); fprintf(fout,"INFILE ''%s.txt''\n", argv[1]); fprintf(fout,"INTO TABLE %s (\n", argv[1]); for(i=0;i< field_num;++i) { fprintf(fout, "%11s POSITION(%d:%d)", dbffield[i].name, dbffield[i].add, dbffield[i].add + dbffield[i].length -1 ); switch (dbffield[i].type) { case ''C'': case ''L'': // 字符型/ 逻辑型 fprintf(fout, " CHAR"); break ; case ''N'': if (dbffield[i].dec == 0 ) //整数型 fprintf(fout, "INTEGER EXTERNAL NULLIF %s = BLANKS", dbffield[i].name); else //实数型 fprintf(fout, " DECIMAL EXTERNAL NULLIF %s =BLANKS", dbffield[i].name ); break; case ''D'': //日期型 fprintf(fout, " DATE ''YYYYMMDD'' NULLIF %s = BLANKS", dbffield[i].name); break; default: break; } if(i< field_num -1) fprintf(fout, ",\n") ; } fprintf(fout, ")\n"); fclose(fout); // 产 生CREATE TABEL. 的SQL 语 句 strcpy(sqlload,argv[1]); strcat(sqlload,".sql"); if ((fout=fopen(sqlload,"w")) == NULL) { cout < < "Cannot open file " < < sqlload < < endl; return -1 ; } fprintf(fout, "create table %s (\n", argv[1]); for(i=0;i< field_num;i++) { fprintf(fout,"%11s",dbffield[i].name); switch (dbffield[i].type) { case ''C'': //字符型 fprintf(fout, " CHAR(%d)",dbffield[i].length); break; case ''L'': //逻辑型 fprintf(fout, " CHAR(1)"); break; case ''N'': //数字型 if (dbffield[i].dec==0) fprintf(fout," NUMBER(%d)", dbffield[i].length) ; else fprintf(fout, " NUMBER(%d,%d)", dbffield[i].length-1, dbffield[i].dec); break; case ''D'': // 日 期 型 fprintf(fout, " |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: BCB中如何读写硬件端口下一篇: 用非对称密码算法制作共享软件的注册码
关于用C++产生QL*Loader各类文件的所有评论