请使用libcsv提供建议,我只需要读取第一行

f87krz0w  于 2023-04-03  发布在  其他
关注(0)|答案(1)|浏览(83)

我已经成功地使用libcsv来解析CSV文件。我告诉你,使用起来又快又简单。但现在出现了一种情况,我有点卡住了。能够解析整个文件,现在我只需要解析第一行。
我的基本用法(离官方文档不远)如下:

typedef struct data_t {
 <...>
} data_t;
...
void cb_f(void *s, size_t len, void *data) {
...
}
void cb_r(int c, void *data) {
 ((counts*)data)->rows++;
}
...
struct csv_parser  p;
data_t             data;
...
if(csv_parse(&p, buf, fsize, cb_f, cb_r, &data) != fsize) {
 fprintf(stderr, " * while parsing file: %s\n", csv_strerror(csv_error(&p)) );
 return 1;
}
...
csv_fini(&p, NULL, NULL, NULL);

现在,我需要在解析器处理完CSV文件的第一行后停止解析器。我确实尝试在行回调cb_r中调用csv_fini(&p, NULL, NULL, NULL);。不幸的是,解析器只有在解析完整个缓冲区后才停止。
有没有关于如何更改libcsv解析器操作模式的建议?

j8yoct9x

j8yoct9x1#

由于您已经准备好了struct count的rows成员,因此可以编写

if ((count *)data->rows) == 0) {
  ...
} else {
  return;
}

cb_f()函数中。
您可以参考OpenModelica来查看libcsv库的应用程序。

相关问题