我是编程新手,决定将 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
所以我要问的是如何声明搜索的号码,是否有任何简单的方法来搜索号码而不是列出所有号码?
https://i.stack.imgur.com/FHJdP.jpg https://i.stack.imgur.com/FHJdP.jpg
使用正则表达式检查匹配并提取分值是一种选择。使用File.ReadLines
(or File.ReadAllLines
.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
and Score
特性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)