0

最初の文字として「%」でマークされた最初の 2 行を含むファイルを読み込もうとしています。これら 2 行を無視して、不明な量の空白で区切られた 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 に答える