所以我试图创建一个代码,用户输入一个ID号并接收ID对应的文本行。我无法使用代码,因为我无法在标签框中显示结果(或正确的结果)。
例如:
如果输入ID 1,则显示与ID 2对应的数据,ID 2对应ID 3,ID 3结束循环(当前数据中只有3条记录)。
我已将我的代码包含在
之下Private Sub btnSearch_Click(sender As Object, e As EventArgs) Handles btnSearch.Click
Filename = "NamesAndAges.txt"
FileOpen(1, Filename, OpenMode.Input,,,)
Dim ID As Integer
ID = txtSearch.Text
Dim Found As Boolean
Found = False
Do While Not EOF(1) And Found = False
If LineInput(1).Contains(ID) Then
lblDisplaySearch.Text = LineInput(1)
Found = True
Else MsgBox("Not Found")
End If
Loop
FileClose(1)
End Sub
提前感谢,如果有人能解释他们使用的代码,我也会非常感激,因为我仍然是一个视觉基础初学者。
答案 0 :(得分:0)
每次拨打LineInput(1)
时,它都会读取一行,因此您正在读取一行并检查其是否包含ID,然后读取另一行并将lblDisplaySearch.Text
设置为该值。
尝试这样的事情:
Dim line As String
Do While Not EOF(1) And Found = False
line = LineInput(1)
If line.Contains(ID) Then
lblDisplaySearch.Text = line
Found = True
Else MsgBox("Not Found")
End If
Loop
答案 1 :(得分:0)
我强烈建议您使用File.ReadLines
:
Private Sub btnSearch_Click(sender As Object, e As EventArgs) Handles btnSearch.Click
Filename = "NamesAndAges.txt"
Dim line = File.ReadLines(Filename).FirstOrDefault(Function(x) x.Contains(txtSearch.Text))
If line Is Nothing Then
MsgBox("Not Found")
Exit Sub
End If
lblDisplaySearch.Text = line
End Sub
主要优点是您无需管理Do While
循环。相反,您将匹配条件(Function(x) x.Contains(txtSearch.Text)
)传递给FirstOrDefault
方法,该方法在内部将找到与条件匹配的第一行并将其返回,或者如果找不到则返回Nothing
。
For Each
和IEnumerable
VB.NET允许您在不知道或关心集合中的索引的情况下循环遍历一组项目。例如:
For Each x As String In File.ReadLines(Filename)
'do something with the line, which is now in x
Next
为了将For Each
与对象一起使用,该对象必须implement一个特定的interface - IEnumerable
接口。
接口保证给定对象具有或实现特定成员。在这种情况下,如果一个对象实现了IEnumerable
接口,那意味着它有一个GetEnumerator
方法,For Each
使用它。
从File.ReadLines
返回的对象实现了另一个名为IEnumerable(Of T)
的更高级generic接口。使用此接口,编译器可以自动确定For Each
的每一步都将解析一个字符串,我们不需要将其指定为字符串:
For Each x In File.ReadLines(Filename)
'x is known to be a String here
Next
条件“包含搜索文本的行”被写为 lambda表达式,它(在这种情况下)被制作成没有明确名称或定义的方法。这很方便,因为我们不必写这个:
Function ContainsCondition(line As String, toFind As String) As Boolean
Return line.Contains(toFind)
End Function`
每当我们想以这种方式表达条件时。
条件<{strong>
中x
的类型
因为File.ReadLines
返回IEnumerable(Of T)
,在这种情况下是IEnumerable(Of String)
,编译器可以发现条件正在处理字符串,所以我们不必指定{ {1}}是条件中的字符串。