网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > C/C++ > 正文
用C++产生SQL*Loader各类文件
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/15
下载{$ArticleTitle}原创论文样式
QL*Loader 控 制 文 件 的 建 立

---- 控 制 文 件 为SQL*Loader 的 核 心 文 件, 与Foxpro 字 段 对 应 关 系 为 表 四: Foxpro 数 据 类 型

---- 控 制 文 件 语 句 对 应 的 格 式

Character(n)
CHAR
Number(n,m)
Float(n,m)
DECIMAL EXTERNAL NULLIF < field > = BLANKS (m< >0)

INTEGER EXTERNAL NULLIF < field > = BLANKS ( m=0)
Logical
CHAR
DATE
DATE "YYYYMMDD" NULLIF < field > = BLANKS

---- 四

---- 以 下 是 用Borland C++ 5.0 在 中 文Windows 95 下 编 制 的 产 生CREATE TABLE SQL 语 句 和 产 生SQL*Loader 数 据 文 件、 控 制 文 件 的 源 程 序load.cpp。

#include < stdio.h >
#include < stdlib.h >
#include < iostream.h >
#include < fstream.h >
#include < string.h >
#include < math.h >
#define MAX_ROW_LENGTH 1200
#define MAX_FIELD_NUMBER 30
typedef struct head // dbf头文件结构
{ unsigned char mask ;
unsigned char date ;
unsigned long record_num;
unsigned short int head_length;
unsigned short int field_length ;
} HEAD ;

typedef struct field // dbf字段结构
{ unsigned char name;
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);
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);
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);
fprintf(fout,"INTO TABLE %s (\n", argv);

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&q

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号