您好我正在尝试搜索一行,其中包含用户在文本框中输入的内容并显示整行。单击按钮后,下面的代码没有显示消息框,我不确定是否找到了记录
Dim filename, sr As String
filename = My.Application.Info.DirectoryPath + "\" + "mul.txt"
Dim file As String()
Dim i As Integer = 0
file = IO.File.ReadAllLines(filename)
Dim found As Boolean
Dim linecontain As Char
sr = txtsr.ToString
For Each line As String In file
If line.Contains(sr) Then
found = True
Exit For
End If
i += 1
If found = True Then
MsgBox(line(i))
End If
Next
End Sub
答案 0 :(得分:1)
您应该在此处拨打ReadLines
而不是ReadAllLines
。不同之处在于ReadAllLines
首先将整个文件内容读入数组,然后才能开始处理任何数据,而ReadLines
在处理完前一行之前不会读取一行。如果您希望随机访问整个文件,或者您希望多次处理数据,那么ReadAllLines
会很好。如果您想在某条线满足某些条件时停止处理数据,那么ReadLines
就很好。如果您正在查找包含某些文字的行,并且您的文件中包含第一行匹配的一百万行,ReadAllLines
将读取所有一百万行,而ReadLines
只会读取第一
所以,这里是显示包含特定文本的第一行的方式:
For Each line In File.ReadLines(filePath)
If line.Contains(substring) Then
MessageBox.Show(line)
Exit For
End If
Next
关于原始代码,使用i
毫无意义。您似乎正在使用i
作为行计数器,但没有必要,因为您正在使用For Each
循环,因此line
包含该行。如果您已经拥有该行,为什么需要按索引获取该行?此外,当您尝试显示消息时,您使用i
索引line
,这意味着您将从该行获取单个字符,而不是从该行获取单行阵列。如果该行的索引大于该行中的字符数,那么就会抛出一个IndexOutOfRangeException
,我猜这是你发生的事情。
这是编写代码而不知道它实际上必须先做什么的。如果您在编写代码之前已经写出了算法,那么很明显代码并没有实现算法。如果你没有算法,你没有什么可以比较你的代码,以确保它是有道理的。