用FoxPro转换网上文本格式
企业编号:00001
企业名称:上海化工
员工人数:5000
主营产品:化工产品
……
这种数据存储方式在网上较为常见。我现用FoxPro 2.5b for Windows编写了一段程序,将上述的竖排式文本格式转换成FoxPro数据库的二维表形式,以方便操作管理,即转换成如^191301a^格式(dat.dbf)。
也就是将dat.txt中的信息转换到dat.dbf数据库中去。当然,下载的数据必须是规范化的,如左边的类别名称必须是统一的,如果有不同之处,需事先将它调整好,且类别名称与右边的具体资料之间是用冒号分隔开的,每个企业的第一条信息都应是该企业的编号。
转换程序执行的过程中,首先将文本信息收入一临时数据库文件(ls.dbf)中,然后,对该数据库中每条信息进行判断,将冒号左边的查询名称,在字段名称表数据库(zdmcb.dbf)中对应找到dat.dbf中的字段名,将冒号右边的内容作为要存储的信息保存到数据库dat.dbf相应的字段中去,而对于没有冒号的信息均作为该企业的备注信息加以保存。
字段名称表数据库zdmcb.dbf的内容如^191301b^,其中查询名称为dat.txt中左边栏的类别名称,字段名为dat.dbf中的字段名。
临时数据库ls.dbf只有一个字符型字段Line,其长度为200,以保证能放下较长的信息。本程序是在Windows 95中用FoxPro编写并运行通过的。
程序如下:
SET TALK OFF
SET SAFE OFF
CLEAR ALL
CLEAR
SELE 1
USE DAT
SELE 2
USE ZDMCB
SELE 3
USE LS
ZAP
APPE FROM DAT.TXT SDF
SCAN FOR ′编号′|SLINE
X=AT(′:′,LINE)
BH=ALLTRIM(SUBS(LINE,X+1))
SELE 1
APPE BLAN
REPL 编号 WITH BH
SELE 3
SKIP
DO WHILE !′编号′|SLINE.AND.!EOF()
X=AT(′:′,LINE)
IF X>0
Y1=ALLTRIM(SUBS(LINE,1,X-1))
Y2=ALLTRIM(SUBS(LINE,X+1))
SELE 2
LOCA FOR 查询名称=Y1
IF FOUND()
XXX=ALLTRIM(字段名)
SELE 1
REPL (XXX) WITH Y2
ENDIF
ELSE
Y2=ALLTRIM(LINE)
SELE 1
REPL 备注 WITH ALLTRIM(备注)+Y2
ENDIF
SELE 3
SKIP
ENDDO
SKIP -1
ENDSCAN
CLEAR ALL