【发布时间】:2010-01-22 06:58:17
【问题描述】:
我正在尝试将 CSV 文件的内容放入数组中。当我在每行有一条记录之前完成此操作,并使用带有scanUpToCharactersFromSet:intoString: 的换行符,将newlineCharacterSet 作为字符集传递:
while ([lineScanner scanUpToCharactersFromSet:[NSCharacterSet newlineCharacterSet]
intoString:&line])
现在,我正在处理一个文件,其中许多条目本身都包含换行符。我尝试在每条记录的末尾添加一个唯一字符(* 字符),但我的循环只运行一次。有什么东西让我不知道while循环中断吗?这是我现在使用的代码:
NSError *error;
NSString *data = [[NSString alloc] initWithContentsOfFile:[[self delegate] filePath] encoding:NSUTF8StringEncoding error:&error];
NSScanner *lineScanner = [NSScanner scannerWithString:data];
NSString *line = nil;
// Start parsing the CSV file
while ([lineScanner scanUpToCharactersFromSet:[NSCharacterSet characterSetWithCharactersInString:@"*"]
intoString:&line]) {
NSArray *elements = [line componentsSeparatedByString:@","];
NSLog("Name: %@", [elements objectAtIndex:1]);
}
**编辑:**感谢彼得在下面的回答,我发现我的扫描仪卡在 * 字符后面。我在循环中添加了这一行:
[lineScanner scanCharactersFromSet:[NSCharacterSet characterSetWithCharactersInString:@"*"] intoString:NULL];
现在它可以正常工作了。
【问题讨论】:
-
您不需要 * 分隔符。您可以很好地扫描纯换行符(现在您的循环已修复)。
标签: objective-c csv cocoa lexical-analysis