Como: reordenar os campos de um arquivo delimitado (LINQ) (Visual Basic)How to: Reorder the Fields of a Delimited File (LINQ) (Visual Basic)

Um CSV (arquivo de valores separados por vírgula) é um arquivo de texto que é frequentemente usado para armazenar dados de planilha ou outros dados de tabela que são representados por linhas e colunas.A comma-separated value (CSV) file is a text file that is often used to store spreadsheet data or other tabular data that is represented by rows and columns. Ao usar o método Split para separar os campos, é muito fácil consultar e manipular arquivos CSV usando LINQ.By using the Split method to separate the fields, it is very easy to query and manipulate CSV files by using LINQ. Na verdade, a mesma técnica pode ser usada para reordenar as partes de qualquer linha estruturada de texto. Ela não é limitada a arquivos CSV.In fact, the same technique can be used to reorder the parts of any structured line of text; it is not limited to CSV files.

No exemplo a seguir, suponha que as três colunas representam o "sobrenome", o "nome" e a "ID" dos alunos.In the following example, assume that the three columns represent students' "last name," "first name", and "ID." Os campos estão em ordem alfabética com base nos sobrenomes dos alunos.The fields are in alphabetical order based on the students' last names. A consulta gera uma nova sequência, na qual a coluna ID é exibida em primeiro, seguida por uma segunda coluna que combina o nome e o sobrenome do aluno.The query produces a new sequence in which the ID column appears first, followed by a second column that combines the student's first name and last name. As linhas são reordenadas acordo com o campo ID.The lines are reordered according to the ID field. Os resultados são salvos em um novo arquivo e os dados originais não são modificados.The results are saved into a new file and the original data is not modified.

Para criar o arquivo de dadosTo create the data file

  1. Copie as seguintes linhas em um arquivo de texto sem formatação denominado spreadsheet1.csv.Copy the following lines into a plain text file that is named spreadsheet1.csv. Salve o arquivo na pasta do seu projeto.Save the file in your project folder.

    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
    

ExemploExample

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

Consulte tambémSee also