2010-02-23 22 views
5

Usando LINQ, ¿cuál es una forma eficiente de obtener cada cadena de un archivo .txt delimitado por tabuladores (y luego obtener cada palabra, generalmente qué cadena.Split (...) hace)?Linq y streamreader obteniendo líneas

var v = from line in File.ReadAllLines() 
    select n 

Forma parte de esta solución, creo. No me importa si esto utiliza el retorno de rendimiento.

EDITAR: También he visto hilos aquí que detallan exactamente lo que estoy tratando de hacer, pero no puedo encontrarlos.

Respuesta

7

No estoy del todo seguro lo que está preguntando, pero parece que está tratando de obtener cada palabra de un archivo delimitado por tabulaciones como IEnumerable<string>. Si es así, intente lo siguiente

var query = File.ReadAllLines(somePathVariable) 
       .SelectMany(x => x.Split(new char[] { '\t' }); 
+0

+1 gran respuesta y uso de Lambda Expressions –

+0

Eso es lo que estoy buscando, me disculpo por no haber escrito bien mi publicación, no estaba seguro de cuál era la mejor manera de explicar el problema. ¿Cómo podría combinar eso con el retorno de rendimiento para devolver cada palabra en una línea de cuerda? – dotnetdev

+0

¿hay alguna manera fácil de hacerlo también para todos excepto en la última línea? – Andy

0

Usar File.ReadAllLines es fácil, pero no necesariamente el más eficiente, ya que lee toda la línea en la memoria.

Una versión corta, probablemente sería:

var wordsPerLine = from line in File.ReadAllLines(filename) 
       select string.Split(line, '\t'); 

foreach(var line in wordsPerLine) 
{ 
    foreach(word in line) 
    { 
     // process word... 
    } 
} 

Si desea una sola numerable de las palabras, se puede utilizar SelectMany para conseguir eso, también ...

+0

Definitivamente no es la versión más corta. Los operadores de consulta son demasiado detallados;) 'File.ReadAllLines (" file.txt "). Select (line => line.Split ('\ t'))' –

+0

Sí, pero al OP le gustaba usar operadores de consulta, así que lo dejé . –

+0

Si tuviera una situación en la que tuviera que extraer los datos de un archivo delimitado por tabuladores de 50 MB de tamaño grande, ¿sería este el mejor enfoque? –

Cuestiones relacionadas