我一直在寻找Visual Basic.NET中的数组排序,但是我的代码始终返回null。即我得到一个包含以下内容的文本文件:
Ahmed 50 (Not_available)
Thor 44 (Available)
Clark 85 (Not_available)
Sally 93 (Available)
我想按第一个单词的第一个字母对它们进行排序。所以输出将是:
Ahmed 50 (Not_available)
Clark 85 (Not_available)
Sally 93 (Available)
Thor 44 (Available)
首先,我使用.Split(" ")
方法将它们分成数组。然后,我使用.Trim()
卸下所有回车。最后,我使用Array.Sort()
有我的代码:
Dim Data As String() = My.Computer.FileSystem.ReadAllText("store.txt").Split(vbCrLf)
Try
For Count = 0 to Data.Length - 1
Data(Count).Trim()
Next
Catch ex As Exception
End Try
Array.Sort(Data)
当我使用MsgBox(Data(0))
调用元素时,返回的
为空。
代码中是否存在任何错误?任何答复将不胜感激。谢谢
答案 0 :(得分:0)
您可以在一行中完成所有操作:
Dim data = File.ReadLines("file path here").
Select(Function(s) s.Trim()).
OrderBy(Function(s) s).
ToArray()
值得注意的是,您实际上并没有修剪数据,因为该Trim
方法无法就地工作。实际上,它会返回一个新的String
,因此您需要将其分配回数组元素。
答案 1 :(得分:0)
空Catch
不好。它只是吞没了错误,您不知道出了什么问题。
检查.Split
方法的重载。 https://docs.microsoft.com/en-us/dotnet/api/system.string.split?view=netcore-3.1#overloads vbCrLF
实际上是2个字符。它是一个字符串。将其更改为Char
数组会使Split
感到高兴。添加可选的StringSplitOptions.RemoveEmptyEntries
参数可消除由Cr(回车)和Lf(换行)分割造成的空白行
使用Option严格关闭方法(不转换为Char数组)会产生奇怪的结果。严格选项应该始终处于启用状态。
Private Sub OPCode()
Dim Data As String() = My.Computer.FileSystem.ReadAllText("store.txt").Split(vbCrLf.ToCharArray, StringSplitOptions.RemoveEmptyEntries)
Array.Sort(Data)
For Each s In Data
Debug.Print(s) 'see results in Immediate Window
Next
End Sub
使用System.IO File类更简单,最新。将第一行替换为
Dim Data = File.ReadAllLines("store.txt")
并添加
Imports System.IO
在文件顶部。