我正在寻找一种易于使用的Objective-C CSV解析器,以便在iPhone上使用。我在哪里可以找到一个?
我也在寻找其他解析器,例如JSON,所以也许某处有转换库。
答案 0 :(得分:51)
我终于开始清理我在代码文件夹中的解析器并将其发布到Github上:http://github.com/davedelong/CHCSVParser
这是非常彻底的。它处理各种转义方案,字段中的换行符,注释等。它还使用智能文件加载,这意味着您可以在受限的内存条件下安全地解析大文件。
答案 1 :(得分:17)
这是NSString上的一个简单类别,用于解析在引号块中嵌入逗号的CSV字符串。
#import "NSString+CSV.h"
@implementation NSString (CSV)
- (NSArray *)componentsSeparatedByComma
{
BOOL insideQuote = NO;
NSMutableArray *results = [[NSMutableArray alloc] init];
NSMutableArray *tmp = [[NSMutableArray alloc] init];
for (NSString *s in [self componentsSeparatedByString:@","]) {
if ([s rangeOfString:@"\""].location == NSNotFound) {
if (insideQuote) {
[tmp addObject:s];
} else {
[results addObject:s];
}
} else {
if (insideQuote) {
insideQuote = NO;
[tmp addObject:s];
[results addObject:[tmp componentsJoinedByString:@","]];
tmp = nil;
tmp = [[NSMutableArray alloc] init];
} else {
insideQuote = YES;
[tmp addObject:s];
}
}
}
return results;
}
@end
这假设您已将CSV文件读入数组:
myArray = [myData componentsSeparatedByString:@"\n"];
代码不考虑转义引号,但可以轻松扩展为。
答案 2 :(得分:8)
快速执行此操作:
NSString *dataStr = [NSString stringWithContentsOfFile:@"example.csv" encoding:NSUTF8StringEncoding error:nil];
NSArray *array = [dataStr componentsSeparatedByString: @","];
答案 3 :(得分:5)
嗯,以上简单的解决方案没有考虑多个记录。 使用以下代码读取默认的Excel Excel,使用ASCI 13作为行结束标记:
NSString *content = [NSString stringWithContentsOfFile:filepath encoding:NSUTF8StringEncoding error:nil];
NSArray *contentArray = [content componentsSeparatedByString:@"\r"]; // CSV ends with ACSI 13 CR (if stored on a Mac Excel 2008)
for (NSString *item in contentArray) {
NSArray *itemArray = [item componentsSeparatedByString:@";"];
// log first item
NSLog(@"%@",[itemArray objectAtIndex:0]);
}
答案 4 :(得分:3)
我为我正在处理的项目写了一个简单的(尽管不是功能齐全的)CSV解析器:CSVFile.h
和CSVFile.m
。随意抓住它 - 代码可以在GPLv3下获得(不幸的是,这是我正在进行的项目的要求)但我很乐意根据MIT许可证或其他许可证向您授权。
答案 5 :(得分:1)
这似乎是迄今为止我发现的最全面的。
http://www.macresearch.org/cocoa-scientists-part-xxvi-parsing-csv-data
作为旁注,您认为大多数主要语言(Delphi,C#,Objective-c,php等)都有一个库,可以完全实现这种基本数据交换格式。
我知道json很酷且XML很可靠但是大多数应用程序都没有保存表格数据的保存选项。 CSV仍然是。
答案 6 :(得分:0)
几周前我找到了ParseKit
但对于大多数案例-[NSString componentsSeparatedByString:]
方法和NSScanner
,恕我直言绰绰有余且非常容易使用。
答案 7 :(得分:-2)
正如xmr上面所述:在Objective C中可以将NSString csv转换为'由string'数组分隔的组件。
NSArray* items;
items=[bufferString componentsSeparatedByString:@","];
如果您对csv导出感兴趣已经到达此线程 - 正如我所做的那样 - 这里是我如何导出csv文件的摘录。
NSString* fileName = @"Level";
fileName = [fileName stringByAppendingString:levelNumberBeingEdited];
fileName = [fileName stringByAppendingString:@".txt"];
NSString* bufferString=@"";
通过循环遍历每个数据项(未显示)并在每个数据项之间插入逗号来填充缓冲区字符串。最后它被导出了。
NSString* homeDir = NSHomeDirectory();
NSString* fullPath = [homeDir stringByAppendingPathComponent:fileName];
NSError* error = nil;
[bufferString writeToFile:fullPath atomically:NO encoding:NSASCIIStringEncoding error:&error];