随着Internet的迅速发展,在网络上查询信息越来越为广大用户所接受。但是,从网上截取下来的资料虽然可以满足用户的需求,但是它们的文本格式却并不一定能适合用户的需要。例如,本人通过Internet从某图书馆下载的数据为纯文本,其排列格式如下(dattxt):
企业编号:00001
企业名称:上海化工
员工人数:5000
主营产品:化工产品
……
这种数据存储方式在网上较为常见。我现用FoxPro 25b for Windows编写了一段程序,将上述的竖排式文本格式转换成FoxPro数据库的二维表形式,以方便操作管理,即转换成如下表格式(datdbf):
也就是将dattxt中的信息转换到datdbf数据库中去。当然,下载的数据必须是规范化的,如左边的类别名称必须是统一的,如果有不同之处,需事先将它调整好,且类别名称与右边的具体资料之间是用冒号分隔开的,每个企业的第一条信息都应是该企业的编号。
转换程序执行的过程中,首先将文本信息收入一临时数据库文件(lsdbf)中,然后,对该数据库中每条信息进行判断,将冒号左边的查询名称,在字段名称表数据库(zdmcbdbf)中对应找到datdbf中的字段名,将冒号右边的内容作为要存储的信息保存到数据库datdbf相应的字段中去,而对于没有冒号的信息均作为该企业的备注信息加以保存。
字段名称表数据库zdmcbdbf的内容如下表,其中查询名称为dattxt中左边栏的类别名称,字段名为datdbf中的字段名。
临时数据库lsdbf只有一个字符型字段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 DATTXT 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 !′编号′|SLINEAND!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 (浙江 苏 云) |