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

Innight

Ler conteudo ficheiro .data

14 mensagens neste tópico

Boas pessoal.como eu fazo leitura de um ficheiro .data em C?

eu quando abro o .data com o notepad aparece FF" [][]

.

Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens de saber o formato do ficheiro. E lês em modo binário no C.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas o formato do ficheiro é .data .entao para formato .data é formao binario?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas o formato do ficheiro é .data .entao para formato .data é formao binario?

O formato do ficheiro não é .data. Isso deve ser a extensão.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

humm.Pois estou a perceber.Sabes como se le ficheiros binarios?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

humm.Pois estou a perceber.Sabes como se le ficheiros binarios?

Abres o ficheiro com o fopen e usas o fread para ler.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pois.a unica coisa mais perto que eu consigo chegar é ler o k esta lá escrito em binario e nao mesmo em texto..

  system("cls");
    FILE *fp;
    
    fp = fopen ( "Cursos", "r" );   
    if ( fp != NULL )   
    {char line [ 10 ];      
    while ( fgets ( line, sizeof line, fp ) != NULL )
    fputs ( line, stdout ); 
    }
/* read a line */      
fclose ( fp );

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

#include <stdio.h>
#include <stdlib.h>

struct tagCursoFile
{
char nome; 
char descricao;
int ciclo;
};

struct tagCursoMem
{
char nome; 
char descricao;
int ciclo;
struct tagCursoMem* pNext;
};

int MainMenu();
void AddToHead(struct tagCursoMem** pAuxHead, struct tagCursoMem* pAuxNew);
//struct tagCursoMem* ProcMaisVelho(struct tagCursoMem* pAux);
void GravarFile(int nSatus, struct tagCursoMem* pAux);
void lerdados(struct tagCursoMem* pAux,struct tagCursoMem* pAuxNew);
int main()
{
int opc, nAlterado = 0, nCntAlunos = 0;
FILE* pFile;
struct tagCursoFile cursoFile;
struct tagCursoMem* pHead = NULL;
struct tagCursoMem* pNew, *pAux;
if((pFile = fopen("alunos.data", "rb")) != NULL) {
while(fread(&cursoFile, sizeof(struct tagCursoFile), 1, pFile) != 0) {
pNew = (struct tagCursoMem*)malloc(sizeof(struct tagCursoMem));
pNew->pNext = NULL;
pNew->nome = cursoFile.nome;
pNew->descricao = cursoFile.descricao;
pNew->ciclo = cursoFile.ciclo;
AddToHead(&pHead, pNew);
nCntAlunos++;
}
printf("Foram lidos %d registos", nCntAlunos);
fclose(pFile);
}
do {
opc = MainMenu();
switch(opc) {
case 1:
pNew = (struct tagCursoMem*)malloc(sizeof(struct tagCursoMem));
pNew->pNext = NULL;
printf("Indique o nome do curso:\n");
scanf("%s", &pNew->nome);
printf("Indique a descricao:\n");
scanf("%s", &pNew->descricao);
printf("Indique o ciclo:\n");
scanf("%d", &pNew->ciclo);

AddToHead(&pHead, pNew);
nAlterado = 1;
break;

case 2:
GravarFile(nAlterado, pHead);
nAlterado = 0;
break;

case 4:
  system("cls");
    
    pFile=fopen("alunos.data","r");
    int num;
    fread(&num,sizeof(int),1,pFile);
    /* read a line */      
    fclose ( pFile );
      system("pause");

   
      /* close the file */
      fclose(pFile);
   
      return 0;

break;
/*
case 3:
if(((pAux = ProcMaisVelho(pHead)) != NULL))
printf("O aluno mais velho tem o numero %d", pAux->nNumero);
break;
*/
case 0:
break;
default:
printf("Opcao invalida!");
}
}while(opc != 0);
GravarFile(nAlterado, pHead);
return 0;
}

int MainMenu()
{
int sel;
puts("\n\n1 - Inserir aluno");
puts("2 - Gravar no ficheiro");
puts("3 - Aluno mais velho");
puts("4 - Ler Alunos");
puts("\n0 - Sair");
scanf("%d", &sel);
return sel;
}

