我已经成功地使用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
解析器操作模式的建议?
1条答案
按热度按时间j8yoct9x1#
由于您已经准备好了struct count的
rows
成员,因此可以编写在
cb_f()
函数中。您可以参考OpenModelica来查看
libcsv
库的应用程序。