0

我正在尝试读取前两行标有“%”作为第一个字符的文件。我需要忽略这两行,然后读取 4 个单独的整数变量,由未知数量的空格分隔。然后对每一行重复此操作,直到 EOF。我正在尝试使用 fcntl.h 中的 open()。

有没有办法在 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
4

1 回答 1

1

当使用 open()(不是像 fopen() 那样缓冲的库)进行 I/O 时,您希望将所有数据读入 RAM,然后对其进行处理。

  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;
  }
于 2010-11-14T02:24:46.697 回答