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

Private Sub Command1_Click()
Dim fileNum As Integer
Dim fileContent As String
Dim fileInfo() As String
Dim tempData As String

fileNum = FreeFile
Open "C:\form.txt" For Binary As #fileNum
fileContent = Space(LOF(fileNum)) ' 
Get #fileNum, , fileContent
Close fileNum
fileInfo = 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)) 这句程序有必然的关系吗?

人到中年有点甜
浏览 295回答 2
2回答

慕的地6264312

fileContent = Space(LOF(fileNum))只是为了给fileContent这个字符串申请存放"C:\form.txt"这个文件内容的空间,如果不加这句,你的字符串变量fileContent就会因为没地方放文件内容而报错你如果只是想显示文件的一行的话,可以像下面这样Private Sub Command1_Click()Dim fileNum As IntegerDim fileContent As StringfileNum = FreeFileOpen "C:\form.txt" For Binary As #fileNumLine Input #fileNum, fileContentClose fileNumText1.Text = fileContentEnd Sub如果想对文件的每行进行单独处理的话就只需将line input这句放在do..loop until eof(filenum)这个循环中

呼啦一阵风

因为打开文件的模式是 Binary ,在 Get #fileNum, , fileContent 那儿,是按“输入变量的值”占用的空间来决定读取多少内容。fileContent 是变长字符串,它的初始长度是0,也就是一个空串。如果不对fileContent进行一个“初始化”的操作,那么它在Get语句中,只“读取”0字节内容。简单地说,就是什么东西都不会读取。因此,先让fileContent的“长度”为文件的字节数,在Get语句那儿,就会把整个文件内容读入fileContent中。这个是按“字符个数”来读取的,最少会读取 len(fileContent)字节。如果内容全是西文的,字节数跟字符数是相同的。但是,如果文件内容中有“中文字符”,那么读取的字节数就会增加(当然最多是文件长度)。你这段代码的作用,是把整个文件读取到内存(在fileContent的值中),然后,按“每一行”进行一次拆分,形成一个数组。最后,这个数组的每一个元素,就是文件中的每一行的内容。只是这个方法有一点小BUG:如果文件内容中有中文、并且以vbCrLf结束,最后一个元素会是一串空格。如果文件内容中有中文但结束处不带vbCrLf,则“最后一行”就会多出一些空格来。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java
Python