| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1832 人关注过本帖
标题:关于VB读取文件的问题
只看楼主 加入收藏
renxiaoyao36
Rank: 9Rank: 9Rank: 9
来 自:七宝中学
等 级:贵宾
威 望:31
帖 子:347
专家分:1077
注 册:2014-9-18
结帖率:92.31%
收藏
已结贴  问题点数:20 回复次数:5 
关于VB读取文件的问题
这是我的代码
程序代码:
FreeNumber = FreeFile
Open Text1.Text For Input As #FreeNumber
DoEvents

 While Not EOF(FreeNumber)
i = i + 1
Line Input #1, UnchangedData(FreeNumber)
DoEvents
Wend
Close #FreeNumber

用这个段代码只能读取到一行的字符,应该怎么修改?忘记应该这么做了,以前自己做的东西也找不到了,在此求助
在设置了节点查错之后,发现While语句在读取了一遍之后自动跳过了

如果这些不足以查错,我就把全部代码发上来
冥思苦想半天,查了半天资料还是觉得代码没错,觉得这段代码应该没问题

[此贴子已经被作者于2016-12-31 18:34编辑过]

2016-12-31 17:59
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:20 
目前看到的错误很明显:
1,已经获取一个文件号FreeNumber(一般会从1开始),却又用固定文件号#1读取“Line Input #1, UnchangedData(FreeNumber)”
2,估计你UnchangedData是一个数组,可惜数组下标使用了固定的文件号FreeNumber值,所以你永远只把文件数据读取到UnchangedData(1)里,当然只显示读取到1行数据了
3,我猜想这句应该修改为:Line Input #FreeNumber, UnchangedData(i)
2017-01-01 10:00
renxiaoyao36
Rank: 9Rank: 9Rank: 9
来 自:七宝中学
等 级:贵宾
威 望:31
帖 子:347
专家分:1077
注 册:2014-9-18
收藏
得分:0 
回复 2楼 xzlxzlxzl
我回去修改一下之后发现依然只能读取到一行的数据
为了方便各位查错,我将所有代码发上来
程序代码:
Dim UnchangedData() As String, ChangedData() As String
Private Sub Command1_Click()
If Text1.Text = "" Or Text2.Text = "" Or Text3.Text = "" Or Text4.Text = "" Then
MsgBox "参数不完全。", vbCritical '检查参数完整性
Exit Sub
End If

If Text5.Text = "未开始转换" Then
Text5.Text = "" '清空日志
End If
Text5.Text = Text5.Text & vbCrLf & Now & "读取“" & Text1.Text & "”内的数据" '输出日志
'-----------------------

Dim LenTmp As Integer, FreeNumber As Integer


ReDim UnchangedData(1 To 65565) '重定义需要的变量
ReDim ChangedData(1 To 65565)
FreeNumber = FreeFile
Open Text1.Text For Input As #FreeNumber
DoEvents

 While Not EOF(FreeNumber)
i = i + 1
Line Input #FreeNumber, UnchangedData(i)
DoEvents
Wend
Close #FreeNumber
LenTmp = i'标记读取到了多少行
Text5.Text = Text5.Text & vbCrLf & Now & "读取到" & LenTmp & "行的数据" '输出日志

'-------------------------

Text5.Text = Text5.Text & vbCrLf & Now & "开始替换" '输出日志
DoEvents
For i = 1 To LenTmp
ChangedData(i) = Replace(UnchangedData(i), Text2.Text, Text3.Text)
DoEvents
Next i
Text5.Text = Text5.Text & vbCrLf & Now & "替换完毕" '输出日志
Text5.Text = Text5.Text & vbCrLf & Now & "开始输出到“" & Text4.Text & "”文件"  '输出日志

DoEvents
For i = 1 To LenTmp

 Open (Text4.Text) For Append As #1     '以追加方式打开文件
    Print #1, ChangedData(i) '在文件尾接着写入内容
   Close #1
   Next i
DoEvents
Close #1
Text5.Text = Text5.Text & vbCrLf & Now & "输出文件完毕"  '输出日志

End Sub

我是想做一个小程序,可以读取文件,将这个文件里的关键字用Replace更改为另外的字符,但是每次都显示只能读取到一行(我自己在代码里加入了查错模块)

[此贴子已经被作者于2017-1-2 11:39编辑过]


编程蛋疼的不是枯燥,而是辛辛苦苦编完几百行的代码,运行,“Runtime Error “xxx””。
2017-01-02 11:32
renxiaoyao36
Rank: 9Rank: 9Rank: 9
来 自:七宝中学
等 级:贵宾
威 望:31
帖 子:347
专家分:1077
注 册:2014-9-18
收藏
得分:0 
我刚才想到了一个可能,就是会不会是因为我每次尝试读取的文件都是docx文件导致的问题,所以我刚才用TXT文件测试了一下,显示正常读取到了7行文件。说明代码本身在读取别的文件时没有问题。
那么问题来了,我用这个代码读取92KB的docx文档,理论上如果它只有一行,那么应该全部读取到数组的一个值里面。但实际上,它输出的时候只输出了1KB的字符,所以我才会认为它有错误。
请教一下为何会出现这种情况。

编程蛋疼的不是枯燥,而是辛辛苦苦编完几百行的代码,运行,“Runtime Error “xxx””。
2017-01-02 11:44
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:0 
word文档应该用vb的binary文件读写方式读写,即使读写出来了也很难解析出你需要的文本。一般都是通过操作word应用的对象来读写word文档内容的,百度“vb如何读写word文档”,就可以看到很多这方面的代码。
2017-01-02 12:18
忙郎
Rank: 1
等 级:新手上路
威 望:1
帖 子:10
专家分:0
注 册:2016-1-23
收藏
得分:0 
word文档不是纯粹的可显示字符,可能有txt文件的文件结尾符号吧?应该以二进制格式读取。
2017-03-01 12:04
快速回复:关于VB读取文件的问题
数据加载中...
 
   



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

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