void AddToHead(struct tagCursoMem** pAuxHead, struct tagCursoMem* pAuxNew)
{
if(*pAuxHead != NULL)
pAuxNew->pNext = *pAuxHead;
*pAuxHead = pAuxNew;
}
/*
struct tagCursoMem* ProcMaisVelho(struct tagCusoMem* pAux)
{
struct tagCursoMem *pMaisVelho;
if(pAux != NULL)
pMaisVelho = pAux; // nó inicial de comparação
else
return NULL;
while(pAux != NULL) {
if(pMaisVelho->nIdade < pAux->nIdade)
pMaisVelho = pAux;
pAux = pAux->pNext;
}
return pMaisVelho;
}
*/
void GravarFile(int nStatus, struct tagCursoMem* pAux)
{
FILE* pFile;
struct tagCursoFile Curso;
if(nStatus == 1) {
if((pFile = fopen("alunos.data", "w")) != NULL) {
while(pAux != NULL) {
Curso.nome = pAux->nome;
Curso.descricao = pAux->descricao;
Curso.ciclo = pAux->ciclo;
fwrite(&Curso, sizeof(struct tagCursoFile), 1, pFile);
pAux = pAux->pNext;
}
}
fclose(pFile);
}
}

Vou exemplificar o que me falta,eu quando eu adicino um novo Curso e insero no aluno.data a informação mas a informação fica assim qunado eu leio com o notepad

"ff"   ld"   fg"   "

ou seja o compilador le como se fosse letras normais,porque comprende binarios mas eu nao sei como eide de ler estes binarios em formata de texto para o output no ecran.ALguma ajuda?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

não tenho a certeza disto, mas penso que o fwrite é para escrever em ficheiros binários.

na função GravarFile, tenta usar fprintf.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

se eu trocar para fprintf no GravarFile vai dar critical erro.mas tipo no gravarFile esta bem Fwrite para gravar(escrever) no ficheiro.No caso 4 é que nao sei como ler.:S

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

se eu trocar para fprintf no GravarFile vai dar critical erro.mas tipo no gravarFile esta bem Fwrite para gravar(escrever) no ficheiro.No caso 4 é que nao sei como ler.:S

tás enganado, no teu caso podes perfeitamente usar o fprintf. se não funcionar o erro não vem daí...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

#include <stdio.h>
#include <stdlib.h>
struct tagCursoFile
{
char nome; 
char descricao;
int ciclo;
};

struct tagCursoMem
{
char nome; 
char descricao;
int ciclo;
struct tagCursoMem* pNext;
};

int MainMenu();
void AddToHead(struct tagCursoMem** pAuxHead, struct tagCursoMem* pAuxNew);
//struct tagCursoMem* ProcMaisVelho(struct tagCursoMem* pAux);
void GravarFile(int nstatus, struct tagCursoMem* pAux);
void LeituraFile(int nstatus, struct tagCursoMem* pAux);
void lerdados(struct tagCursoMem* pAux,struct tagCursoMem* pAuxNew);
int main()
{
int opc, nAlterado = 0, nCntAlunos = 0;
FILE* pFile;
struct tagCursoFile cursoFile;
struct tagCursoMem* pHead = NULL;
struct tagCursoMem* pNew, *pAux;
if((pFile = fopen("alunos.data", "rb")) != NULL) {
while(fread(&cursoFile, sizeof(struct tagCursoFile), 1, pFile) != 0) {
pNew = (struct tagCursoMem*)malloc(sizeof(struct tagCursoMem));
pNew->pNext = NULL;
pNew->nome = cursoFile.nome;
pNew->descricao = cursoFile.descricao;
pNew->ciclo = cursoFile.ciclo;
AddToHead(&pHead, pNew);
nCntAlunos++;
}
printf("Foram lidos %d registos", nCntAlunos);
fclose(pFile);
}
do {
opc = MainMenu();
switch(opc) {
case 1:
pNew = (struct tagCursoMem*)malloc(sizeof(struct tagCursoMem));
pNew->pNext = NULL;
printf("Indique o nome do curso:\n");
scanf("%s", &pNew->nome);
printf("Indique a descricao:\n");
scanf("%s", &pNew->descricao);
printf("Indique o ciclo:\n");
scanf("%d", &pNew->ciclo);

AddToHead(&pHead, pNew);
nAlterado = 1;
break;

case 2:
GravarFile(nAlterado, pHead);
nAlterado = 0;
break;

case 4:
    LeituraFile(nAlterado, pHead);
      return 0;

break;

case 3:
//if(((pAux = ProcMaisVelho(pHead)) != NULL))
//printf("O aluno mais velho tem o numero %d", pAux->nNumero);
break;

case 0:
break;
default:
printf("Opcao invalida!");
}
}while(opc != 0);
GravarFile(nAlterado, pHead);
return 0;
}

