如何使用双引号内的逗号读取CSV

时间:2014-12-04 10:26:23

标签: ios objective-c csv split

我正在我的项目中实现csv拆分。我可以知道如何在ios中实现CSV分割。例如,我有一个字符串@"一个,\"两个,三个\",四个" 。我需要输出如下所示的数组格式,其中包含3个元素

一个 二三 4

3 个答案:

答案 0 :(得分:0)

您可以使用此代码,但这不是正确的方法:

    NSString *StrDataOfCSV=@"one,\"two,three\",four";
    NSMutableArray * csvArray= [[NSMutableArray alloc]init];
    NSArray * firstSeparated=[StrDataOfCSV componentsSeparatedByString: @"\","];

    for (NSString * strCom in firstSeparated) {
        NSArray * arrCom=[strCom componentsSeparatedByString:@",\""];
        [csvArray addObjectsFromArray:arrCom];

    }

答案 1 :(得分:0)

像这样的事情,以及#34;规范化"您的输入字符串,用新的分隔符替换逗号,您可以保证不会出现在输入中(例如|),并从引用的字段中删除引号:

char *cbCSVRecord = "one,\"two,three\",four";
bool bQuotedField = false;

// normalize
for (int i = 0,j = 0;i < (int)strlen(cbCSVRecord);i++)
{
    if ((cbCSVRecord[i] == '\n') || (cbCSVRecord[i] == '\r'))
        cbCSVRecord[i] = '\0';

    // Not a double quote?  
    if (cbCSVRecord[i] != '"')
    {
          // if a comma NOT within a quoted field, replace with a new separator
          if ((cbCSVRecord[i] == ',') && (!bQuotedField))
               cbCSVRecord[i] = '|';

          // new output
          cbCSVRecord[j] = cbCSVRecord[i];
          j++;
    }
    // Is a double quote, toggle bQuotedField
    else
    {
        if (!bQuotedField)
            bQuotedField = true;
        else
            bQuotedField = false;
    }
}
cbCSVRecord[j] = '\0';

请注意,我粗略地编写了这段代码,它是普通的C代码。它应该工作还是让你非常接近。

输入@&#34;一个,\&#34;两个,三个\&#34;,四个&#34;应该成为@&#34;一个|二,三个|四个&#34;,然后你可以使用:

NSArray *listItems = [list componentsSeparatedByString:@"|"];

答案 2 :(得分:-1)

使用NSString&#39; s componentsSeparatedByString:

NSString *list = @"Karin, Carrie, David";
NSArray *listItems = [list componentsSeparatedByString:@", "];
相关问题