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 不导入数据的主要内容,如果未能解决你的问题,请参考以下文章

ACCESS突然导入不了excel数据了

oracle不删除原来的数据库 导入新的数据库

向oracle数据库导入数据不成功

oracle用imp导入用户数据时,提示表或视图不存在

C#把ACCESS数据导入SQL ,我不需要工具导入,是代码导入,最好有例子,新手分不多,有例子可以发给我

给mysql数据库的某个表导入新数据,怎么才能不覆盖原来的表呢,急!!!!!!!!!