我正在我的项目中实现csv拆分。我可以知道如何在ios中实现CSV分割。例如,我有一个字符串@"一个,\"两个,三个\",四个" 。我需要输出如下所示的数组格式,其中包含3个元素
一个 二三 4
答案 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:@", "];