Objective c 为什么数组中的其他对象都是空的?
我使用以下命令将CSV文件读入数组:Objective c 为什么数组中的其他对象都是空的?,objective-c,csv,nsstring,nsarray,Objective C,Csv,Nsstring,Nsarray,我使用以下命令将CSV文件读入数组: NSString *theWholeTable = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"example" ofType:@"csv"] encoding:NSUTF8StringEncoding
NSString *theWholeTable = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"example" ofType:@"csv"]
encoding:NSUTF8StringEncoding
error:NULL];
NSArray *tableRows = [theWholeTable componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
数组中的每一秒都是空的,知道为什么吗
CSV文件数据如下所示:
10,156,326,614,1261,1890,3639,5800,10253,20914
20107224422867129925013986704714374
10和20是每条新线的起点
提前谢谢
编辑
我尝试使用以下代码:
NSArray *tableRows = [theWholeTable componentsSeparatedByString:@"\n"];
这也是我想要的
尽管我仍然不确定newlineCharacterSet为什么会创建空对象…如果您的
CSV
文件来自非UNIX系统,它可能包含多个行分隔符(例如\r\n
而不是\n
)。在这种情况下,组件通过charactersInSet
将在\r
和\n
之间插入空字符序列的空字符串
您可以使用以下方法从NSArray
中删除空字符串:
tableRows = [tableRows filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"length > 0"]];
为了解决这个问题,我使用了其他方法:
NSArray *tableRows = [theWholeTable componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"\n"]]
因此,您不需要删除任何行。您的
CSV
文件是否碰巧来自Windows计算机?啊,好的,谢谢您的解释,这很有意义。这个特殊的CSV和TXT文件是使用Apple数字从一个简单的表中创建的。我试图找到一些东西来显示文件中的格式标记,但没有结果。同时也感谢谓词提示,这将派上用场。让Apple的方法调用在90%的时间内按您需要的方式运行的很棒的1行程序,谢谢。我认为使用newLineCharacterSet的全部原因是为了处理所有的行尾(windows、Apple legacy、linux和intel mac)??如果您知道您的数据是一个操作系统独有的,那么您可以使用characterSetWithCharactersInString:@“\n”@Miek这不是特定于OS:OP的字符集的问题:OP的字符集正确地将\n
和\r
都识别为分隔符,但它将它们视为两个分隔符,而不是一个。这就是问题的根源。@dasblinkenlight是的,这就是我的意思;我相信windows下线字符是\r\n或visa vesa。我想说的是,newLineCharacterSet应该考虑到这一点,而不是创建空行。如果它不能,那么它就不是我认为它是的方法,并且我需要在进行parshing时做额外的工作。