vb space问题

PrivateSubCommand1_Click()DimfileNumAsIntegerDimfileContentAsStringDimfileInfo()AsStr... 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)) 这句程序有必然的关系吗?
展开
 我来答
网海1书生
科技发烧友

推荐于2016-05-02 · 擅长软件设计、WEB应用开发、小程序
网海1书生
采纳数:12311 获赞数:26228

向TA提问 私信TA
展开全部

首先纠正一皮宽下,Space不是返回空格的长度,而是生成一个指定长度的由空格组成的字符串!

fileContent = Space(LOF(fileNum))这个其实是在内存中生成一个与文件长度一样的缓冲区,然后下面的Get #fileNum, , fileContent就把整个文件内容读到这个缓冲区肆郑中,也就是说最终读取文件的多少是由fileContent这个变量的实际长度决定的!所以fileContent = Space(LOF(fileNum))这个是非常必要的,不是可燃雹亮有可无的!!!

其实换个思路程序可以大大简化:

Private Sub Command1_Click()
Dim fileNum As Integer
Dim fileInfo() As String
fileNum = FreeFile
Open "C:\form.txt" For Binary As #fileNum
fileInfo = Split(Input(LOF(fileNum), #fileNum), vbCrLf)
Close fileNum
Text1.Text = fileInfo(0)
End Sub
百度网友95cc616
2014-01-26 · TA获得超过251个赞
知道小有建树答主
回答量:448
采纳率:100%
帮助的人:272万
展开全部
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)这个循环中
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友2032eaa
2014-01-26 · TA获得超过809个赞
知道大有可为答主
回答量:2149
采纳率:100%
帮助的人:1820万
展开全部
Space 函数是返回指定个数的空格
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
涐吢铱舊囿儚
2014-01-26 · TA获得超过488个赞
知道小有建树答主
回答量:512
采纳率:100%
帮助的人:581万
展开全部
因为打开文件的模式是 Binary ,在 Get #fileNum, , fileContent 那儿,
是按“输入变量的值”占用的空间来决定读取多少内容。

fileContent 是变长字符串,它的初始长度是0,也就是一个空串。
如果不对fileContent进行一个“初始化”的操作,那么它在Get语句中,只“读取”返纳0字节内容。
 简单地说,就是什么东西都不会读取。
因此,先让fileContent的“长度”为文件的字节数,
  在Get语句那儿,就会把整个文件内容读入fileContent中。
这个是按“字符个数”来读取的,最少会读取 len(fileContent)字节。
如果内容全是西文的,字节数跟字符数是相同的。
但是,如果文件内容中有“中文字符”,那么读取的字节数就会增加(当然最多是文件长度)。
你这段代码的作用,是把整个文件读取到内存(在fileContent的值中),
然后,按“每一行”进行一次拆分,形成一个数组。

最后,这个数组的每一个元素,就兄弊是文件中的每一行的内容。
只是这个方法有一点小BUG:
  如果文件内容中羡世族有中文、并且以vbCrLf结束,最后一个元素会是一串空格。
  如果文件内容中有中文但结束处不带vbCrLf,则“最后一行”就会多出一些空格来。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式