Delen via


Procedure: De volgorde van de velden van een bestand met scheidingstekens (LINQ) wijzigen (Visual Basic)

Een CSV-bestand (door komma's gescheiden waarden) is een tekstbestand dat vaak wordt gebruikt voor het opslaan van spreadsheetgegevens of andere tabelgegevens die worden vertegenwoordigd door rijen en kolommen. Door de Split methode te gebruiken om de velden te scheiden, is het heel eenvoudig om CSV-bestanden op te vragen en te manipuleren met behulp van LINQ. In feite kan dezelfde techniek worden gebruikt om de onderdelen van elke gestructureerde tekstregel opnieuw te ordenen; het is niet beperkt tot CSV-bestanden.

In het volgende voorbeeld wordt ervan uitgegaan dat de drie kolommen 'achternaam', 'voornaam' en 'id' van leerlingen/studenten vertegenwoordigen. De velden bevinden zich in alfabetische volgorde op basis van de achternamen van de leerlingen/studenten. De query produceert een nieuwe reeks waarin de id-kolom eerst wordt weergegeven, gevolgd door een tweede kolom waarin de voor- en achternaam van de leerling/student wordt gecombineerd. De regels worden opnieuw gerangschikt op basis van het id-veld. De resultaten worden opgeslagen in een nieuw bestand en de oorspronkelijke gegevens worden niet gewijzigd.

Het gegevensbestand maken

  1. Kopieer de volgende regels naar een tekstbestand zonder opmaak met de naam spreadsheet1.csv. Sla het bestand op in de projectmap.

    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
    

Voorbeeld

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

Zie ook