文本文件转换为DBF问题(有文本格式)

dzglzl 2010-05-15 12:52:26
文本文件名:DC0G44540201 其中5402为编号,01为代表日期(01至31),每天一个文件,文本文件内容如下:

现在要读取这一批文件到DBF文件中,&P为一间店铺的结束,&L为一条记录的结束.DBF结构:shopno,shopname,pos,card,amt,hkfee,seq,date1,time


&T DC0G
year=2010
month=01
day=01
shopno=01165
shopname=上海市XXXX用品中心
pos=PKIC
card=7856305600138091
amt= 738.00
hkfee= 7.38
seq=322098150
date1=20100101
time=115106
&L
pos=PKIC
card=6447554451013452
amt= 50.00
hkfee= 0.50
seq=327642032
date1=20100101
time=131913
&L
pos=PKIC
card=4518107576233370
amt= 230.00
hkfee= 2.30
seq=345120626
date1=20100101
time=180037
&L
pos=PKIC
card=6227003144440030372
amt= 125.00
hkfee= 1.25
seq=349424489
date1=20100101
time=210216
&L
pos=PKIC
card=622165670309295
amt= 38.00
hkfee= 0.38
seq=354447637
date1=20100101
time=214328
&L
pos=合计
card=
amt= 1181.00
hkfee= 11.81
seq=5
date1=
time=
&L
&P
&T DC0G
year=2010
month=01
day=01
shopno=01504
shopname=上海市XXXX发展有限公司
pos=PKOc
card=6345481450739058218
amt= 20000.00
hkfee= 0.00
seq=321800925
date1=20100101
time=114641
&L
pos=PKOc
card=6234581450739010011
amt= 10000.00
hkfee= 0.00
seq=321847501
date1=20100101
time=114723
&L
pos=PKOc
card=6234581451299321913
amt= 30000.00
hkfee= 0.00
seq=339969527
date1=20100101
time=161536
&L
pos=PKOc
card=6228451450004549814
amt= 10000.00
hkfee= 0.00
seq=342418206
date1=20100101
time=165637
&L
pos=PKOc
card=5334591450555209
amt= 20000.00
hkfee= 0.00
seq=342445863
date1=20100101
time=165709
&L
pos=PKOc
card=6224441450004549814
amt= 6000.00
hkfee= 0.00
seq=342733641
date1=20100101
time=170220
&L
pos=PKOc
card=4044470016769600
amt= 30000.00
hkfee= 0.00
seq=344821757
date1=20100101
time=175124
&L
pos=合计
card=
amt= 126000.00
hkfee= 0.00
seq=7
date1=
time=
&L
&P
&T DC0G
year=2010
month=01
day=01
shopno=02017
shopname=XX市XXXX天然美食城
pos=PKYJ
card=6225444321000315584
amt= 559.00
hkfee= 11.18
seq=326499215
date1=20100101
time=130115
&L
pos=PKYJ
card=622744451037792
amt= 628.00
hkfee= 12.56
seq=328177081
date1=20100101
time=132729
&L
pos=PKYJ
card=406364437405491
amt= 670.00
hkfee= 13.40
seq=328679516
date1=20100101
time=133455
&L
pos=PKYJ
card=4044470000902720
amt= 1563.00
hkfee= 31.26
seq=331340114
date1=20100101
time=141344
&L
pos=PKYJ
card=6256734451026555
amt= 895.00
hkfee= 17.90
seq=332217825
date1=20100101
time=142615
&L
pos=PKYJ
card=95545612106158879
amt= 238.00
hkfee= 4.76
seq=332865842
date1=20100101
time=143453
&L
pos=PKYJ
card=6224567576509580
amt= 132.00
hkfee= 2.64
seq=333332766
date1=20100101
time=144122
&L
pos=合计
card=
amt= 7696.00
hkfee= 76.96
seq=24
date1=
time=
&L
&P
...全文
354 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
dzglzl 2010-05-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xuzuning 的回复:]
测试代码
create cursor test (shopno c(5),shopname c(50),pos c(4),card c(20),amt n(10,2),hkfee n(10,2),seq n(10),date1 c(10),time c(10))


