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() 

我不知道这是否是排序的最佳方式。然后我需要显示它们。我可以做到这一点没有排序,但无法弄清楚如何做到与排序。

请帮忙(来自不同于我的人,他们知道他们在做什么)。

+0

请阅读[问]并参加[旅游] – Plutonix

现在您将所有字段放入一长串文本(每行)中。

为了按特定字段排序,您需要构建行和列矩阵。例如,一个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进行排序。

+0

哇!我没有期待这么快速的答复。我今天要去度假,所以我会在周一或周二回来的时候尝试。谢谢。 –

+0

@JayCloth - 欢迎来到SO :-) – InteXX