有文本文件文件如下格式
h1330402001 20000.00 机床厂 
h2王军 公园路18号
l12004-08-134464457897 上海 消费 2500.00-
l22004-08-144464457897 南京 消费 2500.00-
t1 15000.00
h1330402002 20000.00 酒厂 
h2朱开 公园路10号
l12004-08-134464457899 上海 消费 2500.00-
l22004-08-144464457899 南京 消费 2500.00-
l32004-08-154464457899 无锡 消费 5000.00-
t1 10000.00
......................现在要将它转换为2个数据库文件
一个数据库为:帐号 厂名 法人 地址 上月余额 本月余额另一个数据库为:帐号 时间 卡号 地点 种类 金额请问详细的转换程序怎么写?解决立即给分!

解决方案 »

  1.   

    用delphi将纯文本文件转换成数据库文件 
      在开发数据库应用程序时,有时需要将纯文件格式的文件转换为数据库类型的文件。下面,结合笔者所开发的具体应用实例,来说明这一转换方法。  笔者所开发的是“人事考勤管理系统”,在这一系统中,需要将考勤刷卡机所生成的员工考勤数据(纯文本格式)转换到paradox5.0格式的数据库中,以便于应用程序对数据库进行统计查询等操作。  1、下面是考勤刷卡机生成的员工考勤数据文件(文件名为kq.txt)的格式:  01000315 9801051428a0  01000820 9801051429a1  01000659 9801051429b2  01000883 9801051429b3  01000173 9801051429a4  ………  说明:  ●每一行为某一员工某一次的刷卡记录数据  ●行宽固定为27个字符  ●1~2字符为刷卡机代码:01代表1号刷卡机,02代表2号刷卡机,依此类推  ●3~15字符为员工考勤工号,共有13位,本系统只用了6位,000315为员工工号  ●16~25字符为刷卡时间,9801051428意即98年1月5日14点28分  ●26字符为刷卡状态,a为上班,b为下班  ●27字符为流水号,0~9为一循环  2、paradox数据库类型文件kq.db数据库结构如下:  共有4个字段  ●工号:字符类型,宽度为6  ●日期:字符类型,宽度为8  ●时间:字符类型,宽度为5  ●进/出:字符类型,宽度为2  此文件可由数据库桌面database desktop创建,并保存到c:ιkq子目录中。  3、从kq.txt到kq.db的转换方法如下:  (1)建立窗体(如下图所示),设置窗体各控件的属性。    此窗体共有两个按钮(button1和button2),一个数据表(table1),一个数据源(datasource1)和一个数据网格(dbgrid1),它们的属性分别如下:  ●button1.caption:=转换  ●button2.caption:=退出  ●table1.databasename:=c:\kq  table1.tablename:=kq.db  ●datasource1.dataset:=table1  ●dbgrid1.datasource:=datasource1  (2)转换处理程序如下:  procedure tform1.button1click(sender:tobject);  var  str:string;  txtfile:textfile;{定义一个文本文件变量txtfile}  ch:char;  begin  table1.open;{打开kq.db数据库}  assignfile(txtfile,′c:\kq\kq.txt′);{将kq.txt分配给txtfile变量}  reset(txtfile);{打开kq.txt文本文件}  str:=′′;  while not eof(txtfile)do{只要kq.txt文件没有结束,就循环转换}  begin  read(txtfile,ch);{从kq.txt中读一个字符}  if ch<>char(13)then{是否为回车符}  str:=str+ch{不是回车,继续读下一个字符}  else  begin{是回车符,表明已经读完一行,此时str变量即代表一行信息}  table1.append;{将kq.db数据库追加一空记录}  table1.edit;{将kq.db数据库设为可编辑}  table1.fieldbyname(′工号′).asstring:=copy(str,3,6);  {从str的第3字符开始,截6个字符,作为工号}  table1.fieldbyname(′日期′).asstring  :=copy(str,16,2)+′/′+copy(str,18,2)+′/′+copy(str,20,2);  {从str的第16字符开始,截6个字符,作为日期}  table1.fieldbyname(′时间′).asstring:=copy(str,22,2)+′:′+copy(str,24,2);  {从str的第22字符开始,截4个字符,作为时间}  str:=copy(str,26,1);  {从str的第26字符开始,截1个字符,作为出勤状态}  ifstr=′a′thentable1.fieldbyname(′进/出′).asstring:=′进′  elsetable1.fieldbyname(′进/出′).asstring:=′出′;  table1.post;{将数据过至kq.db数据库中}  read(txtfile,ch);{略过换行符}  str:=′′;{清str变量}  end;  end;  end;  proceduretform1.button2click(sender:tobject);  begin  close;  end;