我已成功使用
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
文件的第一行后以某种方式停止它。
我确实尝试尽早在行回调中调用 csv_fini(&p, NULL, NULL, NULL);
,cb_r
。不幸的是,解析器仅在解析整个缓冲区后才停止。
关于如何更改
libcsv
解析器操作模式有什么建议吗?
既然你已经准备好了struct count的成员
rows
,你可以这样写
if ((count *)data->rows) == 0) {
...
} else {
return;
}
在您的
cb_f()
函数中。
您可以参考OpenModelica查看
libcsv
库的应用。