带有逗号和双引号内字符串的C CSV行

我正在用C读取一个CSV文件,行格式是这样的:

“Primary,Secondary,Third”,“Primary”,“Secondary”,18,4,0,0,0

(注意空值)

当我做:

while (std::getline(ss, csvElement, ',')) {
   csvColumn.push_back(csvElement);
}

这会将第一个字符串拆分成不正确的部分.

迭代时如何保留字符串?我试图做上面的组合,同时也抓住双引号分隔的行,但我得到了狂野的结果.

你需要解释逗号,这取决于你是否在引用之前.这对于getline()来说太复杂了.

解决方案是使用getline()读取整行,并通过逐字符遍历字符串来解析行,并维护指示符是否在双引号之间.

这是第一个“原始”示例(字段中不删除双引号,并且不解释转义字符):

string line; 
while (std::getline(cin, line)) {        // read full line
    const char *mystart=line.c_str();    // prepare to parse the line - start is position of begin of field
    bool instring{false};                
    for (const char* p=mystart; *p; p++) {  // iterate through the string
        if (*p=='"')                        // toggle flag if we're btw double quote
            instring = !instring;     
        else if (*p==',' && !instring) {    // if comma OUTSIDE double quote
            csvColumn.push_back(string(mystart,p-mystart));  // keep the field
            mystart=p+1;                    // and start parsing next one
        }
    }
csvColumn.push_back(string(mystart));   // last field delimited by end of line instead of comma
}

Online demo

https://stackoverflow.com/questions/35639083/c-csv-line-with-commas-and-strings-within-double-quotes

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:带有逗号和双引号内字符串的C CSV行