Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 为什么数组中的其他对象都是空的?_Objective C_Csv_Nsstring_Nsarray - Fatal编程技术网

Objective c 为什么数组中的其他对象都是空的?

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

我使用以下命令将CSV文件读入数组:

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时做额外的工作。