Dado
2,1016,7 / 31/2008 14: 22, Geoff Dalgas , 6/5/2011 22:21, http://stackoverflow.com , "Corvallis, OR", 7679,351,81, b437f461b3fd27387c5d8ab47a293d35,34
Cómo usar C # para dividir la información anterior en cadenas de la siguiente manera:
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 puede ver, una de las columnas contiene <= (Corvallis, OR)
// actualización // Basado en C # Regex Split - comas fuera de las comillas
string[] result = Regex.Split(samplestring, ",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");
Respuestas:
Usa la
Microsoft.VisualBasic.FileIO.TextFieldParser
clase. Esto manejará el análisis de un archivo delimitado,TextReader
oStream
donde algunos campos están entre comillas y otros no.Por ejemplo:
Esto debería dar como resultado el siguiente resultado:
Consulte Microsoft.VisualBasic.FileIO.TextFieldParser para obtener más información.
Debe agregar una referencia a
Microsoft.VisualBasic
en la pestaña Agregar referencias .NET.fuente
Es demasiado tarde, pero esto puede ser útil para alguien. Podemos usar RegEx como abajo.
fuente
,
\" df ",Puede dividir en todas las comas que tengan un número par de comillas a continuación.
También le gustaría ver en el
specf
formato CSV sobre cómo manejar las comas.Enlace útil:
C# Regex Split - commas outside quotes
fuente
Veo que si pegas texto delimitado por csv en Excel y haces un "Texto a columnas", te pide un "calificador de texto". Tiene un valor predeterminado de comillas dobles para tratar el texto entre comillas dobles como literal. Me imagino que Excel implementa esto yendo un carácter a la vez, si encuentra un "calificador de texto", sigue yendo al siguiente "calificador". Probablemente pueda implementar esto usted mismo con un bucle for y un booleano para indicar si está dentro de un texto literal.
fuente
Utilice una biblioteca como LumenWorks para realizar su lectura CSV. Manejará campos con comillas en ellos y, en general, será más sólido que su solución personalizada en virtud de haber existido durante mucho tiempo.
fuente
Es un asunto complicado analizar archivos .csv cuando el archivo .csv puede ser cadenas separadas por comas, cadenas entre comillas separadas por comas o una combinación caótica de los dos. La solución que se me ocurrió permite cualquiera de las tres posibilidades.
Creé un método, ParseCsvRow () que devuelve una matriz de una cadena csv. Primero trato con las comillas dobles en la cadena dividiendo la cadena entre comillas dobles en una matriz llamada quotesArray. Los archivos .csv de cadenas entre comillas solo son válidos si hay un número par de comillas dobles. Las comillas dobles en un valor de columna deben reemplazarse con un par de comillas dobles (este es el enfoque de Excel). Siempre que el archivo .csv cumpla con estos requisitos, puede esperar que las comas delimitadores aparezcan solo fuera de los pares de comillas dobles. Las comas dentro de los pares de comillas dobles son parte del valor de la columna y deben ignorarse al dividir el .csv en una matriz.
Mi método probará las comas fuera de los pares de comillas dobles mirando solo los índices pares de quotesArray. También elimina las comillas dobles del inicio y el final de los valores de columna.
Una desventaja de mi enfoque es la forma en que reemplazo temporalmente las comas delimitadoras con un carácter unicode oscuro. Este carácter debe ser tan oscuro que nunca aparecerá en su archivo .csv. Es posible que desee poner más manejo en torno a esto.
fuente
Tuve un problema con un CSV que contiene campos con un carácter de comillas, así que al usar TextFieldParser, se me ocurrió lo siguiente:
Un StreamReader todavía se usa para leer el CSV línea por línea, de la siguiente manera:
fuente
Con Cinchoo ETL , una biblioteca de código abierto, puede manejar automáticamente los valores de las columnas que contienen separadores.
Salida:
Para obtener más información, visite el artículo de codeproject.
Espero eso ayude.
fuente