我有带有格式的csv:
a1, a2, a3, "a4,a5", a6
只有带 , 的字段才会有引号
使用Objective-C,如何轻松解析这个?我尽量避免使用开源 CSV 解析器作为公司政策。谢谢。
我有带有格式的csv:
a1, a2, a3, "a4,a5", a6
只有带 , 的字段才会有引号
使用Objective-C,如何轻松解析这个?我尽量避免使用开源 CSV 解析器作为公司政策。谢谢。
我同意 rmaddy 的观点,即完整的 csv 解析算法超出了 SO 的范围,但是,这是解决此问题的一种可能方法:
NSString
NSString
,将每个字符推回另一个字符串。这通常适用于任何语言(使用它们各自的本机字符串类),并且这种算法可以构成完整 CSV 解析器的小基础。但是,在这种特殊情况下,您可能不需要比这更多的功能。
对于一些示例代码,我鼓励您查看我对这个与 CSV 相关的问题的回答,因为它演示了一种在 Objective-C 中拆分和存储字符串的方法。
这个片段对我来说非常有用......
BOOL quotesOn = false;
NSString* line = @"a1, a2, a3, "a4,a5", a6";
NSMutableArray* lineParts = [[NSMutableArray alloc] init];
NSMutableString* linePart = [[NSMutableString alloc] init];
for (int i = 0; i < line.length; i++)
{
unichar current = [line characterAtIndex: i];
if (current == '"')
{
quotesOn = !quotesOn;
continue;
}
if (!quotesOn && current == ',')
{
if (linePart.length > 0)
[lineParts addObject: linePart];
linePart = [[NSMutableString alloc] init];
}
if (quotesOn || current != ',')
[linePart appendString: [line substringWithRange: NSMakeRange(i, 1)]];
}
if (linePart.length > 0)
[lineParts addObject: linePart];
我的 5 个元素在 lineParts 数组中......