foxbit3r escreveu:
Dá uma olhada e vê se isso te ajuda.
Eu coloquei as informações que vc passou num arquivo chamado dados.txt
#include <stdio.h>
#include <string.h>
#define ESPACO " "
int main(){
char str1[50];
char *pt;
int countPos;
double val;
FILE *fp;
fp = fopen ("dados.txt", "r");
while(fgets(str1,50,fp)){
countPos=0;
pt = strtok(str1,ESPACO);
while(pt != NULL){
if(countPos == 1){
sscanf(pt,"%lf",&val);
printf("%lf\n",val);
}
pt = strtok(NULL,ESPACO);
countPos++;
}
}
fclose(fp);
}
com sua permissão, apenas dois adendos visando otimizar o seu algoritmo para leituras intensivas de dados:
1 - no 2o while, ao atingir a condição countPos == 1, adicionar um break para sair imediatamente desse laço, evitando parsear em vão os próximos tokens de cada linha que por ventura strtok encontre:
while(fgets(str1,50,fp)){
countPos=0;
pt = strtok(str1,ESPACO);
while(pt != NULL){
if(countPos == 1){
sscanf(pt,"%lf",&val);
printf("%lf\n",val);
break; /* <==== */
}
pt = strtok(NULL,ESPACO);
countPos++;
}
}
2 - mais ainda, visto que sempre e apenas o 2o valor deve ser obtido, pode-se pular diretamente para o 2o token, evitando-se assim o 2o while:
while(fgets(str1,50,fp)){
pt = strtok(str1,ESPACO);
pt = strtok(NULL,ESPACO);
sscanf(pt,"%lf",&val);
printf("%lf\n",val);
}
em um arquivo grande como o mencionado pela autora do tópico, um desses ajustes - em especial o segundo - fará grande diferença no tempo de leitura/processamento.