Udostępnij za pośrednictwem


Porady: zmiana kolejności pól rozdzielanego pliku (LINQ) (Visual Basic)

Plik wartości rozdzielanych przecinkami (CSV) to plik tekstowy, który jest często używany do przechowywania danych arkusza kalkulacyjnego lub innych danych tabelarycznych reprezentowanych przez wiersze i kolumny. Przy użyciu Split metody oddzielania pól bardzo łatwo jest wykonywać zapytania i manipulować plikami CSV przy użyciu LINQ. W rzeczywistości ta sama technika może służyć do zmiany kolejności części dowolnego ustrukturyzowanego wiersza tekstu; nie jest ograniczona do plików CSV.

W poniższym przykładzie przyjęto założenie, że trzy kolumny reprezentują uczniów "nazwisko", "imię" i "identyfikator". Pola są w porządku alfabetycznym na podstawie nazwisk uczniów. Zapytanie tworzy nową sekwencję, w której pojawia się najpierw kolumna ID, a następnie druga kolumna, która łączy imię i nazwisko ucznia. Wiersze są zmieniane zgodnie z polem ID. Wyniki są zapisywane w nowym pliku, a oryginalne dane nie są modyfikowane.

Aby utworzyć plik danych

  1. Skopiuj następujące wiersze do pliku zwykłego tekstu o nazwie spreadsheet1.csv. Zapisz plik w folderze projektu.

    Adams,Terry,120
    Fakhouri,Fadi,116
    Feng,Hanying,117
    Garcia,Cesar,114
    Garcia,Debra,115
    Garcia,Hugo,118
    Mortensen,Sven,113
    O'Donnell,Claire,112
    Omelchenko,Svetlana,111
    Tucker,Lance,119
    Tucker,Michael,122
    Zabokritski,Eugene,121
    

Przykład

Class CSVFiles

    Shared Sub Main()

        ' Create the IEnumerable data source.
        Dim lines As String() = System.IO.File.ReadAllLines("../../../spreadsheet1.csv")

        ' Execute the query. Put field 2 first, then
        ' reverse and combine fields 0 and 1 from the old field
        Dim lineQuery = From line In lines
                        Let x = line.Split(New Char() {","})
                        Order By x(2)
                        Select x(2) & ", " & (x(1) & " " & x(0))

        ' Execute the query and write out the new file. Note that WriteAllLines
        ' takes a string array, so ToArray is called on the query.
        System.IO.File.WriteAllLines("../../../spreadsheet2.csv", lineQuery.ToArray())

        ' Keep console window open in debug mode.
        Console.WriteLine("Spreadsheet2.csv written to disk. Press any key to exit")
        Console.ReadKey()
    End Sub
End Class
' Output to spreadsheet2.csv:
' 111, Svetlana Omelchenko
' 112, Claire O'Donnell
' 113, Sven Mortensen
' 114, Cesar Garcia
' 115, Debra Garcia
' 116, Fadi Fakhouri
' 117, Hanying Feng
' 118, Hugo Garcia
' 119, Lance Tucker
' 120, Terry Adams
' 121, Eugene Zabokritski
' 122, Michael Tucker

Zobacz też