2010-11-14 3 views
0

J'essaie de lire un fichier dont les deux premières lignes sont marquées d'un «%» comme premier caractère. J'ai besoin d'ignorer ces deux lignes, puis de lire 4 variables entières séparées, séparées par une quantité inconnue d'espace blanc. Cela se répète ensuite pour chaque ligne jusqu'à EOF. J'essaie d'utiliser open() de fcntl.h.Ignorer les lignes de commentaires marquées de «%» en utilisant open() en C sur Linux

Existe-t-il un moyen de commencer à lire après 2 lignes complètes, puis de séparer les 4 valeurs avec un espace blanc entre elles en 4 variables entières?

C'est un exemple de fichier:

% Input file 
% number time   time2   priority 
0   10    4    2 
1   8    2    1 
2   12    0    5 
3   2    4    4 
+0

Pourquoi utilisez-vous 'open' plutôt que' fopen'? –

Répondre

1

Lorsque vous effectuez E/S en utilisant open() (non bibliothèque en mémoire tampon comme fopen()), vous voulez lire toutes les données dans la RAM, puis le traiter .

int fd = open("file", O_RDONLY); 
    if (fd < 0) { 
    error(); 
    } 
    long size = lseek(fd, 0, 2); 
    lseek(fd, 0, 0); 
    char *data = malloc(size + 2); 
    read(fd, data, size); 
    data[size] = 0; 
    data[size+1] = 0; 
    close(fd); 

Maintenant, analyser le fichier:

char *ptr = data; 
    while (*ptr) { 
    char *end = strchr(ptr, '\n'); 
    if (!end) { 
     end = ptr + strlen(ptr); 
    } 
    *end = 0; 
    if (*ptr != '%') { /* a valid line */ 
     int a, b, c, d; 
     if (4 != sscanf(ptr, " %d %d %d %d", &a, &b, &c, &d)) { 
     error(); 
     } 
     /* do something with the values */ 
    } 
    ptr = end + 1; 
    } 
Questions connexes