• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

port

Ignorar linhas

6 mensagens neste tópico

Boas tardes antes de mais,

Estou a fazer um exercicio em C onde necessito de ler algumas coisas de um ficheiro de texto.

No entanto algumas linhas sao comentarios, e começam por um caracter diferente, e outras linhas não têm nada, apenas mudança de linha (\n).

Gostaria de saber qual a melhor maneira de ignorar estas linhas, tanto de comentario como as que têm apenas \n.

Obrigado desde já.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O melhor é percorreres o texto (string) e procuras por uma substring "\n\n" e substituis por "\n". Em relação ao caracter, fazes a mesma coisa, só que em vez de "\n\n", tens de procurar por "\n(caracter)", por exemplo se o caracter fosse '#', procuravas por "\n#"

:)

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

porque procurar por "\n\n" ?

Eu so' quero ignorar linhas começadas por # (e' mesmo esse o caracter), mas que têm texto a seguir, e linhas apenas com enter -> "\n" .

Não percebo porque os 2 \n.

Mas há alguma forma concreta de encontrando esse caracter inicial -> # neste caso, passar imediatamente para a linha seguinte, ou tenho mesmo que ler a linha toda, ignorando apenas o que vou lendo, até chegar ao \n ?

Obrigado mais uma vez

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Supondo que estás a ler o ficheiro com fgets() (se não for mete aqui o código ...) será qualquer coisa mais ou menos assim:

/* #includes */
#define TAMANHO 80
#define CARACTER_DE_COMENTARIO '#'

/* ... */
  char buf[TAMANHO];
/* ... */

     if (fgets(buf, TAMANHO, stdin) == NULL) /* erro a ler o ficheiro */;
     if (buf[0] == '\n') /* linha vazia */;
     if (buf[0] == CARACTER_DE_COMENTARIO) /* comentario */;
     if (buf[strlen(buf)-1] != '\n') /* linha tem mais de TAMANHO caracteres */;
     /* ... */

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Esta é uma solução muito boa!

porque procurar por "\n\n" ?

Eu so' quero ignorar linhas começadas por # (e' mesmo esse o caracter), mas que têm texto a seguir, e linhas apenas com enter -> "\n" .

Não percebo porque os 2 \n.

Mas há alguma forma concreta de encontrando esse caracter inicial -> # neste caso, passar imediatamente para a linha seguinte, ou tenho mesmo que ler a linha toda, ignorando apenas o que vou lendo, até chegar ao \n ?

Obrigado mais uma vez

Os 2 \n é assim: 1 dos \n corresponde ao caracter de parágrafo da linha anterior e o segundo é o da linha vazia. :)

Anyway, se estiveres a usar um buffer, como fez o pmg, nao precisas de nada disto. :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora