我正在尝试解析大约 30K 行的 .csv 文件。以下是我的代码:
NSString *pathToGameLibrary = [[NSBundle mainBundle] pathForResource:@"GameLibrarySample" ofType:@"csv"];
NSArray *gameLibraryData = [NSArray arrayWithContentsOfCSVFile:pathToGameLibrary];
在此执行结束时,gameLibraryData 为 nil。
我可以确认路径和 csv 文件都是有效的,因为以下代码向控制台输出了 30,000 行数据:
NSString *pathToGameLibrary = [[NSBundle mainBundle] pathForResource:@"GameLibrarySample" ofType:@"csv"];
NSString *fileString = [NSString stringWithContentsOfFile:pathToGameLibrary encoding:NSUTF8StringEncoding error:nil];
NSLog(@"%@", fileString);
因为这段代码不起作用,我认为失败与 csv 文件的长度有关。在较早的问题中,CHCSV 的作者 Dave DeLong 建议:
“如果这是一个非常大的文件,那么您需要分配/初始化一个带有 CSV 文件本地副本路径的 CHCSVParser。”
所以......我试图遵循原始海报尝试使用此代码的内容:
NSString *pathToGameLibrary = [[NSBundle mainBundle] pathForResource:@"GameLibrarySample" ofType:@"csv"];
CHCSVParser *file = [[CHCSVParser alloc] initWithContentsOfCSVFile:pathToGameLibrary];
[file setDelegate:self];
此时启用数据检索的方法回调是:
- (void)parserDidBeginDocument:(CHCSVParser *)parser;
- (void)parserDidEndDocument:(CHCSVParser *)parser;
- (void)parser:(CHCSVParser *)parser didBeginLine:(NSUInteger)recordNumber;
- (void)parser:(CHCSVParser *)parser didEndLine:(NSUInteger)recordNumber;
- (void)parser:(CHCSVParser *)parser didReadField:(NSString *)field atIndex:(NSInteger)fieldIndex;
- (void)parser:(CHCSVParser *)parser didReadComment:(NSString *)comment;
- (void)parser:(CHCSVParser *)parser didFailWithError:(NSError *)error;
感谢 yonosoytu 的帮助。
关于主题编辑后的问题:那么什么算作“非常大的文件”呢?在什么时候使用简单的“arrayWithContentsofCSVFile”委托是谨慎的?