2017-10-19 59 views
1

我不知道了很多關於分類的主題,但這裏有雲:我想排序音樂庫: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

回答

1

現在您將所有字段放入一長串文本(每行)中。

爲了按特定字段排序,您需要構建行和列矩陣。例如,一個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