2010-01-26 23 views
8

Tenemos un archivo de texto con aproximadamente 100.000 filas, alrededor de 50 columnas por fila, la mayoría de los datos es bastante pequeño (5 a 10 caracteres o números).¿Cuál es la mejor manera de leer un archivo de texto delimitado por tabulaciones en C#

Esta es una tarea bastante simple, pero me pregunto cuál sería la mejor manera de importar estos datos en una estructura de datos C# (por ejemplo, una DataTable)?

+0

para 100.000 filas, es probable que no quieren cargarlo en un DataTable. Es posible que desee considerar el uso de SqlBulkCopy cuando lo inserta en la base de datos. –

Respuesta

9

me gustaría leer en un CSV con los delimitadores de columna pestaña:

A Fast CSV Reader

Editar:
Aquí está un ejemplo de barebones de lo que se necesita:

DataTable dt = new DataTable(); 
using (CsvReader csv = new CsvReader(new StreamReader(CSV_FULLNAME), false, '\t')) { 
    dt.Load(csv); 
} 

Donde CSV_FULLNAME es la ruta completa + nombre de archivo de su CSV delimitado por tabulaciones.

+0

Utilizamos este lector CSV en nuestra aplicación, es genial. –

+0

Lo verifico, ¿alguien tiene código de muestra para usarlo con delimitadores de columnas con pestañas? – alchemical

+0

Sugiero ir con algo como esto. También puede usar el controlador Access/Jet para el acceso ADO.Net, pero a veces hay un poco de extravagancia. – Tracker1

0

dos opciones:

  1. utilizar las clases en el espacio de nombres System.Data.OleDb. Esto tiene la ventaja de leer directamente en una tabla de datos como la que pidió con muy poco código, pero puede ser complicado hacerlo bien porque es una pestaña en lugar de delimitada por comas.
  2. Usa o escribe un analizador csv. Asegúrese de que se trata de un analizador sintáctico basado en máquinas como el que @Jay Riggs ha vinculado en lugar de un analizador basado en String.Split(). Esto debería ser más rápido que el método OleDb, pero le dará una lista o matriz en lugar de una tabla de datos.
+0

Simplemente curiosidad por sugerir un analizador basado en estado en lugar de String.Split(). –

+0

Rendimiento, principalmente. Pero también que es difícil conseguir cosas como el texto entre comillas con string.split. –

+0

Además, con "máquina de estado" no quiero decir Regex, que es casi tan malo. Me refiero a una máquina de estado especialmente diseñada para esta tarea que puede manejar mejor el descenso/recursión. –

1

¿Qué pasa con FileHelpers, puede definir la pestaña como un delimitador. Dirígete a ese sitio por el enlace provisto y ten un peeky.

Espero que esto ayude, Saludos cordiales, Tom.

0

Sin embargo, al analizar las líneas, asegúrese de utilizar algo que admita el reenvío y el rebobinado, ya que es la fuente de datos de su cuadrícula de datos. No quiere cargar todo en la memoria primero, ¿verdad? ¿Qué tal si la cantidad de datos debe ser diez veces la próxima vez? Haga algo que use file.seek en el fondo, no lea todo en la memoria primero. Ese es mi consejo.

0

simple, pero no necesariamente la una gran manera:

  • leer el archivo usando un lector de texto en una cadena

  • Uso String.split para obtener las filas

  • uso String.Split con un carácter de tabulación para obtener los valores de campo

+0

solo para recordarlo - hay una cadena [] System.IO.File.ReadAllLines (ruta de cadena) –

Cuestiones relacionadas