fp = fopen('wt.txt')

do while ! feof(fp)
buf = fgets(fp,……
[/Quote]

按这个方法测试成功!速度很快呢!
dzglzl 2010-05-19
  • 打赏
  • 举报
回复
按二楼的方法我虽然转成功了!但速度很慢!我用的是FoxBASE时代的知识了!上面两层的代码我要重新学习才看明白!多谢楼上两位老师了!
xuzuning 2010-05-17
  • 打赏
  • 举报
回复
测试代码
create cursor test (shopno c(5),shopname c(50),pos c(4),card c(20),amt n(10,2),hkfee n(10,2),seq n(10),date1 c(10),time c(10))


fp = fopen('wt.txt')

do while ! feof(fp)
buf = fgets(fp, 1024)
do case
case buf = '&T'
scat memvar blank
case buf = '&L'
insert into test from memvar
case buf = '&P'
OTHERWISE
mc = left(buf, at('=', buf)-1)
if type(mc) = 'U'
&mc = ''
else
if type(mc) = 'N'
buf = 'm.'+buf
else
buf = 'm.'+strt(buf, '=', '="') + '"'
endif
ENDIF
&buf
endcase
enddo
fclose(fp)

brow
都市夜猫 2010-05-16
  • 打赏
  • 举报
回复
下面是使用数组来处理一个文件的示例,未包含错误处理,假设文件中没有漏行,需要 vfp9

#define CRLF    CHR(13)+CHR(10)

CREATE CURSOR ttt ( ;
shopno C(5), shopname C(30), ;
pos C(4), card C(20), amt Y, hkfee Y, seq I, date1 C(8), time C(10))

FOR m.ii = 1 TO ALINES(laShops, FILETOSTR(GETFILE()), 1+4+8, '&P'+CRLF)
FOR m.jj = 1 TO ALINES(laOnlyOne, laShops[m.ii], 1+4+8, '&L'+CRLF)
m.lcBuff = laOnlyOne[m.jj]
IF m.jj == 1
m.shopno = STREXTRACT(m.lcBuff, 'shopno=', CRLF, 1, 1)
m.shopname = STREXTRACT(m.lcBuff, 'shopname=', CRLF, 1, 1)
ENDIF
m.pos = STREXTRACT(m.lcBuff, 'pos=', CRLF, 1, 1)
m.card = STREXTRACT(m.lcBuff, 'card=', CRLF, 1, 1)
m.amt = STREXTRACT(m.lcBuff, 'amt=', CRLF, 1, 1)
m.hkfee = STREXTRACT(m.lcBuff, 'hkfee=', CRLF, 1, 1)
m.seq = STREXTRACT(m.lcBuff, 'seq=', CRLF, 1, 1)
m.date1 = STREXTRACT(m.lcBuff, 'date1=', CRLF, 1, 1)
m.time = STREXTRACT(m.lcBuff, 'time=', CRLF, 1, 1)
INSERT INTO ttt ;
(shopno, shopname, pos, card, amt, hkfee, seq, date1, time) ;
VALUES ;
(m.shopno, m.shopname, m.pos, m.card, ;
VAL(m.amt), VAL(m.hkfee), VAL(m.seq), m.date1, m.time)
ENDFOR
ENDFOR

BROWSE
都市夜猫 2010-05-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dzglzl 的回复:]
能不能把TXT文件先转到一个只有一个字段的临时库中,再一条一条记录读取,转到另一库!请高手指点
[/Quote]
可以,但那样显然更麻烦,用数组来顺序处理会简单点,只是不如转成表后直观。
dzglzl 2010-05-16
  • 打赏
  • 举报
回复
能不能把TXT文件先转到一个只有一个字段的临时库中,再一条一条记录读取,转到另一库!请高手指点

2,748

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