2010-11-14 5 views
0

Я пытаюсь прочитать файл, который имеет первые две строки, помеченные знаком «%» в качестве первого символа. Мне нужно игнорировать эти две строки, а затем читать 4 отдельных целочисленных переменных, разделенных неизвестным количеством пробелов. Затем это повторяется для каждой строки до EOF. Я пытаюсь использовать open() из fcntl.h.Игнорирование строк комментариев с пометкой «%» с помощью open() в C on linux

Есть ли способ начать чтение после 2 полных строк, а затем отделить 4 значения с пробелом между ними в 4 целочисленных переменных?

Это образец файла:

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

Почему вы используете 'open' вместо' fopen'? –

ответ

1

При выполнении ввода/вывода с использованием открытых() (не библиотека буферном как Еореп()), вы хотите, чтобы прочитать все данные в оперативной памяти, а затем обработать его ,

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); 

Теперь разбор файла:

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; 
    }