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?

Foi útil?

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'

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top