PDA

View Full Version : [C] file di testo


athebustop
20-12-2004, 12:23
dato un file di testo del tipo:

64 bytes from 10.1.2.202: icmp_seq=1 ttl=126 time=9.0 ms
64 bytes from 10.1.2.202: icmp_seq=2 ttl=126 time=9.6 ms
64 bytes from 10.1.2.202: icmp_seq=3 ttl=126 time=10.0 ms
64 bytes from 10.1.2.202: icmp_seq=4 ttl=126 time=10.4 ms
64 bytes from 10.1.2.202: icmp_seq=5 ttl=126 time=10.7 ms
64 bytes from 10.1.2.202: icmp_seq=6 ttl=126 time=11.1 ms
64 bytes from 10.1.2.202: icmp_seq=7 ttl=126 time=7.4 ms
64 bytes from 10.1.2.202: icmp_seq=8 ttl=126 time=7.0 ms
64 bytes from 10.1.2.202: icmp_seq=9 ttl=126 time=7.1 ms
64 bytes from 10.1.2.202: icmp_seq=10 ttl=126 time=7.0 ms
64 bytes from 10.1.2.202: icmp_seq=11 ttl=126 time=7.8 ms
64 bytes from 10.1.2.202: icmp_seq=12 ttl=126 time=8.4 ms
64 bytes from 10.1.2.202: icmp_seq=13 ttl=126 time=9.1 ms
64 bytes from 10.1.2.202: icmp_seq=14 ttl=126 time=9.7 ms
64 bytes from 10.1.2.202: icmp_seq=15 ttl=126 time=10.4 ms
64 bytes from 10.1.2.202: icmp_seq=16 ttl=126 time=10.9 ms
64 bytes from 10.1.2.202: icmp_seq=17 ttl=126 time=7.3 ms
64 bytes from 10.1.2.202: icmp_seq=18 ttl=126 time=7.9 ms
64 bytes from 10.1.2.202: icmp_seq=19 ttl=126 time=8.5 ms
64 bytes from 10.1.2.202: icmp_seq=20 ttl=126 time=8.9 ms
64 bytes from 10.1.2.202: icmp_seq=21 ttl=126 time=9.3 ms
64 bytes from 10.1.2.202: icmp_seq=22 ttl=126 time=18.2 ms

vorrei attraverso un programmino in C ottenere un altro file di testo contenente un elenco di valori pescati uno dopo l'altro dal campo time del tipo:

9
9,6
10
10,4
10,7
11,1
...

soluzioni?

ball12
20-12-2004, 13:15
con fscanf memorizzi solo %d.%d di quello che ti serve (in questo caso time)

ilsensine
20-12-2004, 13:25
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char **argv)
{
FILE *f;
char *pos;
char line[256];
double time;
if(argc!=2) {
fprintf(stderr, "%s <filename>\n", argv[0]);
return -1;
}
f = fopen(argv[1], "rb");
if(!f) {
perror("fopen");
return -1;
}
line[sizeof(line)-1] = '\0';
while(fgets(line, sizeof(line)-1, f)) {
pos = strstr(line, "time=");
if(!pos) continue;
pos += strlen("time=");
time = atof(pos);
printf("%.1f\n", time);
}
fclose(f);
return 0;
}