¿Cómo leo un archivo CSV usando C#?¿Lectura de un archivo CSV en .NET?
Respuesta
Puede que le interese la biblioteca Linq2Csv en CodeProject. Una cosa que necesitaría verificar es si está leyendo los datos cuando solo necesita, por lo que no necesitará mucha memoria cuando trabaje con archivos más grandes.
En cuanto a la visualización de los datos en el navegador, podría hacer muchas cosas para lograrlo, si fuera más específico sobre cuáles son sus requisitos, la respuesta podría ser más específica, pero cosas que podría hacer:
1. Use la clase HttpListener para escribir un servidor web simple (puede encontrar muchas muestras en la red para alojar el servidor mini-http).
2. Use Asp.Net o Asp.Net Mvc, cree una página, hágalo mediante IIS.
Acabo de utilizar esta biblioteca en mi aplicación. http://www.codeproject.com/KB/database/CsvReader.aspx. Todo funcionó sin problemas usando esta biblioteca, así que lo estoy recomendando. Es gratis bajo la Licencia MIT, así que solo incluya el aviso con sus archivos fuente.
No visualicé el CSV en un navegador, pero el autor tiene algunos ejemplos para Repetidores o DataGrids. Ejecuté uno de sus proyectos de prueba para probar una operación de clasificación que agregué y se veía bastante bien.
Esto es solo para analizar el archivo CSV. Para mostrarlo en una página web, es simplemente una cuestión de tomar la lista y representarla como lo desee.
Nota: Este ejemplo de código no maneja la situación donde la cadena de entrada line
contiene líneas nuevas.
public List<string> SplitCSV(string line)
{
if (string.IsNullOrEmpty(line))
throw new ArgumentException();
List<string> result = new List<string>();
int index = 0;
int start = 0;
bool inQuote = false;
StringBuilder val = new StringBuilder();
// parse line
foreach (char c in line)
{
switch (c)
{
case '"':
inQuote = !inQuote;
break;
case ',':
if (!inQuote)
{
result.Add(line.Substring(start, index - start)
.Replace("\"",""));
start = index + 1;
}
break;
}
index++;
}
if (start < index)
{
result.Add(line.Substring(start, index - start).Replace("\"",""));
}
return result;
}
}
Tampoco maneja el uso de caracteres de comillas dobles dentro de un valor. CSV tiene muchos casos extremos, lo mejor es simplemente usar una biblioteca. – Arafangion
Parece que hay bastantes proyectos en CodeProject o CodePlex para CSV Parsing. Aquí hay otro analizador CSV en CodePlex
http://commonlibrarynet.codeplex.com/
Esta biblioteca tiene componentes para el análisis CSV, INI archivo de análisis, análisis de línea de comandos también. Me está funcionando bien hasta ahora. Lo único es que no tiene un escritor de CSV.
Solo un FYI: la licencia en el sitio dice que es MIT, pero en el código fuente en sí, todos los archivos relacionados con Csv tienen una licencia LGPL prominente en la parte superior. –
Puede probar CsvHelper, que es un proyecto en el que trabajo. Su objetivo es hacer que leer y escribir archivos CSV sea lo más fácil posible, a la vez que muy rápido.
Aquí hay algunas maneras en que puede leer un archivo CSV.
// By type
var records = csv.GetRecords<MyClass>();
var records = csv.GetRecords(typeof(MyClass));
// Dynamic
var records = csv.GetRecords<dynamic>();
// Using anonymous type for the class definition
var anonymousTypeDefinition =
{
Id = default(int),
Name = string.Empty,
MyClass = new MyClass()
};
var records = csv.GetRecords(anonymousTypeDefinition);
una elección, sin necesidad de utilizar componentes de terceros, es utilizar la clase Microsoft.VisualBasic.FileIO.TextFieldParser
(http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.fileio.textfieldparser.aspx). Proporciona todas las funciones para analizar CSV. Es suficiente importar el ensamblado Microsoft.VisualBasic.
var parser = new Microsoft.VisualBasic.FileIO.TextFieldParser(file);
parser.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited;
parser.SetDelimiters(new string[] { ";" });
while (!parser.EndOfData)
{
string[] row = parser.ReadFields();
/* do something */
}
Para leer archivos CSV y proporcionar el análisis usted mismo, esto es ideal. Simple, pero con todas las funciones, incluidos los valores cotizados en múltiples líneas. – ErikHeemskerk
Esta es mi solución favorita lista para usar – Habeeb
Puede utilizar la clase Microsoft.VisualBasic.FileIO.TextFieldParser en C#:
using System;
using System.Data;
using Microsoft.VisualBasic.FileIO;
static void Main()
{
string csv_file_path = @"C:\Users\Administrator\Desktop\test.csv";
DataTable csvData = GetDataTableFromCSVFile(csv_file_path);
Console.WriteLine("Rows count:" + csvData.Rows.Count);
Console.ReadLine();
}
private static DataTable GetDataTableFromCSVFile(string csv_file_path)
{
DataTable csvData = new DataTable();
try
{
using(TextFieldParser csvReader = new TextFieldParser(csv_file_path))
{
csvReader.SetDelimiters(new string[] { "," });
csvReader.HasFieldsEnclosedInQuotes = true;
string[] colFields = csvReader.ReadFields();
foreach (string column in colFields)
{
DataColumn datecolumn = new DataColumn(column);
datecolumn.AllowDBNull = true;
csvData.Columns.Add(datecolumn);
}
while (!csvReader.EndOfData)
{
string[] fieldData = csvReader.ReadFields();
//Making empty value as null
for (int i = 0; i < fieldData.Length; i++)
{
if (fieldData[i] == "")
{
fieldData[i] = null;
}
}
csvData.Rows.Add(fieldData);
}
}
}
catch (Exception ex)
{
}
return csvData;
}
Esta biblioteca es mi solución favorita lista para usar. – Habeeb
Lo único que cambié de este ejemplo fue un cheque para el mismo nombre de columna y agregué un código para mostrar la excepción – andrewjboyd
recomiendo Angara.Table
, sobre guardar/carga: http://predictionmachines.github.io/Angara.Table/saveload.html.
Hace la inferencia de tipos de columnas, puede guardar archivos CSV y es mucho más rápido que TextFieldParser.Sigue RFC4180 para formato CSV y admite cadenas de varias líneas, NaN y cadenas escapadas que contienen el carácter delimitador.
La biblioteca está bajo licencia de MIT. El código fuente es https://github.com/Microsoft/Angara.Table.
Aunque su API se centra en F #, se puede utilizar en cualquier lenguaje .NET pero no tan breve como en F #.
Ejemplo:
using Angara.Data;
using System.Collections.Immutable;
...
var table = Table.Load("data.csv");
// Print schema:
foreach(Column c in table)
{
string colType;
if (c.Rows.IsRealColumn) colType = "double";
else if (c.Rows.IsStringColumn) colType = "string";
else if (c.Rows.IsDateColumn) colType = "date";
else if (c.Rows.IsIntColumn) colType = "int";
else colType = "bool";
Console.WriteLine("{0} of type {1}", c.Name, colType);
}
// Get column data:
ImmutableArray<double> a = table["a"].Rows.AsReal;
ImmutableArray<string> b = table["b"].Rows.AsString;
Table.Save(table, "data2.csv");
vengo sosteniendo un proyecto de código abierto llamado desde hace varios años. Está disponible para .NET Core y .NET 4.5.1.
A diferencia de la mayoría de las alternativas, le permite definir un esquema (similar al modo en que funciona el código EF) con un nivel extremo de precisión, para que no tenga problemas de conversión todo el tiempo. Puede mapear directamente a sus clases de datos, y también hay soporte para interactuar con clases anteriores de ADO.NET.
En cuanto a rendimiento, ha sido sintonizado para ser uno de los analizadores más rápidos para .NET, con una gran cantidad de opciones para diferencias de formato extravagantes. También hay soporte para archivos de longitud fija, si lo necesita.
Lectura recomendada: [¿Cómo puedo ofrecer bibliotecas de código abierto personal?] (// meta.stackexchange.com/q/229085) –
Puede probar Cinchoo ETL - una lib de código abierto para leer y escribir archivos CSV.
par de maneras que usted puede leer archivos CSV
Id, Name
1, Tom
2, Mark
Esto es cómo se puede utilizar esta biblioteca para leerlo
using (var reader = new ChoCSVReader("emp.csv").WithFirstLineHeader())
{
foreach (dynamic item in reader)
{
Console.WriteLine(item.Id);
Console.WriteLine(item.Name);
}
}
Si tiene objetos POCO definido para que coincida con el archivo CSV como a continuación
public class Employee
{
public int Id { get; set; }
public string Name { get; set; }
}
puede analizar el mismo archivo usando esta clase POCO como a continuación
using (var reader = new ChoCSVReader<Employee>("emp.csv").WithFirstLineHeader())
{
foreach (var item in reader)
{
Console.WriteLine(item.Id);
Console.WriteLine(item.Name);
}
}
Consulte los artículos en CodeProject sobre cómo usarlo.
responsabilidad: yo soy el autor de esta biblioteca
- 1. lectura de un archivo CSV en MATLAB
- 2. Lectura de datos CSV de un archivo
- 3. Lectura del archivo .csv en php
- 4. Java: archivo CSV de lectura y escritura
- 5. ¿Lectura de .csv en Python sin recorrer todo el archivo?
- 6. de lectura y escritura en el mismo archivo csv
- 7. .NET System.OutOfMemoryException en String.Split() de 120 MB de archivo CSV
- 8. Lectura de un archivo de imagen PNG en .Net 2.0
- 9. ¿Lectura repetida de CSV en Python?
- 10. Lectura de archivos CSV en C#
- 11. Lectura de un archivo PDF usando iText5 para .NET
- 12. cabezales de lectura del analizador csv
- 13. Parse Delimited CSV en .NET
- 14. Lectura de csv con fecha y hora
- 15. Lectura de un archivo de valores separados por coma (csv) en dinámica ax
- 16. principales problemas de la memoria de lectura en un archivo CSV con numpy
- 17. Lectura de un archivo csv con números y cadenas en una columna
- 18. Importación de un archivo CSV en Java
- 19. Importaciones de archivos CSV en .Net
- 20. Matlab: línea de encabezado de solo lectura de un archivo .csv
- 21. Escribir en un archivo CSV en Node.js
- 22. archivos CSV de lectura en donde numpy delimitador es ""
- 23. Cree dinámicamente un archivo CSV con FileHelpers
- 24. Abrir archivo de solo lectura
- 25. Crear un archivo csv vacío en R
- 26. ¿Cómo obtener un archivo .csv en R?
- 27. Cargando un archivo csv en jQuery?
- 28. Descargando un archivo csv en django
- 29. Cómo analizar un archivo CSV en Bash?
- 30. Transmitir un archivo CSV en Django
http://stackoverflow.com/questions/1898/csv-file-imports-in-net http://stackoverflow.com/questions/938291/import-csv-file-into-c http://stackoverflow.com/questions/316649/csv-parsing http://stackoverflow.com/questions/1047531/splitting-comma-seperated-values-csv http : //stackoverflow.com/questions/1103495/is-there-a-proper-way-to-read-csv-files –
[¿Top 6 formas de analizar .CSV? Alto rendimiento!] (Http://izlooite.blogspot.com/2011/06/top-6-ways-to-parse-csv-high.html) –