快速业务通道

用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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号