标题几乎涵盖了它,我正在搜索一个数组,并希望为每个找到的实例打印输出。我当前的代码找到指定的值并返回其位置,但是在找到第一个实例后停止并且我想要它们全部停止。
还有一种方法可以将文本框用于我的搜索值吗?或者,如果我使用文本框,它总是搜索为字符串? Bc不会这样做:(
输出现在转到txtbox。这是长时间输出的最佳选择吗?我知道,不仅仅是原来的问题。但#1是头等大事。任何帮助都是受欢迎和赞赏的。
我当前的代码=
Private Function findOffset()
Using reader As New BinaryReader(File.Open("FilePath", FileMode.Open, FileAccess.Read))
Dim pos As Integer = 0
Dim length As Integer = reader.BaseStream.Length
Do While pos < length
Dim value As Byte = reader.ReadByte()
If value = CByte(&H13) Then
Return pos
Exit Do
End If
pos += 1
Loop
End Using
End Function
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
TextBox1.Text = (Hex(findOffset()).ToString.PadLeft(6, "0"c))
End Sub
准备好晚上打电话,但会先回顾A.M
中的第一件事答案 0 :(得分:0)
你的第一个问题在于:
If value = CByte(&H13) Then
Return pos
Exit Do
End If
如果您找到第一个实例,则退出该功能并丢弃BinaryReader
。如果再次调用函数,则会在位置0创建一个新的阅读器。
尝试将代码更改为:
Dim positions As New List(Of Integer)()
[...]
If value = CByte(&H13) Then
positions.Add(pos)
End If
通过这种方式可以解决所有问题。
要显示您找到的所有值,您必须将它们连成一个String
:
TextBox1.Text = String.Join("|", findOffset())
如果您想以某种方式转换整数值,可以循环findOffset()
或使用LINQ&#39; Select
方法:
findOffset().Select(Function(i) Hex(i).ToString.PadLeft(6, "0"c))
对于您的第二个问题:只需将TextBox
的convertd文本属性作为函数参数传递给findOffSet
方法。
Private Function findOffset(ByVal search as Byte)
[...]
If value = search Then
[...]
End Function
并称之为:
findOffset(Convert.ToByte(Convert.ToInt16(mySearchTextBox.Text)))
您必须事先检查有效的文本输入,否则您将在此行获得例外。
并回答您的第三个问题:我认为TextBox
可以获得少量结果,但如果您有更多甚至是ListBox
,您应该考虑使用DataGridView
如果你的搜索结果有些复杂(据我所见,不是在这种特殊情况下)。