我是编程新手并决定将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
所以我要问的是如何声明搜索到的数字,是否有任何简单的方法来搜索数字而不是列出所有数字?
答案 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
具有Name
和Score
属性的匿名类型。