| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4950 人关注过本帖
标题:vfp如何读取txt文件到dbf表中
只看楼主 加入收藏
厨师王德榜
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:199
帖 子:991
专家分:4966
注 册:2013-2-16
收藏
得分:0 
等待时间太长,无非是你实际的这个文本文件太大,所以造成 cstr=FILETOSTR("0122012200.txt") 这一步读入内存时,耗用了大量时间.
如果真的是文件太大,用cstr=FILETOSTR("0122012200.txt")这样读入就不太合适了.
而且你自己的程序也是这样读入的. 所以改你的程序,和用我的程序,区别不是很大.
另外,我代码中的 :
IF istart > ALEN(axx) THEN 一句,改为 :
IF istart >= ALEN(axx) THEN 为好,这样更严密.
如果你的文本不是太大的话,这样改了,或许 等待时间过长的问题,就解决了.

[此贴子已经被作者于2020-4-21 14:10编辑过]

2020-04-21 12:31
王咸美
Rank: 1
等 级:新手上路
帖 子:665
专家分:3
注 册:2018-1-4
收藏
得分:0 
@厨师王德榜 非常感谢!问题已解决。能帮我修改一下我发的程序吗?期盼中…

[此贴子已经被作者于2020-4-21 17:20编辑过]

2020-04-21 14:46
王咸美
Rank: 1
等 级:新手上路
帖 子:665
专家分:3
注 册:2018-1-4
收藏
得分:0 
@厨师王德榜 程序运行几次后又无法运行了,不知道问题出自哪里?
2020-04-22 21:54
厨师王德榜
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:199
帖 子:991
专家分:4966
注 册:2013-2-16
收藏
得分:0 
要具体看你的文本文件,才好下结论,你这样只有现象,没有数据,我也不好判断啊.
2020-04-23 17:33
王咸美
Rank: 1
等 级:新手上路
帖 子:665
专家分:3
注 册:2018-1-4
收藏
得分:0 
@厨师王德榜 文本文件0122012200.txt在发贴时已上传,请帮忙看一下,具体什么原因造成的,请予指点。谢谢!
2020-04-23 19:05
厨师王德榜
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:199
帖 子:991
专家分:4966
注 册:2013-2-16
收藏
得分:0 
如果是前面几层楼发的0122012200.txt,那么这个代码跑完是没有问题的,我又测试了一次,确实没有问题。
除非换了另一个文本文件,而且另一个文件的内容有改变。
不过,原代码也有不严密的地方,我再修改一下,你再看看修改后的行不行:
程序代码:
CLOSE DATABASES 
cCurrentProcedure = SYS(16,1)
nPathStart = AT(":",cCurrentProcedure)- 1
nLenOfPath = RAT("\", cCurrentProcedure) - (nPathStart)
mypath=SUBSTR(cCurrentProcedure, nPathStart, nLenofPath)
SET Default TO (mypath)

cstr=FILETOSTR("0122012200.txt")

CREATE CURSOR gkcj (考生号 c(14),姓名 c(10),报名区县 c(10),报名点 c(20),总分 n(3),语文 n(3),数学 n(3),外语 n(3),综合 n(3))
* 以下内容,是我自己的逻辑.
    DIMENSION cj[1,9]
    LOCAL isEnd as Boolean
    =ALINES(axx,cstr,CHR(13)+CHR(10))
    cj = "" 
    istart =1 
    DO WHILE isEnd =.f.
        ino = ASCAN(axx,"2014年重庆市全国普通高考成绩通知单",istart)
        IF ino>0 THEN 
            istart = ino + 13
            IF istart >= ALEN(axx) THEN 
                isEnd = .t.
            ENDIF  
            cj[1,1]=LEFT(axx[ino + 6],14)  && 考生号 
            cj[1,2]=SUBSTR(axx[ino + 6],16)     && 姓名 
            cj[1,3]=SUBSTR(axx[ino + 4],11)  && 报名区县 
            cj[1,4]=SUBSTR(axx[ino + 8],11)     && 报名点 
            =ALINES(axxZf, STRTRAN(axx[ino +12],":","") ,space(1))
            irow2 = 5 
            FOR irow = 1 TO ALEN(axxZf)
                IF ISDIGIT(LEFTC(axxZf[irow],1)) THEN 
                    cj[1,irow2]=axxZf[irow]  && 总分 ,语文 ,数学 ,外语,综合 
                    irow2 = irow2 + 1 
                ENDIF 
            ENDFOR 
            RELEASE axxZf 
            INSERT INTO gkcj FROM ARRAY cj
            cj = "" 
        ELSE 
            EXIT 
        ENDIF 
    ENDDO     
2020-04-25 12:39
王咸美
Rank: 1
等 级:新手上路
帖 子:665
专家分:3
注 册:2018-1-4
收藏
得分:0 
@厨师王德榜 这次运行正常,非常感谢!
2020-04-25 16:00
快速回复:vfp如何读取txt文件到dbf表中
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019718 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved