将csv文件标记为两次

时间:2013-03-24 21:44:28

标签: 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

1 个答案:

答案 0 :(得分:0)

欢迎使用StackOverflow。当您提出问题时,请尝试提出问题

然而,在这种情况下,我只是假设你没有得到预期的输出。

问题是strtok在内部存储了您上次呼叫的状态。因此,如果你混合两个不同的解析,那么你将遇到麻烦。

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

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