请告知 libcsv。我只需要阅读第一行

问题描述 投票:0回答:1

我已成功使用

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
解析器操作模式有什么建议吗?

c csv
1个回答
1
投票

既然你已经准备好了struct count的成员

rows
,你可以这样写

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

在您的

cb_f()
函数中。

您可以参考OpenModelica查看

libcsv
库的应用。

© www.soinside.com 2019 - 2024. All rights reserved.