计算文件中某个特定名称之后的名称数量?

时间:2019-04-10 19:52:01

标签: vb.net

我正在尝试编写一个程序,该程序将计算文件中“ Patti”一词后的名称数量。

Private Sub btnP_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnP.Click
    Dim inFile As StreamReader = New StreamReader("pattiparty.txt")
    'Declare the varibles
    Dim variableName As String ' the current names from the file
    Dim names As String
    Do
        'read in the names
        variableName = inFile.ReadLine()
        'determine the two consecutive names after Patti
        If variableName = "Patti" Then
            names = variableName + 2
        End If
    Loop Until variableName = "Patti"
    'the loop keeps going until "Patti" is read

    'output the results
    Me.lblOutput.Text = names

End Sub

结束班级

该程序应该在名称“ Patti”之后显示两个名称,但是我得到了一个错误。

2 个答案:

答案 0 :(得分:0)

因此,您将要继续循环,直到a)读取了目标字符串“ Patti”并且b)读取了接下来的2行或到达文件末尾。识别出名称“ Patti”之后,您可以设置标志foundName = true,并为下一行的每一行增加读取的额外名称的数量,直到同时读取或到达行尾为止。

答案 1 :(得分:0)

使用 variableName = inFile.ReadLine() ,您正在读取字符串值,因此,使用 names = variableName + 2 ,您尝试添加{{ 1}}值Integer转换为字符串值。没有真正的用处。

您需要阅读文件的每一行,并在找到特定的模式后开始将字符串值添加到变量/集合中。然后确定要从文件中读取多少行。
因此,这: 2 将无济于事,您将在找到模式后立即退出循环,并且永远也不会得到任何提示。

当然,您同时可能已到达文件流的末尾。或者,可能找不到您指定的模式。

一个简单的解决方案是在找到模式后立即使用设置为Loop Until variableName = "Patti"的布尔标志,然后仅在标志设置为{{1}时收集指定的行数(如果有) }。收获了要求的内容后,退出循环。
True 条件可确保我们不会读到流的末尾。

最后要做的是将找到的字符串添加到负责呈现结果的控件的Text属性中。在这里,我使用String.Join()将结果字符串粘合在一起,并用空格隔开。

True