有文本文件文件如下格式
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个数据库文件
一个数据库为:帐号 厂名 法人 地址 上月余额 本月余额另一个数据库为:帐号 时间 卡号 地点 种类 金额请问详细的转换程序怎么写?解决立即给分!
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个数据库文件
一个数据库为:帐号 厂名 法人 地址 上月余额 本月余额另一个数据库为:帐号 时间 卡号 地点 种类 金额请问详细的转换程序怎么写?解决立即给分!
解决方案 »
- DBGrid应用遇到的问题
- 为什么这句话不正确:if s[j] not in ['0'..'9','x','X'] then continue; 而去掉not 就可以了。
- 救命!!!电脑复制文本内容后粘贴不了。。
- 请问如何判断在数据库中重复插入问题?
- “贺岁华东行”--与技术总监和Borland产品专家面对面2004元旦
- suiPack问题?
- edit 的小问题:::一个窗体里有15个edit和一个button,。。。。。。。
- 在线等待!在image控件中任意画直线!如何判断鼠标坐标下有没有被画线
- quickReport的一个问题
- 怎样解决在计算货币型数据的和时的近似值问题??SOS!!!SOS
- 有谁用过FireWork烟火控件吗?
- 我在数据库中取数据自动生成菜单条,但我不知道怎样触发这些由程序生成的菜单条的单击事件?
在开发数据库应用程序时,有时需要将纯文件格式的文件转换为数据库类型的文件。下面,结合笔者所开发的具体应用实例,来说明这一转换方法。 笔者所开发的是“人事考勤管理系统”,在这一系统中,需要将考勤刷卡机所生成的员工考勤数据(纯文本格式)转换到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;