如何用行声明文本

时间:2015-07-02 17:25:57

标签: vb.net

我是编程新手并决定将VB.net作为我的第一语言,我很新,而且我正在尝试编写一个排序程序。我正在尝试加载文件,在文件中搜索一行中的特定值,然后声明该值。

这是我的代码:

Using currentfilereader As StreamReader = New StreamReader("S:\class" & CName & ".rtf")
        line = currentfilereader.ReadLine
        Do While (Not line Is Nothing)
            If line.Contains("0" Or "1" Or "2" Or "3" Or "4" Or "5" Or "6" Or "8" Or "9" Or "10") Then
            [help]
            End If
            list.Add(line)
            Console.WriteLine(line)
            line = currentfilereader.ReadLine
        Loop
    End Using

所以我要问的是如何声明搜索到的数字,是否有任何简单的方法来搜索数字而不是列出所有数字?

http://i.imgur.com/mDppEib.jpg

4 个答案:

答案 0 :(得分:0)

Using currentfilereader As StreamReader = New StreamReader("S:\class" & CName & ".rtf")
    Do
        line = currentfilereader.ReadLine
        If IsNumeric(line) AndAlso CInt(line) >= 1 AndAlso CInt(line)<= 10 Then
            list.Add(line)
            Console.WriteLine(line)
        End If
    Loop Until currentfilereader.EndOfStream
End Using

由于看起来你想要的只是值0 - 10,你可以将行转换为整数并检查它是否在该范围内。

AndAlso是一个短路的比较,这意味着只要你的一个值是假的,它就会停止比较并继续进行。

此外,您应该确保您的读者在找到EndOfStream时结束,而不是在您的行是Nothing时结束。

答案 1 :(得分:0)

您可以尝试将此文件保存在数组中:

  Dim fileReader As StreamReader
    fileReader = My.Computer.FileSystem.OpenTextFileReader("F:\\test.txt")

    Dim numeros As New List(Of String)

    Dim stringReader As String
    stringReader = Convert.ToChar(fileReader.Read)

    Do While (fileReader.Peek() >= 0)
        stringReader = Convert.ToChar(fileReader.Read)

        If stringReader Like "#" Then
            numeros.Add(stringReader)
        End If
    Loop

答案 2 :(得分:0)

这可以更快地完成

Dim lines() As String = System.IO.File.ReadAllLines("S:\class" & CName & ".rtf")
For Each line as String in lines

    ' here I am not sure what you asking but you can do these to identify line
    ' Regex.Match("[0-9]+")
    ' line.contains...
    ' line.IndexOf...

    ' Do whatever you need with the line here

Next

答案 3 :(得分:0)

使用正则表达式检查匹配并提取分数值将是一个选项。使用File.ReadLines(或File.ReadAllLines pre .NET 4.0)将简化IO。您还可以使用LINQ查询匹配的行并对其进行排序:

Dim sortedScores =
    From line in File.ReadLines("S:\class" & CName & ".rtf")
    Let match = Regex.Match(line, "Score: (\d+)")
    Where match.Success
    Order By CInt(match.Groups(1).Value) Descending
    Select line
For Each line In sortedScores
    Console.WriteLine(line)
Next

您可以删除Descending您希望从最低到最高的位置。

如果要提取分数值,可以稍微修改一下查询:

Dim justTheScores =
    From line in File.ReadLines("S:\class" & CName & ".rtf")
    Let match = Regex.Match(line, "Score: (\d+)")
    Where match.Success
    Select CInt(match.Groups(1).Value)

justTheScores将只包含分数IEnumerable(Of Integer)

更有用的可能是提取名称和分数:

Dim results =
    From line in File.ReadLines("S:\class" & CName & ".rtf")
    Let match = Regex.Match(line, "Name: (.*) \| Score: (\d+)")
    Where match.Success
    Select Name = match.Groups(1).Value, Score = CInt(match.Groups(2).Value)

这将为您提供IEnumerable具有NameScore属性的匿名类型。