Domanda

Voglio sapere quante linee ho nel mio file. Come posso farlo in modo semplice (voglio dire, di non passare attraverso il tutto il file e contare ogni linea)? C'è un comando per questo?

È stato utile?

Soluzione

Bene:

int lines = File.ReadAllLines(path).Length;

è abbastanza semplice, ma non molto efficiente per enormi file di testo. probabilmente userei un TextReader nella maggior parte dei casi, per evitare un eccessivo buffer:

int lines = 0;
using (TextReader reader = File.OpenText(path)) {
    while (reader.ReadLine() != null) { lines++; }
}

Altri suggerimenti

Qualsiasi "funzione" si chiama sta per fare essenzialmente la stessa cosa -. Andare riga per riga e contare il numero di caratteri di nuova riga

Se si vuole decieve te stesso a fare qualcosa di sembrare più "crisp" un'espressione regex per contare il numero di caratteri di nuova riga farebbe il trucco.

Un modo o nell'altro (Regex, FileStream ecc) qualcosa, da qualche parte dovrà passare attraverso le nuove righe.

dipende dalla lunghezza della linea ... di solito il modo più veloce è quello di farlo usando questa semplice formula - ottenere la lunghezza del file in byte e divisa per la lunghezza della linea, ad esempio:

const int LINE_LENGTH = 80;
System.IO.FileInfo f = new System.IO.FileInfo(path);
int noLines = f.Length / LINE_LENGTH;

Quanto sopra assume la lunghezza della linea è una costante di 80 caratteri un'ampia ...

Se la lunghezza è variabile, non c'è altro modo di farlo, a parte l'apertura del file e scorrere ogni riga e tenere traccia del numero di riga.

Modifica Ho appena realizzato un modo molto più facile dopo che ho postato un commento qui sotto .. Non sarebbe più semplice utilizzare effettivamente Shell sotto System.Diagnostics.Process spazio dei nomi per richiamare grep -c "$(\r?\n?|\n)" usando un argomento come il percorso del file in questione - questo renderebbe più flessibile e può ospitare qualsiasi tipo di file. L'unica cosa che si dovrebbe fare è leggere l'output e regex per ottenere al numero effettivo di linee, per esempio, usando il mio grep che è venuto con Borland C, ottengo questo output

C:\Documents and Settings\Tom>grep -c "$(\r?\n?)" 273.txt
File 273.txt:
35 lines match

La produzione e chilometraggio possono variare, l'interruttore di comando -c grep 'conteggio di' mezzi

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top