我在哪里可以find一个CSV到Objective-C的NSArrayparsing器?

我正在寻找一个易于使用的CSVparsing器Objective-C在iPhone上使用。 我在哪里可以find一个?

我也在寻找其他parsing器,如JSON,所以也许有一个转换库的地方。

我终于清理了我的代码文件夹中的parsing器,并将其发布到Github上: http : //github.com/davedelong/CHCSVParser

这是相当彻底的。 它处理各种转义scheme,字段中的换行符,注释等。它还使用智能文件加载,这意味着您可以安全地parsing内存条件受限的大文件。

下面是NSString的一个简单类别,用于parsingembedded在引号块内的逗号的CSVstring。

 #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"]; 

该代码不包括转义报价,但它可以很容易地扩展到。

快速的方法来做到这一点:

NSString *dataStr = [NSString stringWithContentsOfFile:@"example.csv" encoding:NSUTF8StringEncoding error:nil];
NSArray *array = [dataStr componentsSeparatedByString: @","];

那么,上面简单的解决scheme不考虑多个logging。 使用以下代码读取使用ASCI 13的默认excel CSV作为行结束标记:

 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]); } 

我为我正在处理的一个项目编写了一个简单的(尽pipe不是全function的)CSVparsing器: CSVFile.hCSVFile.m 。 随意抓住它 – 代码是在GPLv3下(不幸的是,这是我正在进行的项目的要求),但我很乐意根据MIT许可证或其他许可证授权给您。

这似乎是迄今为止我发现的最全面的。

http://www.macresearch.org/cocoa-scientists-part-xxvi-parsing-csv-data

作为一个侧面说明,你会认为大多数主要的语言(delphi,C#,Objective-C,PHP等)将有一个可用的库,充分实现这种基本的数据交换格式。

我知道JSON是很酷的,XML是可靠的,但是大多数应用程序保存表数据都不能作为保存选项。 CSV仍然是。

几个星期前我发现了ParseKit,但对于大多数情况下,恕我直言-[NSString componentsSeparatedByString:]方法和NSScanner是绰绰有余和相当容易使用。

正如前面所说的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=@""; 

缓冲区string通过循环遍历每个数据项(未显示)并在每个数据项之间插入逗号来填充。 最后它被导出。

  NSString* homeDir = NSHomeDirectory(); NSString* fullPath = [homeDir stringByAppendingPathComponent:fileName]; NSError* error = nil; [bufferString writeToFile:fullPath atomically:NO encoding:NSASCIIStringEncoding error:&error];