Jump to content
miguel__1

[Resolvido] Passar info de txt para lista ligada

Recommended Posts

miguel__1

Boas malta,

estou com uns problemas para passar a informação de um ficheiro txt para uma lista ligada. O ficheiro de texto está assim: 

 

nome
Nascimento
2 consultas
tipo cnsulta - data -  medico
tipo cnsulta - data -  medico
nome
Nascimento
0 consultas

e a minha estrutura está:

typedef struct{
    int dia, mes, ano;
} info;

struct consulta
{
    char nome_medico[50];
    char tipo_consulta[20];
    char especialidade[50];
    int dia;
    int mes;
    int ano;
    pConsulta prox;
};

struct paciente {
    char nome[50];
    //char apelido[50];
    //char num_consultas;
    int num_consultas;
    // data de nascimento
    info data_nascimento;
    
    // historico consultas
    pConsulta lista;

    pPaciente prox;
};

 

Agora o meu problema é passar a infomação para a lista ligada.

Edited by miguel__1

Share this post


Link to post
Share on other sites
HappyHippyHippo

podes ser mais concreto na tua dúvida ? da forma como clocas a tua dúvida parece indicar que pretendes que te resolvam o problema ...


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
miguel__1

Não, eu queria era saber os passos a fazer para eu conseguir resolver o problema. Uma especie de algoritmo. Porque a parte das consultas está a confundir-me todo.

Share this post


Link to post
Share on other sites
HappyHippyHippo

mas os passos são simples (e isto é supondo que a tua estrutura para guardar a info está correcta)

- abre o ficheiro

- lê dados do ficheiro, 

- lê dados do ficheiro

...

- fecha o ficheiro.

 

como disse, tens de ser mais específico na tua dúvida ... 


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
miguel__1

Já consegui quase tudo, falta-me é uma parte que está a rebentar...

int carrega_dados ()
{
    FILE  *g;

    Paciente *a;
    int i;
    int totconsultas;
    totconsultas = a->num_consultas;
    g=fopen("consultas.txt", "rt");
    if (g==NULL){
        printf("Erro no acesso ao ficheiro.\n");
        return 0;
    }
    a=malloc(sizeof(Paciente));
    if ( a==NULL){
        printf("Erro na alocaçao de memoria.\n");
        return 0;
    }

    printf("\n\nPACIENTES\n");
    while (fscanf(g,"%49[^\n] %d-%d-%d %d",a->nome, &a->data_nascimento.dia, &a->data_nascimento.mes, &a->data_nascimento.ano, &a->num_consultas)==5){
            printf("Nome: %s\nData de nascimento: %d-%d-%d\nConsultas: %d\n",a->nome, a->data_nascimento.dia, a->data_nascimento.mes, a->data_nascimento.ano, a->num_consultas);
            totconsultas = a->num_consultas;
            //printf(" %d", totconsultas);

             while(totconsultas !=0 ){
                fscanf(g,"%s - %d/%d/%d - %s",a->lista->tipo_consulta, &a->lista->dia, &a->lista->mes, &a->lista->ano, a->lista->nome_medico);
                printf("\t%s - %d/%d/%d - %s",a->lista->tipo_consulta, a->lista->dia, a->lista->mes, a->lista->ano, a->lista->nome_medico);
                totconsultas--;
            }


    }
}

 

O ficheiro de texto está assim:

Ana Sofia Ramos
23-6-1999
0 
Arnaldo Antunes 
12-1-1956
2 
Normal - 13/08/2016 - Joao Silva
Normal - 17/05/2016 - Joao Silva

Quando entra no for ou no while rebenta sempre aí.... O que tenho mal?

Edited by miguel__1
mais info

Share this post


Link to post
Share on other sites
HappyHippyHippo

olha par ao formato do texto e o formato do que estás a ler :

Normal - 13/08/2016 - Joao Silva
fscanf(g,"%s %d %d %d",a->lista->tipo_consulta, &a->lista->dia, &a->lista->mes, &a->lista->ano);

não estás a ver nada que não esteja a bater certo ?

 

ps : copy-paste é uma arte, e como todos os artistas, é necessário saber o que estás a fazer

Edited by HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
miguel__1

    while (fscanf(g,"%49[^\n] %d-%d-%d %d",a->nome, &a->data_nascimento.dia, &a->data_nascimento.mes, &a->data_nascimento.ano, &a->num_consultas)==5){
            printf("Nome: %s\nData de nascimento: %d-%d-%d\nConsultas: %d\n",a->nome, a->data_nascimento.dia, a->data_nascimento.mes, a->data_nascimento.ano, a->num_consultas);
            totconsultas = a->num_consultas;
            //printf(" %d", totconsultas);
           
             while(totconsultas !=0 ){
                fscanf(g,"%s - %d/%d/%d - %s",a->lista->tipo_consulta, &a->lista->dia, &a->lista->mes, &a->lista->ano, a->lista->nome_medico);
                printf("\t%s - %d/%d/%d - %s",a->lista->tipo_consulta, a->lista->dia, a->lista->mes, a->lista->ano, a->lista->nome_medico);
                totconsultas--;
            }


    }

 

Já tinha mudado depois de escrever o comentário, mas continua a rebentar sempre que tem alguma consulta... Mas quando não tem nenhuma consulta apresenta tudo, mas não segue para o proximo paciente...

 

PS: o trabalho é o mesmo, como não estava a conseguir resolver procurei para ver o que aqui havia sobre isso.

Edited by miguel__1

Share this post


Link to post
Share on other sites
HappyHippyHippo

para referência, o caracter '\n' é um caracter que existe no ficheiro e que deve ser lido e/ou descartado quando se faz o parsing de um ficheiro


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
miguel__1
6 horas atrás, HappyHippyHippo disse:

para referência, o caracter '\n' é um caracter que existe no ficheiro e que deve ser lido e/ou descartado quando se faz o parsing de um ficheiro

Como assim?

Share this post


Link to post
Share on other sites
nefilim

o caracter '\n' é um caracter que deve ser considerado(mudança de linha) mas ao mesmo tempo não tem importância quando se quer extrair dados porque não tem significado em nossa linguagem.

Share this post


Link to post
Share on other sites
HappyHippyHippo
40 minutes ago, nefilim said:

o caracter '\n' é um caracter que deve ser considerado(mudança de linha) mas ao mesmo tempo não tem importância quando se quer extrair dados porque não tem significado em nossa linguagem.

não tem importância ? ... diz isso a 50% dos casos/tópicos de leitura de dados aqui do fórum ...


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
nefilim

o que estava dizer é que não tem importância do ponto de vista da informação a extrair...mas claro é uma referencia....para saber quando termina uma linha....importante claro...

 

Share this post


Link to post
Share on other sites
HappyHippyHippo

não é uma questão de "saber quando termina a linha". é uma questão de : "se não a leres da stream, vais ter problemas de leitura formatada"


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.