因此,我需要使用Objective-C读取具有最小(或合理接近最小)内存开销的CSV文件。现在我大致这样做:
NSData *data = [NSData dataWithContentsOfFile:filename];
NSString *fileContents = [NSString stringWithUTF8String:[data bytes]];
NSArray* rowStrings = [fileContents componentsSeparatedByString:@"\r"];
for (NSString* rowString in rowStrings){
//Analyze row here
NSArray* cells = [rowString componentsSeparatedByString:@","];
NSMutableArray* row = [[NSMutableArray alloc] init];
for (NSString* cell in cells){
//Analyze individual cell here
}
}
但这不行,因为它基本上将整个文件加载到内存中并从那里开始走下坡路。我相信我可以使用fscanf来获得我需要的结果,但我无法弄清楚如何做到这一点。我可以在网上找到很多关于fscanf用于读取具有已知数量的“单元格”(逗号分隔值)的文件的示例,但是当我想要使用任意大小的文件时,我找不到任何示例。我认为这应该通过用逗号分隔文件来完成,并且每次发现换行时只是识别它并对它做一些事情,这实际上允许我逐个单元地读取文件,但我不知道如何用fscanf这样做,所以如果有人可以提供帮助那就太好了。
谢谢。