注册 登录
编程论坛 VB6论坛

关于VB读取文件的问题

renxiaoyao36 发布于 2016-12-31 17:59, 2176 次点击
这是我的代码
程序代码:
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编辑过]

5 回复
#2
xzlxzlxzl2017-01-01 10:00
目前看到的错误很明显:
1,已经获取一个文件号FreeNumber(一般会从1开始),却又用固定文件号#1读取“Line Input #1, UnchangedData(FreeNumber)”
2,估计你UnchangedData是一个数组,可惜数组下标使用了固定的文件号FreeNumber值,所以你永远只把文件数据读取到UnchangedData(1)里,当然只显示读取到1行数据了
3,我猜想这句应该修改为:Line Input #FreeNumber, UnchangedData(i)
#3
renxiaoyao362017-01-02 11:32
回复 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编辑过]

#4
renxiaoyao362017-01-02 11:44
我刚才想到了一个可能,就是会不会是因为我每次尝试读取的文件都是docx文件导致的问题,所以我刚才用TXT文件测试了一下,显示正常读取到了7行文件。说明代码本身在读取别的文件时没有问题。
那么问题来了,我用这个代码读取92KB的docx文档,理论上如果它只有一行,那么应该全部读取到数组的一个值里面。但实际上,它输出的时候只输出了1KB的字符,所以我才会认为它有错误。
请教一下为何会出现这种情况。
#5
xzlxzlxzl2017-01-02 12:18
word文档应该用vb的binary文件读写方式读写,即使读写出来了也很难解析出你需要的文本。一般都是通过操作word应用的对象来读写word文档内容的,百度“vb如何读写word文档”,就可以看到很多这方面的代码。
#6
忙郎2017-03-01 12:04
word文档不是纯粹的可显示字符,可能有txt文件的文件结尾符号吧?应该以二进制格式读取。
1