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

darkeyes

sscanf duvida

7 mensagens neste tópico

O meu objectivo é ler de um ficheiro 8 campos para tal pensei fazer:

    int i;
    char *copia;
    char StrAux[100];
    FILE *fp;
  
    fp=fopen("data.txt", "r");
  
    if(fp==NULL)
        puts("Ficheiro Inválido");
  
    if(fp!=NULL) {
        for (i=0; i<MAX_PROFS; i++) {
            copia=fgets(StrAux,MAX_CHARS,fp);
            if(copia==NULL) {
                sscanf(StrAux,"[\"] [\"] %d %d %d %d %d %d\n", profs->NomeCompleto,profs->Email, &profs->Nota0, &profs->Nota1, &profs->Nota2, &profs->Nota3, &profs->Nota4, &profs->Nota5);
            }
        }
    }

O conteudo do ficheiro txt é:

"Nome Completo" "email" 0 1 2 3 4 5
"Nome Compelto" "email" 1 2 3 4 5 6

Ora para separar o campo nome do email utilzei aspas, mas não me recordo onde vi que poderia utilizar algo como isto [\"] para ser de uma aspa a outra para uma string, e fazer o mesmo para a 2ª string.

Ideias?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tu é que crias o ficheiro ou já está criado?

Se fores tu a criá-lo podes sempre usar estruturas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

sou eu a cria lo, mas eu queria seguir mesmo esta metodologia, do ficheiro é copiado para a estrutura, introduzo, removo dados e no fim e tudo copiado para o ficheiro.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

não tenho a certeza mas penso que basta meteres \" ou \\" que ele assume como aspa.. tenta

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

[\"] quer dizer copiar tudo até encontrar uma aspa, penso que não é isso que queres, pois ele vai copiar tudo até encontrar a 1ª aspa, ou seja nada, e guardar no profs->NomeCompleto, e o campo Nome Completo vai para o profs->Email (penso que não estou enganado).

com essa estrutura de ficheiro tens de primeiro ler a 1ª aspa (\" (segundo o Corgan)), copiar tudo até encontrar a segunda aspa ([\"]) e ler a segunda aspa (\"), e assim sucessivamente...

se ainda puderes mudar a estrutura do ficheiro, aconselho-te a meter os campos separados por ";" e sem aspas ao barulho, penso que facilita bastante!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

entretanto optei por utilizar esse metodo e usar um caracter para separar o nome e o mail, so que quando copia o mail para a estrutura o ; vai atras, ha algum modo simples de resolver isto dentro do sscanf?

Cumprimentos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

entretanto optei por utilizar esse metodo e usar um caracter para separar o nome e o mail, so que quando copia o mail para a estrutura o ; vai atras, ha algum modo simples de resolver isto dentro do sscanf?

Cumprimentos

isso é estranho, como tás a por os argumentos no scanf? para ler todo o conteúdo até um ';' deves fazer [\;]. Assim lê tudo até ao ';' exclusive.

deve ser algo do genero:

scanf("[\;];[\;];", arg1, arg2);

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