Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

Voltriz

ficheiros em C

Mensagens Recomendadas

Voltriz    0
Voltriz

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Hipnoted    6
Hipnoted

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rui Carlos    309
Rui Carlos

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Voltriz    0
Voltriz

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

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Hipnoted    6
Hipnoted

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Voltriz    0
Voltriz

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?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rui Carlos    309
Rui Carlos

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Voltriz    0
Voltriz

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!

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Rui Carlos    309
Rui Carlos

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Triton    12
Triton

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.

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


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade