Alternativas para mejorar la lectura y el análisis de archivos de texto usando .NET

StackOverflow https://stackoverflow.com/questions/34182

  •  09-06-2019
  •  | 
  •  

Pregunta

Necesito leer desde una variedad de archivos de texto diferentes (tengo algunos archivos delimitados y algunos archivos de ancho fijo).He considerado analizar los archivos línea por línea (lento usando los métodos de tipo File.ReadLine) y leer el archivo usando el controlador de texto ODBC (más rápido), pero ¿alguien tiene alguna otra sugerencia (mejor)?Estoy usando .NET/C#.

¿Fue útil?

Solución 3

Respondiendo a mi propia pregunta:

Terminé usando el objeto Microsoft.VisualBasic.FileIO.TextFieldParser, consulte:

http://msdn.microsoft.com/en-us/library/f68t4563.aspx

(ejemplo de implementación aquí)

Esto me permite manejar archivos csv sin preocuparme de cómo lidiar con si los campos están entre comillas, contienen comas, comillas escapadas, etc.

Otros consejos

No estoy seguro de que realmente puedas hacer un analizador de archivos de texto y Excel, a menos que por archivo de Excel te refieras a un archivo delimitado por comas, barras verticales o tabulaciones, que en realidad es solo otro archivo de texto.Para leer archivos de Excel reales es necesario utilizar las bibliotecas de MS Office.

Para el análisis de archivos de texto delimitado, puede consultar Ayudantes de archivos - código abierto y prácticamente lo tienen cubierto.Sin embargo, no estoy seguro de si cumplirá con sus requisitos de velocidad.

Haciendo caso omiso de la parte de Excel (que usted dice que no es importante):

He descubierto que LINQ es bastante útil para analizar archivos txt (delimitados por barras verticales o csv)

p.ej.Esto lee un archivo delimitado por barras verticales omitiendo la fila hader y crea un IEnumerable como resultado:

var registros = from line en File.ReadAllLines(@"c:\blah.txt"). Saltar(1) let parts = línea. Dividir('|') seleccionar piezas;

Si los archivos son relativamente pequeños, puede utilizar el Archivo clase.Tiene estos métodos que pueden ayudarte:

  • Leer todos los bytes
  • Leer todas las líneas
  • Leer todo el texto

Tu pregunta es un poco vaga.Supongo que los archivos de texto contienen datos estructurados, no solo líneas de texto aleatorias.

Si está analizando los archivos usted mismo, .NET tiene una función de biblioteca para leer todas las líneas de un archivo de texto en una matriz de cadenas (File.ReadAllLines).Si sabe que sus archivos son lo suficientemente pequeños como para guardarlos en la memoria, puede usar este método e iterar sobre la matriz usando una expresión regular para validar y extraer los campos.

Los archivos de Excel son un juego de pelota diferente.Los archivos .XLS son binarios, no de texto, por lo que necesitarás utilizar una biblioteca de terceros para acceder a ellos.Los archivos .XLSX de Excel 2007 contienen datos XML comprimidos, por lo que, una vez más, necesitarás descomprimir el XML y luego usar un analizador XML para obtener los datos.No recomendaría escribir su propio analizador XML, a menos que sienta la necesidad de realizar un ejercicio intelectual.

Estoy de acuerdo con Juan,

Por ejemplo:-

using System.IO;

...

public class Program {
  public static void Main() {
    foreach(string s in File.ReadAllLines(@"c:\foo\bar\something.txt") {
      // Do something with each line...
    }
  }
}

El proceso de lectura de archivos no es lento si lee todos los archivos a la vez usando la clase Archivo y los métodos sugeridos por John.Dependiendo del tamaño del archivo y de lo que quieras hacer con él, puede utilizar más o menos memoria.Te sugiero que pruebes con File.ReadAllText (o lo que sea apropiado para ti)

Respecto a la lectura de archivos XLS:

Si tiene Microsoft Office XP y superior, tiene acceso a las bibliotecas de Office .NET SDK ya incluidas, donde puede leer "de forma nativa" archivos XLS, Word, PPT, etc.Tenga en cuenta que en Office XP debe verificarlo manualmente durante la instalación (a menos que haya instalado .NET previamente).

No sé si estas bibliotecas están disponibles como un paquete separado si no tienes Microsoft Office.

Por alguna extraña razón, todas estas bibliotecas (incluidas las últimas versiones de Office 2007, también conocidas como:Office 12), son componentes COM que son un dolor usar, causan dependencias feas y son no compatible con versiones anteriores.ES DECIR.:Si tiene algunos métodos que funcionan con Office XP (Office11) y los instala en un cliente con Office 12, no funciona, porque algunas interfaces cambiaron.Entonces necesitas mantener dos conjunto de "bibliotecas" y métodos para lidiar con eso.Lo mismo ocurre si usa las bibliotecas de Office 12 para programar y su cliente tiene Office 11.Tus bibliotecas no funcionan.:S

No sé por qué Microsoft nunca creó una biblioteca administrada (envoltorio) Microsoft.Office.XXXX para esas cosas feas.

De todos modos, tu pregunta es bastante extraña, intenta seguir algunos consejos aquí.¡Buena suerte!

El controlador de texto ODBC ahora está bastante desactualizado: no admite Unicode.

Sorprendentemente, MS Excel todavía lo usa, así que si abierto un CSV Unicode en Excel 2007 (en lugar de importarlo), perderá todos los caracteres que no sean ASCII.

Lo mejor que puede hacer es utilizar los métodos de lectura de archivos .Net, como han sugerido otros.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top