Jump to content
Sign in to follow this  
iniciante

ler ficheiros

Recommended Posts

iniciante

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? :)


RC

Share this post


Link to post
Share on other sites
Baderous

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.

Share this post


Link to post
Share on other sites
iniciante

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.


RC

Share this post


Link to post
Share on other sites
iniciante

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.


RC

Share this post


Link to post
Share on other sites
Baderous

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.

Share this post


Link to post
Share on other sites
iniciante

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.


RC

Share this post


Link to post
Share on other sites
iniciante

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...


RC

Share this post


Link to post
Share on other sites
iniciante

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


RC

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
Sign in to follow this  

×
×
  • 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.