为了账号安全,请及时绑定邮箱和手机立即绑定

以下代码是关于vb space问题,麻烦大佬帮忙看看~

以下代码是关于vb space问题,麻烦大佬帮忙看看~

人到中年有点甜 2021-12-01 15:11:01
Private Sub Command1_Click()Dim fileNum As IntegerDim fileContent As StringDim fileInfo() As StringDim tempData As StringfileNum = FreeFileOpen "C:\form.txt" For Binary As #fileNumfileContent = Space(LOF(fileNum)) ' Get #fileNum, , fileContentClose fileNumfileInfo = Split(fileContent, vbCrLf) 'split函数根据vbCrLf(回车换行)来将fileContent分隔成数组Text1.Text = fileInfo(0)End Sub想问一下高手,因为觉得这句话的Space只是返回空格的长度,为什么上面的程序一定要“fileContent = Space(LOF(fileNum)) ”这句话才能不报错运行?而下面的fileInfo = Split(fileContent, vbCrLf)这句程序,是将fileContent的内容分隔成数组,与上面fileContent = Space(LOF(fileNum)) 这句程序有必然的关系吗?
查看完整描述

2 回答

?
慕的地6264312

TA贡献1817条经验 获得超6个赞

fileContent = Space(LOF(fileNum))

只是为了给fileContent这个字符串申请存放"C:\form.txt"这个文件内容的空间,
如果不加这句,你的字符串变量fileContent就会因为没地方放文件内容而报错

你如果只是想显示文件的一行的话,可以像下面这样
Private Sub Command1_Click()
Dim fileNum As Integer
Dim fileContent As String
fileNum = FreeFile
Open "C:\form.txt" For Binary As #fileNum
Line Input #fileNum, fileContent
Close fileNum
Text1.Text = fileContent
End Sub
如果想对文件的每行进行单独处理的话就只需将line input这句放在do..loop until eof(filenum)这个循环中



查看完整回答
反对 回复 2021-12-07
?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

因为打开文件的模式是 Binary ,在 Get #fileNum, , fileContent 那儿,
是按“输入变量的值”占用的空间来决定读取多少内容。
fileContent 是变长字符串,它的初始长度是0,也就是一个空串。
如果不对fileContent进行一个“初始化”的操作,那么它在Get语句中,只“读取”0字节内容。

简单地说,就是什么东西都不会读取。
因此,先让fileContent的“长度”为文件的字节数,
在Get语句那儿,就会把整个文件内容读入fileContent中。
这个是按“字符个数”来读取的,最少会读取 len(fileContent)字节。
如果内容全是西文的,字节数跟字符数是相同的。
但是,如果文件内容中有“中文字符”,那么读取的字节数就会增加(当然最多是文件长度)。
你这段代码的作用,是把整个文件读取到内存(在fileContent的值中),
然后,按“每一行”进行一次拆分,形成一个数组。
最后,这个数组的每一个元素,就是文件中的每一行的内容。
只是这个方法有一点小BUG:
如果文件内容中有中文、并且以vbCrLf结束,最后一个元素会是一串空格。
如果文件内容中有中文但结束处不带vbCrLf,则“最后一行”就会多出一些空格来。



查看完整回答
反对 回复 2021-12-07
  • 2 回答
  • 0 关注
  • 294 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信