int MainMenu()
{
int sel;
puts("\n\n1 - Inserir aluno");
puts("2 - Gravar no ficheiro");
puts("3 - Aluno mais velho");
puts("4 - Ler Alunos");
puts("\n0 - Sair");
scanf("%d", &sel);
return sel;
}

void AddToHead(struct tagCursoMem** pAuxHead, struct tagCursoMem* pAuxNew)
{
if(*pAuxHead != NULL)
pAuxNew->pNext = *pAuxHead;
*pAuxHead = pAuxNew;
}
/*
struct tagCursoMem* ProcMaisVelho(struct tagCusoMem* pAux)
{
struct tagCursoMem *pMaisVelho;
if(pAux != NULL)
pMaisVelho = pAux; // nó inicial de comparação
else
return NULL;
while(pAux != NULL) {
if(pMaisVelho->nIdade < pAux->nIdade)
pMaisVelho = pAux;
pAux = pAux->pNext;
}
return pMaisVelho;
}
*/
void GravarFile(int nStatus, struct tagCursoMem* pAux)
{
FILE* pFile;
struct tagCursoFile Curso;
if(nStatus == 1) {
if((pFile = fopen("alunos.data", "w")) != NULL) {
while(pAux != NULL) {
Curso.nome = pAux->nome;
Curso.descricao = pAux->descricao;
Curso.ciclo = pAux->ciclo;
fwrite(&Curso, sizeof(struct tagCursoFile), 1, pFile);
pAux = pAux->pNext;
printf("%d",Curso.ciclo);    

}
}
fclose(pFile);
}
}

void LeituraFile(int nstatus, struct tagCursoMem* pAux)
{
FILE* pFile;
struct tagCursoFile Curso;
if(nstatus == 1) {
if((pFile = fopen("alunos.data", "r")) != NULL) {
while(pAux != NULL) {
Curso.nome = pAux->nome;
Curso.descricao = pAux->descricao;
Curso.ciclo = pAux->ciclo;
fwrite(&Curso, sizeof(struct tagCursoFile), 1, pFile);
pAux = pAux->pNext;
printf("%d",Curso.ciclo);    
system("pause");
}
}
fclose(pFile);
}
}

Bem segui o teu concelho, este printf("%d",Curso.ciclo);    no GravarFile faz o ouput certo do ciclo do curso.

Mas o printf que esta na leitura que eh igual so me le o ultimo que introduzi ou entao dame ciclo infinito por causa do while?alguma ideia?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

na função de ler o ficheiro, tas a usar o fwrite para ler?!

não seguiste o meu conselho, o que eu tava a dizes era para usares fprintf no lugar do fwrite...

para manipular ficheiros de texto eu aconselho sempre a usar fprintf pa escrever e fscanf pa ler... é o mais facil...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

a forma que eu arranjei e funcinou tirando nao sei porque qunado se insere mais do que 4 numeros seguidos.

void LeituraFile(int nstatus, struct tagCursoMem* pAux)
{
FILE* pFile;
struct tagCursoFile Curso;
if((pFile = fopen("alunos.data", "r")) != NULL) {
while(pAux != NULL) {
Curso.nome = pAux->nome;
Curso.descricao = pAux->descricao;
Curso.ciclo = pAux->ciclo;


printf("%d\n",Curso.ciclo);    
pAux = pAux->pNext;
}
}

fclose(pFile);
system("pause");
}

era mais ou menos isto que querias chegar?

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