Jump to content
davidcbbc

Ler linhas de ficheiro TXT

Recommended Posts

davidcbbc

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!

Share this post


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

Share this post


Link to post
Share on other sites
HappyHippyHippo

mas tu apresentaste uma data delas !!! afinal qual é a linha que não percebes ?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


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?

Share this post


Link to post
Share on other sites
davidcbbc
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.

Share this post


Link to post
Share on other sites
HappyHippyHippo
39 minutes ago, Rui Carlos said:

Por acaso reparaste nos strcpys?

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

 

CÁ GANDA VOLTA !!!

hqdefault.jpg


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
davidcbbc
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..

Share this post


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

Share this post


Link to post
Share on other sites
davidcbbc
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!

Share this post


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.