主题:请教如何将没有分隔符的文本导入数据表中?
绝缘子2009
[专家分:50] 发布于 2009-05-16 14:04:00
文本没有数据分隔符号,但有列的形式存在,是从另一个软件里面导出来的,请教导入VF数据表的代码?请高手赐教!!!感谢!
回复列表 (共22个回复)
沙发
foxdb [专家分:1830] 发布于 2009-05-16 20:13:00
列只要有规律,(也就是你用眼能看出来)就用 FileToStr("文件名") 来进行字符处理即可。具体要看你的文本内容才能写出“字符处理”表达式。如果“标示”条件太多就建个库来处理!如有可能,你发两三行“标本数据”我帮你分析吧。。。。。
板凳
foxdb [专家分:1830] 发布于 2009-05-16 21:41:00
对了,文件有多大,如果太大,就用低级函数来做.....
3 楼
sywzs [专家分:5650] 发布于 2009-05-17 07:35:00
用excel打开此文本文件,选取固定宽度,另存为 DBF 4。
4 楼
绝缘子2009 [专家分:50] 发布于 2009-05-17 08:29:00
表的格式如下:
装配件 1 89.20 3210
1 XXX XXXX 4 23.1 58.4 XXX
2 XXX XXXX 3 28 89 XXXX
2/1 XXX XXXX 1 40
3 XXX XXXX 5 69 79.2 XXXX
请高手帮我分析下,改天发个原版的数据上来!
5 楼
绝缘子2009 [专家分:50] 发布于 2009-05-17 08:30:00
希望用一个按钮代码把文本导入VF数据表
6 楼
sywzs [专家分:5650] 发布于 2009-05-17 10:14:00
把文本文件发Email:sywzs@163.com
用你给的格式保存为NN.TXT ,编了如下代码,仅供参考。
SET PATH TO D: &&文本文件所在文件夹
STORE FOPEN('nn.txt') TO nFileHandle
STORE FSEEK(nFileHandle, 0, 2) TO nEnd
STORE FSEEK(nFileHandle, 0) TO nTop
IF nEnd <= 0
WAIT WINDOW '文件是空的!' NOWAIT
ELSE
IF !FILE("NN.dbf")
CREA TABLE NN(A01 C(5),A02 C(10),A03 N(5),A04 N(7,2),A05 N(7,1),A06 C(8))
ELSE
USE NN IN 0
SELE NN
DELE ALL
PACK
ENDIF
FOR I=0 TO nEnd
cString = FGETS(nFileHandle, nEnd)
I=FSEEK(nFileHandle, 0,1)
APPE BLAN
REPL A01 WITH LEFT(cString,5),A02 WITH SUBS(cString,7,10),A03 WITH VAL(SUBS(cString,18,5)),A04 WITH VAL(SUBS(cString,24,7)),A05 WITH VAL(SUBS(cString,32,7)),A06 WITH SUBS(cString,40)
NEXT
ENDIF
= FCLOSE(nFileHandle)
BROW
RETURN
7 楼
绝缘子2009 [专家分:50] 发布于 2009-05-17 16:18:00
文本文件已经发给你了,请查收!
另外,文本文件导入数据表以后,格式怎么转换?文本文件是字符型的,有些内用需要转换为数值型的
8 楼
sywzs [专家分:5650] 发布于 2009-05-18 06:19:00
下面的代码是根据 '6HS01.txt'编写的,其实与6楼的代码没什么太大的区别,你可以分析一下。用 VAL()函数就可以把文本转换成数值型了。如有问题再联系。
SET PATH TO D:\ &&文本文件所在文件夹
STORE FOPEN('6HS01.txt') TO nFileHandle
STORE FSEEK(nFileHandle, 0, 2) TO nEnd
STORE FSEEK(nFileHandle, 0) TO nTop
IF nEnd <= 0
WAIT WINDOW '文件是空的!' NOWAIT
ELSE
IF !FILE("AA.dbf")
CREA TABLE AA(A01 C(5),A02 C(14),A03 C(18),A04 C(40),A05 N(6),A06 C(20),A07 N(12,5),A08 N(12,3),A09 C(40))
ELSE
USE AA IN 0
SELE AA
DELE ALL
PACK
ENDIF
FOR I=0 TO nEnd
cStr = FGETS(nFileHandle, nEnd)
I=FSEEK(nFileHandle, 0,1)
APPE BLAN
REPL A01 WITH LEFT(cStr,5),A02 WITH SUBS(cStr,6,14),A03 WITH SUBS(cStr,20,18),A04 WITH SUBS(cStr,38,40),A05 WITH VAL(SUBS(cStr,78,6)),A06 WITH SUBS(cStr,84,20),A07 WITH VAL(SUBS(cStr,104,8)),A08 WITH VAL(SUBS(cStr,112,8)),A09 WITH SUBS(cStr,120)
NEXT
ENDIF
= FCLOSE(nFileHandle)
BROW
RETURN
9 楼
绝缘子2009 [专家分:50] 发布于 2009-05-19 22:32:00
非常感谢楼上的代码,有个问题没解决或者我没说明
SET PATH TO D:\ &&文本文件所在文件夹
STORE FOPEN('6HS01.txt') TO nFileHandle
这两句,第1句是指定文件路径,第2句是赋变量
在第2句中的6HS01.txt是个文本文件,我电脑上很多这样的文件,请问我要导入其他文件怎么办?(不是每次都要该下这个代码吧?)
我希望从路径当中获取文本文件的名称。。。。这样每次都能正常导入文件了,谢谢!
10 楼
sywzs [专家分:5650] 发布于 2009-05-20 06:37:00
用一下语句替换,输入时可以不输入文件扩展名,但文件的数据格式必须与 6HS01.TXT相同。
ACCEPT "请输入文本文件名(包含路径):" TO WJM
IF LOWER(RIGHT(WJM,4))<>".txt"
WJM=WJM+".txt"
ENDIF
STORE FOPEN(WJM) TO nFileHandle
我来回复