Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

brainiac_infante

Ler somente linhas que contenham caracteres

Recommended Posts

Boa noite!

Não sei se o título ajuda muito, mas vou expor a finalidade do programa de forma mais clara:

 

O programa deverá ler todas as linhas de um arquivo txt fixo, devendo ignorar as linhas em branco, lendo apenas as linhas preenchidas com um ou mais caracteres.(o tipo do caractere digitado no texto nao é relevante, a finalidade do programa é apenas somar a quantidade de linhas preenchidas, devolvendo o total dessas linhas que estão preenchidas para o usuário. Se o usuário for na pasta local, abrir o txt e inserir mais linhas, o programa deverá lê-lo informando o novo valor.

 

ex:

 

1ª linha. fórum

2ª linha.

3ª linha. i

4ª linha.

5ª linha.

6ª linha.

7ª linha.

8ª linha.

9ª linha. masters

 

o programa deverá devolver um total de linhas = 3.

 

infelizmente o conteúdo abordado até agora em sala de aula nao correspondeu com o tema proposto.

/* Conta número de linhas de um arquivo */
#include <stdio.h>
int main (void)
{
int c;
int c2;
int nlinhas = 0; /* contador do número de linhas */
int nlinhasbranco = 0;
int total;
FILE *fp;
/* abre arquivo para leitura */
fp = fopen("entrada.txt","rt");
if (fp==NULL) {
printf("Não foi possivel abrir arquivo.\n");
return 1;
}
/* lê caractere a caractere */
while ((c = fgetc(fp)) != EOF) {
if (c == '\n')
nlinhas+= 1;
}
while ((c2 =fgetc(fp)) !=EOF) {
if (c2 == '/')
nlinhasbranco+= 1;
}

/* fecha arquivo */
fclose(fp);
/* exibe resultado na tela */
total = nlinhas - nlinhasbranco;
printf("Numero de linhas = %d\n", total);
return 0;

}



while ((c2 =fgetc(fp)) !=EOF) {
if (c2 == '/')
nlinhasbranco+= 1;
}

/* fecha arquivo */
fclose(fp);
/* exibe resultado na tela */
total = nlinhas - nlinhasbranco;
printf("Numero de linhas = %d\n", total);
return 0;

}

Não entendo muito da sintaxe de c, tentei representar linhas brancas de várias formas... a ideia era ter um total de linhas e um total de linhas brancas, a diferença (nlinhas - nlinhasbranca) seria o total de linhas preenchidas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma solução seria utilizar um contador de caracteres lidos na linha. Se ao ler um carácter de linefeed este contador for menor que 1, significa que a linha é vazia.

Compartilhar este post


Link para o post
Compartilhar em outros sites

GBecker, muita boa sua lógica, mas nao conheço esse comando, tb não sei como aplicar isso no programa.

 

 

A questão é que não consegui contar o número de linhas brancas separadamente, pra depois fazer a diferença e gerar o total de linhas preenchidas. Fora o código, minha lógica tb tá errada?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenha em mente o seguinte:

- fgetc retorna caractere por caractere do arquivo (na verdade da stream associada ao arquivo).

- Um requisito para ser linha vazia, é o fgetc retornar dois caracteres seguidos de nova linha.

 

Tendo isso em mente, a lógica que pensei é a seguinte.

- Posicionado no inicio da linha, ler os caracteres do arquivo até encontrar o caractere de nova linha ('\n'+'\r' para windows '\n', para linux) e a cada leitura, se for um caractere, incrementar um contador.

- Ao encontrar o final da linha, e o contador permanecer igual a zero, então linha é vazia.

- Para que isso seja verdadeiro, não pode somar ao contador o caractere de final da linha

 

Espero ter me expressado melhor. FLW!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.