Jump to content

ler ficheiros


iniciante

Recommended Posts

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

Link to comment
Share on other 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.

RC

Link to comment
Share on other 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.

Link to comment
Share on other 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.

RC

Link to comment
Share on other 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,&😛 ;

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

    }

  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

Link to comment
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.