Jump to content

Ler linhas de ficheiro TXT


davidcbbc

Recommended Posts

Olá , tenho andado a programar umas coisas em C e precisava de um código que me lê-se coisas do ficheiro txt ignorado outras:

por exemplo , tenho isto no ficheiro txt:

nome: teste1

local: porto

Queria dar output só de "teste1" e "porto"

No entanto , eu arranjei um código que me fornece essa informação:

int main(){
    char linha[1020];
    char teste1[1020];
    char teste2[1020];
    FILE *fp;
    fp= fopen("cinemas.txt", "r");
    fgets(linha,sizeof(linha),fp); 		
    linha[strlen(linha)-1]=0;
    strcpy(teste1, &linha[6]);
    fgets(linha,sizeof(linha),fp); 			
    linha[strlen(linha)-1]=0;
    strcpy(teste2, &linha[7]);
    printf("%s\n",teste1);
    printf("%s",teste2);
    fclose(fp);

    return 0;
}

Mas não percebo o porquê dele funcionar! supostamente o sizeof() contava o número de bytes que a memória estava a guardar para a string .

Se alguém me esclarecesse detalhadamente este código ficava imensamente grato!

Link to post
Share on other sites
HappyHippyHippo

primeiro, o código não está a fazer o que pretendes, está a fazer output das linhas que está a ler do ficheiro na tua totalidade.

segundo, o sizeof devolve o espaço de memória que o seu argumento ocupa, não tem nada haver com strings ou não.

IRC : sim, é algo que ainda existe >> #p@p
Link to post
Share on other sites
Rui Carlos
3 horas atrás, HappyHippyHippo disse:

primeiro, o código não está a fazer o que pretendes, está a fazer output das linhas que está a ler do ficheiro na tua totalidade.

Por acaso reparaste nos strcpys?

15 minutos atrás, davidcbbc disse:

fgets(linha,sizeof(linha),fp);

linha[strlen(linha)-1]=0;

Esse código simplesmente lê a linha completa, e depois "remove" o último caracter (que deverá ser o \n, a menos que não leias uma linha completa).

O sizeof pouco interessa.  Apenas serve para garantir que não lês mais caracteres do que a capacidade do array.  Mas as tuas linhas são muito mais pequenas do que a capacidade do array.

O "segredo" para o código funcionar está nas chamadas ao strcpy.  Sabes o que é que &linha[6] representa?

Link to post
Share on other sites
1 minuto atrás, Rui Carlos disse:

Por acaso reparaste nos strcpys?

Esse código simplesmente lê a linha completa, e depois "remove" o último caracter (que deverá ser o \n, a menos que não leias uma linha completa).

O sizeof pouco interessa.  Apenas serve para garantir que não lês mais caracteres do que a capacidade do array.  Mas as tuas linhas são muito mais pequenas do que a capacidade do array.

O "segredo" para o código funcionar está nas chamadas ao strcpy.  Sabes o que é que &linha[6] representa?

Sei sim , é apartir desse caracter da linha que ele copia.

Link to post
Share on other sites
2 horas atrás, HappyHippyHippo disse:

pois, tens razão ... já estou velho para ver código desnecessariamente complexo ...

 

CÁ GANDA VOLTA !!!

hqdefault.jpg

há maneira mais fácil?

Peço desculpa pela ignorância , estou a aprender aos poucos..

Link to post
Share on other sites
HappyHippyHippo
1 hour ago, davidcbbc said:

há maneira mais fácil?

Peço desculpa pela ignorância , estou a aprender aos poucos..

int main(){
  char valor[32];

  FILE *fp;
  fp = fopen("cinemas.txt", "r");

  fscanf("nome: %s\n", valor);
  printf("%s\n", valor);

  fscanf("local: %s\n", valor);
  printf("%s\n", valor);
  
  fclose(fp);

  return 0;
}

v

  • Vote 1
IRC : sim, é algo que ainda existe >> #p@p
Link to post
Share on other sites
45 minutos atrás, HappyHippyHippo disse:

int main(){
  char valor[32];

  FILE *fp;
  fp = fopen("cinemas.txt", "r");

  fscanf("nome: %s\n", valor);
  printf("%s\n", valor);

  fscanf("local: %s\n", valor);
  printf("%s\n", valor);
  
  fclose(fp);

  return 0;
}

v

Não sabia que se podia fazer assim, realmente é mais prático!

Muito obrigado pela ajuda!

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.