Estoy tratando de leer un *.csv
archivo.
El *.csv
archivo consta de dos columnas separadas por punto y coma (" ; ").
Puedo leer el *.csv
archivo usando StreamReader y puedo separar cada línea usando la Split()
función. Quiero almacenar cada columna en una matriz separada y luego mostrarla.
¿Es posible hacer eso?
";"
como separador ... esto ha hecho de CSV una imo no estándar :(Respuestas:
Puedes hacerlo así:
fuente
using
cláusula de aquí, o por lo menos de forma manualClose()
elreader
ya que es unIDisposible
recurso.column1;"Special ; char in string";column3
- tools.ietf.org/html/rfc4180Mi analizador CSV favorito es uno integrado en la biblioteca .NET. Este es un tesoro escondido dentro del espacio de nombres Microsoft.VisualBasic. A continuación se muestra un código de muestra:
Recuerde agregar referencia a
Microsoft.VisualBasic
Aquí encontrará más detalles sobre el analizador: http://codeskaters.blogspot.ae/2015/11/c-easiest-csv-parser-built-in-net.html
fuente
Microsoft.VisualBasic
ensamblaje del marco, ya que generalmente no se hace referencia de forma predeterminada.Forma LINQ:
^^ Incorrecto - Editar por Nick
Parece que el respondedor original estaba intentando poblar
csv
con una matriz bidimensional, una matriz que contiene matrices. Cada elemento en la primera matriz contiene una matriz que representa ese número de línea con cada elemento en la matriz anidada que contiene los datos para esa columna específica.fuente
No puede crear una matriz de inmediato porque necesita saber el número de filas desde el principio (y esto requeriría leer el archivo csv dos veces)
Puedes almacenar valores en dos
List<T>
y luego usarlos o convertirlos en una matriz usandoList<T>.ToArray()
Ejemplo muy simple:
nótese bien
Tenga en cuenta que este es solo un ejemplo muy simple . El uso
string.Split
no tiene en cuenta los casos en que algunos registros contienen el separador;
en su interior.Para un enfoque más seguro, considere usar algunas bibliotecas específicas de csv como CsvHelper en nuget.
fuente
;
ser parte del valor, por ejemplo"value with ; inside it"
. Valores envolventes CSV que contienen caracteres especiales con comillas dobles para decir que es una cadena literal.Acabo de encontrar esta biblioteca: https://github.com/JoshClose/CsvHelper
Muy intuitivo y fácil de usar. También tiene un paquete nuget que se implementó rápidamente: http://nuget.org/packages/CsvHelper/1.17.0 . También parece mantenerse activamente, lo que me gusta.
Configurarlo para usar un punto y coma es fácil: https://github.com/JoshClose/CsvHelper/wiki/Custom-Configurations
fuente
Microsoft.VisualBasic.FileIO.TextFieldParser
(véase la respuesta de @ Habeeb)?Usualmente uso este analizador de codeproject , ya que hay un montón de escapes de caracteres y similares que maneja para mí.
fuente
Aquí está mi variación de la respuesta más votada:
La
csv
variable se puede usar como en el siguiente ejemplo:fuente
Si necesita omitir (encabezado) líneas y / o columnas, puede usar esto para crear una matriz bidimensional:
Esto es bastante útil si necesita dar forma a los datos antes de procesarlos más adelante (suponiendo que las primeras 2 líneas consisten en el título, y la primera columna es un título de fila, que no necesita tener en la matriz porque simplemente querer considerar los datos).
Nota : puede obtener fácilmente los titulares y la primera columna utilizando el siguiente código:
Este código de ejemplo supone la siguiente estructura de su
*.csv
archivo:Nota: Si necesita omitir filas vacías, lo que a veces puede ser útil, puede hacerlo insertando
entre el
from
y laselect
declaración en los ejemplos de código LINQ anteriores.fuente
Puede usar Microsoft.VisualBasic.FileIO.TextFieldParser dll en C # para un mejor rendimiento
obtener el siguiente ejemplo de código del artículo anterior
fuente
Hola a todos, creé una clase estática para hacer esto. + verificación de columna + eliminación de signo de cuota
fuente
fuente
Aquí hay un caso especial donde uno de los campos de datos tiene punto y coma (";") como parte de sus datos en ese caso, la mayoría de las respuestas anteriores fallarán.
Solución si ese caso será
fuente
La biblioteca de código abierto Angara.Table permite cargar CSV en columnas escritas, para que pueda obtener los arreglos de las columnas. Cada columna puede indexarse tanto por nombre como por índice. Ver http://predictionmachines.github.io/Angara.Table/saveload.html .
La biblioteca sigue RFC4180 para CSV; Permite la inferencia de tipos y cadenas multilínea.
Ejemplo:
Puede ver un tipo de columna utilizando el tipo Columna, p. Ej.
Dado que la biblioteca se centra en F #, es posible que deba agregar una referencia al ensamblaje FSharp.Core 4.4; haga clic en 'Agregar referencia' en el proyecto y elija FSharp.Core 4.4 en "Ensamblados" -> "Extensiones".
fuente
He pasado algunas horas buscando una biblioteca adecuada, pero finalmente escribí mi propio código :) Puedes leer el archivo (o base de datos) con las herramientas que quieras y luego aplicar la siguiente rutina a cada línea:
fuente
He estado usando csvreader.com (componente pago) durante años, y nunca he tenido un problema. Es sólido, pequeño y rápido, pero hay que pagarlo. Puede configurar el delimitador a lo que quiera.
fuente
Solo soy un estudiante que trabaja en mi tesis de maestría, pero esta es la forma en que la resolví y funcionó bien para mí. Primero selecciona su archivo del directorio (solo en formato csv) y luego coloca los datos en las listas.
fuente
Sigue siendo incorrecto. Necesita compensar "" entre comillas. Aquí está mi solución Microsoft style csv.
fuente
Tengo una biblioteca que está haciendo exactamente lo que necesitas.
Hace algún tiempo escribí una biblioteca lo suficientemente simple y rápida para trabajar con archivos CSV. Puede encontrarlo en el siguiente enlace: https://github.com/ukushu/DataExporter
Funciona con CSV como con matriz de 2 dimensiones. Exactamente como lo necesitas.
Como ejemplo, en caso de que necesite todos los valores de la tercera fila, solo necesita escribir:
o para leer la segunda celda de
fuente
mira este
usando CsvFramework;
usando System.Collections.Generic;
espacio de nombres CvsParser {
}
fuente