Dado
2,1016,7 / 31/2008 14: 22, Geoff Dalgas , 5/6/2011 22:21, http://stackoverflow.com , "Corvallis, OR", 7679,351,81, b437f461b3fd27387c5d8ab47a293d35,34
Como usar C # para dividir as informações acima em strings da seguinte maneira:
2
1016
7/31/2008 14:22
Geoff Dalgas
6/5/2011 22:21
http://stackoverflow.com
Corvallis, OR
7679
351
81
b437f461b3fd27387c5d8ab47a293d35
34
Como você pode ver, uma das colunas contém, <= (Corvallis, OR)
// update // Baseado em C # Regex Split - vírgulas fora das aspas
string[] result = Regex.Split(samplestring, ",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");
Respostas:
Use a
Microsoft.VisualBasic.FileIO.TextFieldParser
classe. Isso tratará da análise de um arquivo delimitado,TextReader
ouStream
onde alguns campos estão entre aspas e outros não.Por exemplo:
Isso deve resultar na seguinte saída:
Consulte Microsoft.VisualBasic.FileIO.TextFieldParser para obter mais informações.
Você precisa adicionar uma referência a
Microsoft.VisualBasic
na guia Add References .NET.fonte
É muito tarde, mas isso pode ser útil para alguém. Podemos usar RegEx como abaixo.
fonte
,
\" df ",Você pode dividir em todas as vírgulas que tenham um número par de aspas após elas.
Você também gostaria de ver no
specf
formato para CSV sobre como lidar com vírgulas.Link Útil:
C# Regex Split - commas outside quotes
fonte
Vejo que se você colar um texto delimitado por csv no Excel e fizer um "Texto para colunas", ele solicitará um "qualificador de texto". É padronizado para aspas duplas para que ele trate o texto entre aspas duplas como literal. Eu imagino que o Excel implementa isso indo um caractere por vez, se ele encontra um "qualificador de texto", ele continua indo para o próximo "qualificador". Você provavelmente pode implementar isso sozinho com um loop for e um booleano para denotar se estiver dentro de um texto literal.
fonte
Use uma biblioteca como o LumenWorks para fazer a leitura de CSV. Ele lidará com campos com aspas e provavelmente será mais robusto do que sua solução personalizada, porque já existe há muito tempo.
fonte
É uma questão complicada analisar arquivos .csv quando o arquivo .csv pode ser strings separadas por vírgulas, strings entre aspas separadas por vírgulas ou uma combinação caótica dos dois. A solução que encontrei permite qualquer uma das três possibilidades.
Criei um método, ParseCsvRow () que retorna uma matriz de uma string csv. Eu primeiro lido com aspas duplas na string dividindo a string entre aspas duplas em uma matriz chamada quotesArray. Arquivos .csv de string entre aspas só são válidos se houver um número par de aspas duplas. As aspas duplas em um valor de coluna devem ser substituídas por um par de aspas duplas (esta é a abordagem do Excel). Contanto que o arquivo .csv atenda a esses requisitos, você pode esperar que as vírgulas do delimitador apareçam apenas fora dos pares de aspas duplas. As vírgulas dentro de pares de aspas duplas fazem parte do valor da coluna e devem ser ignoradas ao dividir o .csv em uma matriz.
Meu método testará as vírgulas fora dos pares de aspas duplas, observando apenas os índices pares do quotesArray. Ele também remove aspas duplas do início e do final dos valores da coluna.
Uma desvantagem de minha abordagem é a maneira como substituo temporariamente as vírgulas delimitadoras por um caractere Unicode obscuro. Este caractere precisa ser tão obscuro que nunca aparecerá no seu arquivo .csv. Você pode querer colocar mais controle sobre isso.
fonte
Eu tive um problema com um CSV que contém campos com um caractere de aspas, então usando o TextFieldParser, eu vim com o seguinte:
Um StreamReader ainda é usado para ler o CSV linha por linha, da seguinte maneira:
fonte
Com Cinchoo ETL - uma biblioteca de código aberto, ele pode manipular automaticamente os valores das colunas contendo separadores.
Resultado:
Para obter mais informações, visite o artigo codeproject.
Espero que ajude.
fonte