Compartilhar via


Como: Reordenar os campos de um arquivo delimitado por (LINQ)

Um arquivo valores separados por vírgula (CSV) é um arquivo de texto que é freqüentemente usado para armazenar dados da planilha ou outros dados tabulares representadas por linhas e colunas.Usando o Split método para separar os campos é muito fácil consultar e manipular arquivos CSV usando LINQ. Na verdade, a mesma técnica pode ser usada para reordenar as partes de qualquer linha de texto estruturada; não está limitado a arquivos CSV.

O exemplo a seguir, suponha que as três colunas representam "Sobrenome alunos," "nome" e "ID". Os campos estão em ordem alfabético com base em sobrenomes dos alunos.A consulta gera uma nova sequência na qual a coluna ID aparece primeira, seguido por uma segunda coluna que combina o primeiro nome e sobrenome do aluno.As linhas são reordenadas de acordo com para o campo ID.Os resultados são salvos em um novo arquivo e os dados originais não serão modificados.

Para criar o arquivo de dados

  • Criar um novo Visual translation from VPE for Csharp ou Visual Basic projeto e copie as seguintes linhas em um texto simples de arquivo isto é chamado spreadsheet1.csv. salvar o arquivo na sua pasta solução.

    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
    

Exemplo

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
class CSVFiles
{
    static void Main(string[] args)
    {
        // Create the IEnumerable data source
        string[] lines = System.IO.File.ReadAllLines(@"../../../spreadsheet1.csv");

        // Create the query. Put field 2 first, then
        // reverse and combine fields 0 and 1 from the old field
        IEnumerable<string> query =
            from line in lines
            let x = line.Split(',')
            orderby x[2]
            select x[2] + ", " + (x[1] + " " + x[0]);

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

        Console.WriteLine("Spreadsheet2.csv written to disk. Press any key to exit");
        Console.ReadKey();
    }
}
/* 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
 */

Compilando o código

  • Criar um Visual Studio projeto que se destina a .NET Framework versão 3.5. Por padrão, o projeto tem uma referência a sistema.Core.dll e um using diretiva (translation from VPE for Csharp) ou Imports demonstrativo)Visual Basic) para o namespace sistema.LINQ. Em projetos translation from VPE for Csharp, adicione um using diretiva do namespace sistema.IO.

  • Copie este código para seu projeto.

  • Pressione F5 para compilar e executar o programa.

  • Pressione qualquer tecla para sair da janela do console.

Consulte também

Tarefas

How to: Generate XML from CSV Files

Conceitos

LINQ e seqüências de caracteres

O LINQ e arquivo diretórios