在为每个实例打印输出时循环遍历整个文件

时间:2014-10-23 06:38:21

标签: arrays vb.net loops

  1. 标题几乎涵盖了它,我正在搜索一个数组,并希望为每个找到的实例打印输出。我当前的代码找到指定的值并返回其位置,但是在找到第一个实例后停止并且我想要它们全部停止。

  2. 还有一种方法可以将文本框用于我的搜索值吗?或者,如果我使用文本框,它总是搜索为字符串? Bc不会这样做:(

  3. 输出现在转到txtbox。这是长时间输出的最佳选择吗?我知道,不仅仅是原来的问题。但#1是头等大事。任何帮助都是受欢迎和赞赏的。

  4. 我当前的代码=

     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

    中的第一件事

1 个答案:

答案 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如果你的搜索结果有些复杂(据我所见,不是在这种特殊情况下)。