NSScanner 不导入数据
Posted
技术标签:
【中文标题】NSScanner 不导入数据【英文标题】:NSScanner not importing data 【发布时间】:2010-09-26 11:27:24 【问题描述】:我正在尝试将 csv 文件中的一组默认数据加载到我的核心数据数据库中。所以最初我试图读取一个 csv 文件并将其输出到日志中,然后再尝试将其添加到核心数据数据库中。
这是我正在使用的代码;
//Find import file;
NSString *defaultCSVPath = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"csv"];
//Get the data into a string
NSString *fileString = [NSString stringWithContentsOfFile:defaultCSVPath encoding:NSUTF8StringEncoding error:nil];
if ( nil == fileString )
NSLog(@"Could not open file data.csv");
abort();
// Create the scanner
NSScanner *scanner = [NSScanner scannerWithString:fileString];
// Ignore new lines
[scanner setCharactersToBeSkipped:
[NSCharacterSet characterSetWithCharactersInString:@"\n"]];
NSString *sNumber = @"";
NSString *sTitle = @"";
//Gets to here and this expression is never TRUE
while ( [scanner scanString:@"," intoString:&sNumber] && [scanner scanString:@"," intoString:&sTitle])
NSLog(@"sNumber:%@ sTitle:%@",sNumber,sTitle);
我使用的样本数据是;
A15Q,Test1
F74443AAZ,Test2
当我跟踪代码时,我到达了 while 子句,它只是跳过它。
【问题讨论】:
【参考方案1】:不确定为什么将 sNumber 和 sTitle 初始化为 @""; nil 是一个更好的默认值(或者你可以不初始化它们)。
[scanner scanString:@"," intoString:&foo]
期望看到一个逗号并返回 foo
中的逗号(这样做是为了保持一致性和(我认为)Unicode wotsits)。
你可能想做更多这样的事情:
-
阅读逗号前的所有内容。
跳过逗号。
阅读换行符之前的所有内容。
跳过换行符。
(出于某种原因,我需要在此处粘贴一些内容才能使格式正常工作。)
while (
[scanner scanUpToStringString:@"," intoString:&sNumber]
&& [scanner scanString:@"," intoString:NULL]
&& [scanner scanUpToString:@"\n" intoString:&sTitle]
&& [scanner scanString:@"\n" intoString:NULL]
)
NSLog(@"sNumber:%@ sTitle:%@",sNumber,sTitle);
假设您正在尝试解析 CSV,这有其自身的问题:
您可能希望将 \r\n 视为换行符。 它不能干净地处理空行或没有逗号的行。 它不处理带引号的字符串(例如"a,b","c,d,e,f"
)。
【讨论】:
谢谢。完美运行。上面的例子中有一个小错字scanUpToStringString 应该是scanUpToString。另外,就我而言,我必须将换行符更改为 \r以上是关于NSScanner 不导入数据的主要内容,如果未能解决你的问题,请参考以下文章