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

iniciante

ler ficheiros

9 mensagens neste tópico

Tenhu uma questao um pouco basica para fazer. Tenho um ficherio de texto com o nome ficheiro.txt que contem o seguinte conjunto de numeros:

1  20

2  30

como é que eu posso ler este ficheiro e guardar os valores numa lista deste tipo:

typedef struct processo

{
struct processo *prox;      /* Próximo elemento da lista*/
struct processo *ant;      /* Elemento anterior da lista */
int numProc;	     
int temProc;

}lista; 

ou seja, eu quero ser o  numero 1 e atribuir esse valor ao numProc da lista. depois quero ler o 20 e atribuir este valor ao temProc. e a seguir fazer o  mesmo para a linha de baixo. Alguem me pode ajudar? :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Abrir o ficheiro: fopen.

Ler linha a linha: fgets

Separar o conteúdo da linha e converter para o tipo de dados adequado: strtok + atoi.

Fechar o ficheiro: fclose.

A criação dos nodos da estrutura e etc presumo que saibas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

sim eu isso eu sei...eu queria saber é como é que eu faço para ler primeiro so o numero 1 e guardalo e dps so o numero 20 e guardalo...=s

Abrir o ficheiro: fopen.

Ler linha a linha: fgets

Separar o conteúdo da linha e converter para o tipo de dados adequado: strtok + atoi.

Fechar o ficheiro: fclose.

A criação dos nodos da estrutura e etc presumo que saibas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pois eu ja li o 3º paragrafo o problema é que continuo sem perceber o que é isso, como se faz isso e como chegar ao resultado que queria ter

3º parágrafo do meu post.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O strtok divide uma string em vários tokens de acordo com um separador. Indicando que o separador é o espaço, podes separar o conteúdo de cada linha. No teu caso, para cada linha, vais obter 2 strings contendo o 1º e o 2º número, respectivamente. Como são strings e tu queres armazenar em variáveis do tipo int, tens de fazer a conversão de tipos através da função atoi.

Outra opção que não referi é a utilização do sscanf que permite evitar aquela treta toda de partir a string e converter os tipos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu fiz algo deste tipo

for(i=0;i<numproc;i++)/*percorrer linha a linha do FichProc.txt,ler o numero de processo e o tempo de execucao*/

    {

char test[6];

            fgets(test, 6, ler);

    char    *numero;

            char    *tempo;

            char    *espacoVazio = " ";

            numero=strtok(test,espacoVazio);    // string1

            tempo=strtok(NULL,espacoVazio);  // string2

            printf("numero %d \ntempo %d\n" ,atoi(numero),atoi(tempo));

            system("pause");

}

quando imprime a primeira vez imprime o numero 1 e o tempo 20..mas quando imprime a 2ª vez imprime 0 0 em vez de 2 30..

O strtok divide uma string em vários tokens de acordo com um separador. Indicando que o separador é o espaço, podes separar o conteúdo de cada linha. No teu caso, para cada linha, vais obter 2 strings contendo o 1º e o 2º número, respectivamente. Como são strings e tu queres armazenar em variáveis do tipo int, tens de fazer a conversão de tipos através da função atoi.

Outra opção que não referi é a utilização do sscanf que permite evitar aquela treta toda de partir a string e converter os tipos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

int main()

{

      int numproc=numeroProcessos();

   

      FILE * ler;

      ler=fopen("FichProc.txt","r");

      char test[6];

      int a ,b;

     

    int i;

    for(i=0;i<numproc;i++)/*percorrer linha a linha do FichProc.txt,ler o numero de processo e o tempo de execucao*/

    {

   

        fgets(test, 6, ler);

        sscanf (test,"%d %d",&a,&:P;

        printf ("numero:%d\ntempo:%d\n",a,:thumbsup:;

    }

  system("PAUSE");

  return 0;

}

ok assim é mais facil d fazer e perceber..mas quando vou a imprimir a 2ª linha do ficheiro nao imprime bem...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ok ja percebi o erro..era so aumentar o tamanho do char test... obrigado pela ajuda  :P

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