VB - 按字母顺序排序从CSV文件
我不知道了很多关于分类的主题,但这里有云:我想排序音乐库:VB - 按字母顺序排序从CSV文件
(逗号在CSV文件中分隔的一些例子。)1,甜蜜的家Alabame,林纳·史金纳,4:40,经典摇滚
2,Misirlou,迪克·戴尔,2:16,冲浪摇滚
我需要将它们按字母顺序排序(按曲目的标题),但我不知道两件事:1.为什么我目前的技术不工作:
Dim array() As String = {}
sr = New StreamReader("library.csv")
counter = 1
Do Until sr.EndOfStream
array(counter) = sr.ReadLine()
counter += 1
Loop
System.Array.Sort(Of String)(array)
Dim value As String
For Each value In array
Console.WriteLine(value)
Next
Console.ReadLine()
我不知道这是否是排序的最佳方式。然后我需要显示它们。我可以做到这一点没有排序,但无法弄清楚如何做到与排序。
请帮忙(来自不同于我的人,他们知道他们在做什么)。
现在您将所有字段放入一长串文本(每行)中。
为了按特定字段排序,您需要构建行和列矩阵。例如,一个DataTable
。
这里是一个类,应该为你做的伎俩:
https://www.codeproject.com/Articles/11698/A-Portable-and-Efficient-Generic-Parser-for-Flat-F
下面是文章,翻译成VB示例使用代码:
Public Class CsvImporter
Public Sub Import()
Dim dsResult As DataSet
' Using an XML Config file.
Using parser As New GenericParserAdapter("MyData.txt")
parser.Load("MyData.xml")
dsResult = parser.GetDataSet()
End Using
' Or... programmatically setting up the parser for TSV.
Dim strID As String, strName As String, strStatus As String
Using parser As New GenericParser()
parser.SetDataSource("MyData.txt")
parser.ColumnDelimiter = vbTab.ToCharArray()
parser.FirstRowHasHeader = True
parser.SkipStartingDataRows = 10
parser.MaxBufferSize = 4096
parser.MaxRows = 500
parser.TextQualifier = """"c
While parser.Read()
strID = parser("ID")
strName = parser("Name")
' Your code here ...
strStatus = parser("Status")
End While
End Using
' Or... programmatically setting up the parser for Fixed-width.
Using parser As New GenericParser()
parser.SetDataSource("MyData.txt")
parser.ColumnWidths = New Integer(3) {10, 10, 10, 10}
parser.SkipStartingDataRows = 10
parser.MaxRows = 500
While parser.Read()
strID = parser("ID")
strName = parser("Name")
' Your code here ...
strStatus = parser("Status")
End While
End Using
End Sub
End Class
还有这个来自here,展示DataTable
用法:
Dim csv = "Name, Age" & vbCr & vbLf & "Ronnie, 30" & vbCr & vbLf & "Mark, 40" & vbCr & vbLf & "Ace, 50"
Dim reader As TextReader = New StringReader(csv)
Dim table = New DataTable()
Using it = reader.ReadCsvWithHeader().GetEnumerator()
If Not it.MoveNext() Then
Return
End If
For Each k As var In it.Current.Keys
table.Columns.Add(k)
Next
Do
Dim row = table.NewRow()
For Each k As var In it.Current.Keys
row(k) = it.Current(k)
Next
table.Rows.Add(row)
Loop While it.MoveNext()
End Using
和this Q&A说明如何按给定列对DataTable
进行排序。
哇!我没有期待这么快速的答复。我今天要去度假,所以我会在周一或周二回来的时候尝试。谢谢。 –
@JayCloth - 欢迎来到SO :-) – InteXX
请阅读[问]并参加[旅游] – Plutonix