Método para ler linha específica de um arquivo em C? [RESOLVIDO]

1. Método para ler linha específica de um arquivo em C? [RESOLVIDO]

Nick Us
Nick-us

(usa Slackware)

Enviado em 09/05/2020 - 14:20h

Sem usar qualquer Loop para varrer o arquivo do tipo, for, while, ou seja, SEM varrer o arquivo,
Eu queria saber se existe alguma forma de ler uma linha específica de um arquivo de texto. Exemplo: Um arquivo com 10 linhas, quero ler apenas a Linha 2 desse arquivo! A idéia é ler a linha diretamente, especificando ela. O que não existe no comando fgtes por exemplo. E não é um arquivo binário pra usar um fseek.
Procurei na Internet algum método e não encontrei nada!


  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 11/05/2020 - 04:12h

Não tem como, em C puro, saber onde começa ou termina uma linha num arquivo de texto genérico, a não ser varrendo todo o arquivo desde o início (ou, no mínimo, de uma posição de referência anterior dentro do arquivo e bem especificada), ou a menos que você tenha certeza de que todas as linhas têm exatamente o mesmo comprimento.

Alguns sistemas operacionais têm o conceito de registro implementado nativamente em seus sistemas de arquivos. Pode ser que em sistemas assim você possa imaginar que cada linha ocupa um registro, e assim consiga ir diretamente para uma linha específica dentro do arquivo. Entretanto, para fazer isso você não estará mais usando funções padronizadas do C, mas sim alguma implementação específica do sistema operacional em questão, que fatalmente não existirá em outros sistemas.

A propósito, os sistemas operacionais dos nossos computadores pessoais, tais como UNIX, Linux, Windows, DOS e outros, geralmente não possuem noções nativas de registros em seus arquivos. Nesses sistemas, arquivos têm mais ou menos o mesmo modelo que têm para o C: são uma mera sequência de bytes. Até mesmo a noção do que é um “arquivo de texto” não existe em nível de SO, mas apenas como convenção seguida por diversas aplicações (incluindo as implementações da biblioteca do C para esses sistemas).


... Então Jesus afirmou de novo: “(...) eu vim para que tenham vida, e a tenham plenamente.” (João 10:7-10)

3. Re: Método para ler linha específica de um arquivo em C? [RESOLVIDO]

Mauricio Ferrari
maurixnovatrento

(usa Slackware)

Enviado em 09/05/2020 - 14:37h


Não deve ser difícil, vou tentar criar um método pra você.

___________________________________
Conhecimento não se Leva para o Túmulo.


4. Re: Método para ler linha específica de um arquivo em C?

Mauricio Ferrari
maurixnovatrento

(usa Slackware)

Enviado em 09/05/2020 - 14:56h

int loop;
char temp[80], text[80];
FILE *arq;
arq = fopen ("arquivo", "r");
for(loop = 0; loop < 11; loop++){
if(loop != 2){ //lê a segunda linha.
fgets(temp, 80, arq);
}else{
fgets(text, 80, arq);
}
fclose(arq);
}
printf(" %s ", text);

o fgets faz a gravação na sequência, por isso deve funcionar, pois quando loop = 2 o texto que você quer vai pular para o else caindo na string a ser imprimida. Só adapte-o ao que você quer.

Testa aí, ta meio improvisado, mas...

há, use as bibliotecas padrão.
___________________________________
Conhecimento não se Leva para o Túmulo.


5. Re: Método para ler linha específica de um arquivo em C?

Nick Us
Nick-us

(usa Slackware)

Enviado em 09/05/2020 - 15:12h

mauricio123 escreveu:

int loop;
char temp[80], text[80];
FILE *arq;
arq = fopen ("arquivo", "r");
for(loop = 0; loop < 11; loop++){
if(loop != 2){ //lê a segunda linha.
fgets(temp, 80, arq);
}else{
fgets(text, 80, arq);
}
fclose(arq);
}
printf(" %s ", text);

o fgets faz a gravação na sequência, por isso deve funcionar, pois quando loop = 2 o texto que você quer vai pular para o else caindo na string a ser imprimida. Só adapte-o ao que você quer.

Testa aí, ta meio improvisado, mas...

há, use as bibliotecas padrão.
___________________________________
Conhecimento não se Leva para o Túmulo.

Oi Maurício, Origado por tentar ajudar, mas vc não prestou atenção a pergunta! Eu sei usar LOOPS, eu quero fazer isso sem VARRER o arquivo!
Não dá pra usar o fgets pq ele não tem opção de ler a linha específica!
for é um Loop não quero usar
while é um Loop não quero usar
Pois não quero ler LINHA a LINHA do arquivo, entendeu?
Eu quero ler SOMENTE a Linha 2 por exemplo. Então o programa não pode ter nenhum método que de alguma forma leia a linha 1 e nem nenhuma outra linha!

OBS isso não é um trabalho, meu objetivo é remover do MEU programa que usa um FOR + FGETS para ler a linha 2.
E não quero substituir o meu FOR por WHILE pq não vai diminuir a qtd de código escrito!
Porém se eu substituir o LOOP Inteiro do FOR + FGTES e etc... por apenas 1 COMANDO usando 1 LINHA que eu não sei se existe, reduzirá a qtd de linhas do meu programa!

OBS2 Não quero criar uma FUNÇÃO que faça isso também! Eu estou procurando por um método que EXISTA em C que não me obrigue a fazer um Loop. Poque se eu criar uma FUNÇÃO, eu vou AUMENTAR a qtd de linhas do Código e não diminuir que é meu objetivo!


6. Re: Método para ler linha específica de um arquivo em C?

Mauricio Ferrari
maurixnovatrento

(usa Slackware)

Enviado em 09/05/2020 - 16:06h

Então não tem jeito. Desconheço um comando específico. Vai ter que ficar com métodos como esse.

O máximo que você pode fazer é criar uma função tipo essa e deixa-la em um arquivo .h, ou usar alguma alternativa em C++, se tiver.

Esse método que eu passei de fato varre o arquivo, mas separa uma linha específica. O resto fica sem utilidade. Sei que você não quer uma função, mas vai ter que se contentar com os recursos que estão disponíveis para o C.


___________________________________
Conhecimento não se Leva para o Túmulo.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts