2017-10-19 4 views
1

をCSVファイルからアルファベット順に並べ替え:(。csvファイルでカンマ区切りいくつかの例を)私は、音楽ライブラリを並べ替えしようとしています:VB - 私は、ソートが、ここに行くの主題について多くを知らない

1、スイートホームAlabame、レーナード・スキナード、4:40、クラシック・ロック

2、Misirlou、ディック・デイル、2:16、サーフロック

私は(トラックのタイトルによって)アルファベット順にソートする必要がありますが、私は2つのことを知らない: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

現在、すべてのフィールドを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

関連する問題

 関連する問題