2014-01-23 19 views
0

我试图检索到NSString的csv文件的内容。这就是我所做的:CSV到NSString结果为空的空对象

NSString *strBundle = [[NSBundle mainBundle] pathForResource:@"socs" ofType:@"csv"]; 
NSLog(@"bundle path: %@",strBundle); 
NSString *file = [NSString stringWithContentsOfFile:strBundle 
                encoding:NSUTF8StringEncoding 
                error:nil]; 
    if ([[NSFileManager defaultManager]fileExistsAtPath:strBundle]) { 
     NSLog(@"file is there!!!"); 
    }else { 
     NSLog(@"no file"); 
    } 
    NSLog(@"file: %@",file); 
    NSArray *allLines = [file componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]]; 
    NSLog(@"lines: %lu",(unsigned long)[allLines count]); 

文件管理器显示该文件在那里。当我尝试记录NSString或文件数量时,它会显示为空。我甚至创建了NSData对象,其内容完全相同,当我记录NSData对象时,我清楚地看到有一些数据。然后,当我尝试创建带有NSData内容的NSString时,我的结果与之前一样 - null。也许问题出在格式化文件的某个地方?

任何帮助将不胜感激:)

+0

您的CSV文件有多大? – random

+3

你认为你选择忽略的错误信息是什么? –

回答

2

我看到3个问题:

  1. 你传递一个nil参数传递给error:参数在stringWithContentsOfFile:线。如果有可能出现问题(显然存在问题),那么您应该在那里通过一个真实的论证,以便您能够找出问题所在。

  2. 您可以使用componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet],但有一种趋势是在每行之间产生空白“组件”。几乎在所有我遇到的情况下,普通旧@"\n"的效果更好。

  3. 您应该检查fileExistsAtPath尝试如果你是真正能够创造从路径的NSData对象将其加载到NSString

  4. 之前它并不一定意味着它是正确的数据。但是,让我们假设,如果您无法将其转换为NSString,那么您需要检查编码参数。

+0

好的,我不知道当我通过nil出错时我在想什么。格式化确实存在错误。什么只是用textwrangler打开文件,并用utf-8格式保存。它解决了这个问题,很简单:)你的帖子很有帮助,所以我将其标记为已解决,谢谢:) – repoguy