我在哪里可以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.h
和CSVFile.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];