c - 对 csv 文件进行两次标记

标签 c csv tokenize strtok

我在 C 中使用 strtok() 来解析 csv 字符串。

我的示例字符串是:

str= "name1 secondname1 cin,name2 secondname2 cin"

我首先使用带有分隔符“,”的 strtok,然后使用“”分隔字符串。

char delims1[] = ",";
char delims2[] = " ";
char *result1 = NULL;
char *result2 = NULL;

result1 = strtok(str, delims1);

while ( result1 != NULL ) {

    result2 = strtok(result1,delims2);

    while ( result2 != NULL ) {
        printf("%s\n" ,result2);

    }

    result1 = strtok(NULL, delims1);
}     

预期结果是:

name1
secondname1 
cin
name2
secondname2
cin

最佳答案

欢迎来到 StackOverflow。当您提出问题时,请尝试实际提出问题

但是,在这种情况下,我将假设您没有获得预期的输出。

问题是 strtok 在内部存储您上次调用的状态。所以如果你混合两种不同的解析那么你就会遇到麻烦。

C 库的 Microsoft 实现提供了 strtok_s,它允许您传入状态变量。如果您正在使用该编译器,请切换到使用该函数。否则您可能需要自己编写。

或者,您可以一次性标记每一列并将指针存储在数组中。然后进行第二遍并对数组中的每个字符串进行标记。

关于c - 对 csv 文件进行两次标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15604395/

相关文章:

c - 为指针及其数据分配的内存在哪里?

c++ - 找不到reducer_min_index的calc_min函数

mysql - 使用绝对 URL 加载 MySQL 文件中的数据

python - 使用复合键从字典写入 csv 文件

java - XML/Java : Precise line and character positions whilst parsing tags and attributes?

javascript - 如何将字符串拆分为单词和数字?

c - 如何告诉 GNU MAKE 将 .po 文件视为 .h 文件?

c - 使用C返回数组

javascript - 使用 JQuery 将 Yahoo 联系人表转换为 CSV 文件的小书签

solr - 有没有办法在使用 Solr 同义词时更多地提升原始术语?