【问题标题】:I am having trouble getting a text file to an array, and then sorting the array我无法将文本文件放入数组,然后对数组进行排序
【发布时间】:2014-12-20 00:17:32
【问题描述】:

我需要将保存的文本文件读入一个数组,然后对其进行数字排序。这相当困难,因为文本文件是:

10 First name:bob
30 first name:sam

等等。它不是这样排序的,它以分数“名字”&名字的结构保存在文本文件中。我必须对它进行排序,从最高到最低。我试过sort.array。但这仅用于按字母顺序对只有单词的数组进行排序。我尝试了其他过程,但它们似乎不起作用。有人能帮我吗。谢谢

【问题讨论】:

  • 欢迎来到 Stack Overflow!请花点时间仔细查看:How to Ask

标签: arrays vb.net sorting numbers text-files


【解决方案1】:

使用 LINQ:

    Dim DataFileName As String = "C:\Users\Mike\Documents\Data.txt"
    Dim SortedByScore = From line In System.IO.File.ReadLines(DataFileName)
                        Let score = CInt(line.Split(" ")(0))
                        Order By score Descending
                        Select line
    For Each line As String In SortedByScore
        Debug.Print(line.ToString)
    Next

将 Array.Sort() 与比较器一起使用:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim DataFileName As String = "C:\Users\Mike\Documents\Data.txt"
    Dim Lines() As String = System.IO.File.ReadAllLines(DataFileName)
    Array.Sort(Lines, AddressOf SortByScore)
    For Each line As String In Lines
        Debug.Print(line.ToString)
    Next
End Sub

对于问题中指定的原始格式为:10 First name:bob

Private Function SortByScore(ByVal x As Object, ByVal y As Object) As Integer
    Dim valuesX() As String = x.ToString.Split(" ")
    Dim valuesY() As String = y.ToString.Split(" ")
    Return CInt(valuesY(0)).CompareTo(CInt(valuesX(0)))
End Function

如果格式其实是:bob{vbTab}score :10,那么试试:

Private Function SortByScore(ByVal x As Object, ByVal y As Object) As Integer
    Dim valuesX() As String = x.ToString.Split(":")
    Dim valuesY() As String = y.ToString.Split(":")
    Return CInt(valuesY(1)).CompareTo(CInt(valuesX(1)))
End Function

【讨论】:

  • Private Sub Btn_Averages3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cmb_Averages3.Click Dim DataFileName As String = "G:\ControlleAssesmentClass\Class3\average3.txt" Dim Lines( ) As String = System.IO.File.ReadAllLines(DataFileName) Array.Sort(Lines, AddressOf SortByScore) For Each line As String In Lines Debug.Print(line.ToString) Next
  • 私有函数 SortByScore(ByVal x As Object, ByVal y As Object) As Integer Dim valuesX() As String = x.ToString.Split(" ") Dim valuesY() As String = y.ToString .Split(" ") 返回CInt(valuesY(0)).CompareTo(CInt(valuesX(0))) 结束函数
  • 它说 Microsoft.VisualBasic.dll 中发生“System.InvalidCastException”类型的异常,但未在用户代码中处理附加信息:从字符串“12 Heavy”转换为“Integer”类型不是有效的。如果有这个异常的处理程序,程序可以安全地继续。
  • 然后在 mscorlib.dll 中发生“System.InvalidOperationException”类型的未处理异常附加信息:无法比较数组中的两个元素。
  • 但文本文件设置为“11 light”,然后是选项卡“12 heavy”
猜你喜欢
  • 1970-01-01
  • 2015-10-22
  • 1970-01-01
  • 2019-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-08
  • 2019-04-20
相关资源
最近更新 更多