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

TheRaven

Ler files em C

20 mensagens neste tópico

FILES EM C

O problema é o seguinte:

Por exemplo tenho um file em base.txt com os seguintes dados:

_________________

Rui Manuel Da Costa

21-05-1986             

Seguna-05

pontos = 1

________________

FILE *bd
bd = fopen ("base.txt","r") 

  !! Abro para Leitura

Agora o que eu keria era ler do file LINHA - A - LINHA?

Com fscanf so le uma string ate encontra espaço ou \n, para o efeito k eu kero nao dá!!!!!!!

Por exemplo como é que posso tirar a 2º linha do file para uma variavel, para posterior utilizaçao?

OUTRA QUESTAO:

Por exemplo, tenho no meu codigo fonte a seguinte instruçao.

printf("Introduza a pontuaçao a dar: ");

scanf("%d",&pontos);

Como é que eu posso actualizar os pontos no fiile que eu criei?

Ou seja ir á 3º LINHA E SUBSTITUIR o valor 1 por outro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Usa as funções fgets e fputs, respectivamente.  Não sei se existe outra melhor que a fputs para realizar a substituição. :P

Devias ter colocado isto nas dúvidas. :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para ler linha a linha podes utilizar o fgets().

Por exemplo:

while(fgets(buffer,100,bd)) //Lê o ficheiro linha a linha até ao final. Em buffer fica o conteúdo de cada linha

Quanto a substituir, ou lês todo o ficheiro para uma variável e depois fazes as alterações necessárias para voltar a escrever tudo;

ou então podes usar o fseek(). Mas sinceramente os ficheiros de texto não são a melhor opção para aquilo que pretendes.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Usas modo binário para abrir o ficheiro.

Por exemplo:

FILE *file;
file = fopen("base.dat", "r+b");/*Verifica os erros...      O modo 'r+' cria o ficheiro se não existir e se existir permite alterar dados. O 'b' é o modo binário.*/

/*Com o modo binário tens uma data de funções como:*/
int fwrite(const void *ptr, int size, int num, FILE *fich);   /*Para saberes a sua utilização.... GOOGLE IT*/
int fread(const void *ptr, int size, int num, FILE *fich);   
int feof(FILE *fich);
long ftell(FILE *fich);
void rewind(FILE *fich);
int fseek(FILE *fich, long offset, int curpos);

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Usas modo binário para abrir o ficheiro.

Por exemplo:

FILE *file;
file = fopen("base.dat", r+b);/*Verifica os erros... O modo 'r+' cria o ficheiro se não existir e se existir permite alterar dados. O 'b' é o modo binário.*/
;

não me parece que o modo binário seja a melhor opção neste caso...

já agora, acho que faltam umas aspas à volta do r+b.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens razão.... Faltam aspas.

Também não sei se será a melhor opção mas melhor que texto acho que é...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Também não sei se será a melhor opção mas melhor que texto acho que é...

o ficheiro do qual vamos ler os dados está em formato de texto, por isso não estou a ver por que é que ler em formato de texto não é uma boa opção, nem em que é aspectos ler em formato binário é melhor, neste caso, do que ler em formato de texto.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não é isso Rui Carlos.... Eu acho que ele não disse que tinha que ser em formato de texto. Pois não?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não é isso Rui Carlos.... Eu acho que ele não disse que tinha que ser em formato de texto. Pois não?

FILES EM C

Por exemplo tenho um file em base.txt com os seguintes dados:

_________________

Rui Manuel Da Costa

21-05-1986             

Seguna-05

pontos = 1

Ele deixou explicitamente a ideia que quer utilizar ficheiros de texto!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Entao uso que files?

.dat

Ele também deixou a hipótese dos ficheiros .dat em aberto(binários)...

Pelo menos foi o que percebi.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

".dat" é só uma extensão, não um tipo de ficheiro.

É culpa da Microsoft associarmos uma extensão a um tipo de ficheiro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ora bem kt ao alterar os dados eu ja tive o mesmo problema, e apesar de tudo. A soluçao mais rapida foi a da criaçao de um ficheiro de texto temporario. Isto facilita bastante, pois assim alteras uma ou mais linhas ao mesmo tempo, de forma rapida e sem teres o problema de k haja erros, no final apagas o ficheiro antigo e renomeias. Eu sei k e uma soluçao k ocupa bastante mais recursos do computador, principalmente pk tem k modificar varios registos, e tem k usar alguma memoria. Mas s o objectivo n e tanto a rapidez, mas sim a certeza k funciona, este metodo e bom e robusto. E menos eficiente a nivel de tempos de resposta, mas faz o k keres sem ser necessario mt conhecimento em C.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pegando no tópico...

Mas dá para o C ler base dados por exemplo em Acess?

Com uma base de dados tipo isto:

1 - Mário Freitas

2 - Maria Gustava

E eu queria que ele lê-se a primeira coluna e retirar o nº e na segunda coluna o nome.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas dá para o C ler base dados por exemplo em Acess?

Se souberes a estrutura do formato, podes ler qualquer formato em C.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas dá para o C ler base dados por exemplo em Acess?

Se souberes a estrutura do formato, podes ler qualquer formato em C.

Como é que faria então???

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Como é que faria então???

Tens algum documento com a estrutura do formato?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Algo simples.

[table]

[td]

ID

[/td]

[td]

Nome[/td]

[td]

1[/td]

[td]

Quim

[/td]

[td]

2[/td]

[td]

Joana

[/td]

[/table]

Só com estes dois campos. É que o meu objectivo é o programa ler a base de dados, ficar com ela em memória e depois escolher um numero aleatório.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas dá para o C ler base dados por exemplo em Acess?

Não querias ler o formato da base de dados do Microsoft Access?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas dá para o C ler base dados por exemplo em Acess?

Não querias ler o formato da base de dados do Microsoft Access?

Tanto faz, o que for mais fácil. Tanto poderá ler do .xls ou .mdb.

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