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

Voltriz

ficheiros em C

11 mensagens neste tópico

como consigo ler uma linha especifica x de um ficheiro? em linguagem C. (em tempo constante)

outra duvida é como consigo percorrer um ficheiro qualquer a começar numa linha x (em vez de começar no inicio do ficheiro)

obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

como consigo ler uma linha especifica x de um ficheiro? em linguagem C. (em tempo constante)

Com uma variável podes controlar isso, por exemplo:

i=0;

while (fgets(ficheiro)...

    i++;

    if(i=4) // se i = à 4ª linha

        fazes aqui o que pretenderes...

outra duvida é como consigo percorrer um ficheiro qualquer a começar numa linha x (em vez de começar no inicio do ficheiro)

obrigado

Isso é difícil mas podes usar o fseek, e tentar posicionar no '\n'º que queres pesquisar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em tempo constante duvido que seja possível fazê-lo, excepto em casos particulares (por exemplo, se tiveres um número fixo de caracteres por linha). Caso contrário, precisas de ler as linhas anteriores para as poderes contar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Com uma variável podes controlar isso, por exemplo:

i=0;

while (fgets(ficheiro)...

    i++;

    if(i=4) // se i = à 4ª linha

        fazes aqui o que pretenderes...

isso não vai ser tempo constante, mas obrigado pela ajuda!

o Rui Carlos é capaz de ter razão... não dá em tempo constante.

thanks aos dois

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim tens razão, não tinha lido o "tempo constante".

É que operações de I/O envolvem acesso a disco e o tempo que isso demora pode depender de vários factores.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se souberes o espaço no ficheiro para onde queres ir tens o fseek se não me engano.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso é difícil mas podes usar o fseek, e tentar posicionar no '\n'º que queres pesquisar.

tive a ver o fseek e isso é usado para avançar x caracteres do ficheiro, o que é interessante... 

/* fseek example */
#include <stdio.h>

int main ()
{
  FILE * pFile;
  pFile = fopen ( "myfile.txt" , "w" );
  fputs ( "This is an apple." , pFile );
  fseek ( pFile , 9 , SEEK_SET );
  fputs ( " sam" , pFile );
  fclose ( pFile );
  return 0;
}

After this code is successfully executed, the file myfile.txt contains:

This is a sample.

não existe uma função idêntica só que para linhas?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O problema é que avançar um caracter é fácil, pois sabe-se à partida o seu tamanho. As linhas podem ter um tamanho qualquer, por isso é impossível de fazer algo igual ao fseek. A menos que tenhas uma estrutura de dados auxiliar que te diga a posição de início de cada linha.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O problema é que avançar um caracter é fácil, pois sabe-se à partida o seu tamanho. As linhas podem ter um tamanho qualquer, por isso é impossível de fazer algo igual ao fseek. A menos que tenhas uma estrutura de dados auxiliar que te diga a posição de início de cada linha.

sim tenho 1 array onde me indica as linhas que pretendo!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Aquilo que eu queria dizer era um array com a posição de início de cada linha. Por exemplo, a 1ª linha tem n caracteres, a 2ª n', a 3ª n'', etc. e teres um array que te dizia que a primeira linha começava no caracter 0, a 2ª no caracter n, a 3ª no caracter n+n', a 4ª n+n'+n'', etc.

Assim, poderias usar o fseek.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

como consigo ler uma linha especifica x de um ficheiro? em linguagem C. (em tempo constante)

Com uma variável podes controlar isso, por exemplo:

i=0;

while (fgets(ficheiro)...

    i++;

    if(i=4) // se i = à 4ª linha

        fazes aqui o que pretenderes...

outra duvida é como consigo percorrer um ficheiro qualquer a começar numa linha x (em vez de começar no inicio do ficheiro)

obrigado

Isso é difícil mas podes usar o fseek, e tentar posicionar no '\n'º que queres pesquisar.

Atenção que isso pode não funcionar! O fgets pode devolver apenas metade de uma linha, dependendo do tamanho do buffer utilizado.

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