Contagem de linhas de arquivo em c#
Pergunta
Quero saber quantas linhas tenho no meu arquivo. Como posso fazer isso de uma maneira simples (quero dizer, não passar por todo o arquivo e contar cada linha)? Existe um comando para isso?
Solução
Nós iremos:
int lines = File.ReadAllLines(path).Length;
é bastante simples, mas não muito eficiente para enormes arquivos de texto. Eu provavelmente usaria um TextReader
Na maioria dos casos, para evitar o buffer excessivo:
int lines = 0;
using (TextReader reader = File.OpenText(path)) {
while (reader.ReadLine() != null) { lines++; }
}
Outras dicas
Qualquer "função" que você chama vai fazer a mesma coisa - vá linha por linha e conte o número de novos caracteres de linha.
Se você quiser se referir a fazer algo parecer mais "nítido", uma expressão regex para contar o número de novos caracteres de linha faria o truque.
De uma maneira ou de outra (regex, filestream etc.) alguma coisa, em algum lugar terá que passar pelas linhas de novo.
Depende da duração da linha ... geralmente a maneira mais rápida é fazer isso usando esta fórmula simples - obtenha o comprimento do arquivo em bytes e dividido pelo comprimento da linha, por exemplo:
const int LINE_LENGTH = 80; System.IO.FileInfo f = new System.IO.FileInfo(path); int noLines = f.Length / LINE_LENGTH;
O exposto acima assume que o comprimento da linha tem 80 caracteres constantes de largura ...
Se o comprimento for variável, não há outra maneira de fazê -lo, além de abrir o arquivo e iterar em cada linha e acompanhar a contagem de linhas.
Editar:Acabei de perceber uma maneira muito mais fácil depois de postar um comentário abaixo .. não seria mais fácil usar o shell sob System.Diagnostics.Process
namespace para invocar grep -c "$(\r?\n?|\n)"
Usando um argumento como o caminho para o arquivo em questão - isso o tornaria mais flexível e pode atender a qualquer arquivo. A única coisa que você teria que fazer é ler na saída e regex para obter o número real de linhas, por exemplo, usando meu grep que veio com Borland C, eu recebo essa saída
C:\Documents and Settings\Tom>grep -c "$(\r?\n?)" 273.txt File 273.txt: 35 lines match
A produção e a milhagem podem variar, o -c
Mudança de comando para Grep significa 'contagem de'