gpt4 book ai didi

objective-c - scanUpToCharactersFromSet 在一个循环后停止

转载 作者:搜寻专家 更新时间:2023-10-30 20:23:38 24 4
gpt4 key购买 nike

我正在尝试将 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];

现在它可以正常工作了。

最佳答案

让我们一次过一遍:

  1. 首先:

    while ([lineScanner scanUpToCharactersFromSet:[NSCharacterSet characterSetWithCharactersInString:[NSCharacterSet newlineCharacterSet]] intoString:&line]) {

    扫描器将换行符之前的所有内容放入。它前进到换行符。

  2. 第二个:

    while ([lineScanner scanUpToCharactersFromSet:[NSCharacterSet characterSetWithCharactersInString:[NSCharacterSet newlineCharacterSet]] intoString:&line]) {

    扫描仪已经换行,所以它不扫描任何字符。 As documented ,因为它没有扫描任何字符,所以它返回 NO。你的循环终止。

解决方案是scan the line break在循环结束时,让扫描仪通过它。假设您不关心换行符是什么,您可以为输出参数传递 NULL

这是正确的行为:如果你确实/确实关心你扫描到的字符是什么,这可以让你获得它们。如果 NSScanner 自动扫描过去的字符,那将更加困难。

关于objective-c - scanUpToCharactersFromSet 在一个循环后停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2115599/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com