2010-02-23 10 views
5

Utilizzando LINQ, qual è un modo efficace per ottenere ogni stringa da un file .txt delimitato da tabulazioni (e quindi ottenere ogni parola, di solito ciò che string.Strit (...) fa)?Linq e streamreader ottenendo le linee

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

Sono parte di questa soluzione, credo. Non mi importa se questo utilizza il rendimento restituito.

EDIT: Ho visto anche i thread qui che descrivono esattamente cosa sto cercando di fare, ma non li trovo.

risposta

7

io non sono del tutto sicuro cosa stai chiedendo ma sembra che tu stia cercando di ottenere ogni parola da un file delimitato da tabulazione come IEnumerable<string>. Se è così, prova il seguente

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

+1 ottima risposta e uso di Lambda Expressions –

+0

Questo è quello che sto cercando, scusami per non aver scritto bene il mio post, non ero sicuro di come meglio spiegare il problema. Come potrei combinare ciò con yield return per restituire ogni parola in una stringa? – dotnetdev

+0

c'è un modo semplice per farlo anche per tutti tranne l'ultima riga? – Andy

0

L'utilizzo di File.ReadAllLines è semplice, ma non necessariamente il più efficiente, poiché legge l'intera riga in memoria.

Una versione corta sarebbe probabilmente:

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

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

Se si desidera un singolo enumerabile delle parole, è possibile utilizzare SelectMany per ottenere che, troppo ...

+0

Decisamente non la versione più breve. Gli operatori di query sono troppo prolissi;) 'File.ReadAllLines (" file.txt "). Select (line => line.Split ('\ t'))' –

+0

Sì - ma l'OP piaceva usare gli operatori di query, quindi l'ho lasciato . –

+0

Se avessi una situazione in cui dovevo estrarre i dati da un file delimitato da tabulazioni di 50 MB di larghezza, questo sarebbe l'approccio migliore? –

Problemi correlati