2011-12-25 56 views
7

我讀一個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 20,107,224,422,867,1299,2501,3986,7047,14374

與10和20是開始每一條新線。

在此先感謝。

編輯 我嘗試使用下面的代碼來代替:

NSArray *tableRows = [theWholeTable componentsSeparatedByString:@"\n"]; 

這工作,我希望它太的方式。

雖然我仍然不確定爲什麼newlineCharacterSet創建空的對象......

+3

您的CSV文件是否來自Windows計算機? – dasblinkenlight 2011-12-25 04:08:13

回答

9

如果您CSV文件來自非UNIX系統,它可以包含多個行分隔符(例如的替代\r\n\n)。在這種情況下,componentsSeparatedByCharactersInSet將在\r\n之間插入空字符序列的空字符串。

您可以從NSArray使用這種方法去除空字符串:

tableRows = [tableRows filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"length > 0"]]; 
+0

好的,謝謝你的解釋,這是有道理的。這個特定的CSV然後是TXT文件是使用Apple Numbers從一張簡單的表格創建的。我試圖找到某些東西來顯示文件中的格式標籤,但無濟於事。還要感謝謂詞提示,這會派上用場。 – 2011-12-25 21:02:41

+0

令人敬畏的1班輪,使蘋果的方法調用行爲的方式,你需要它的時間到90%,謝謝。 – Adam 2013-02-12 20:26:53

+0

我認爲使用newLineCharacterSet的全部原因是爲了處理所有行結束符(windows,apple legacy,linux和intel mac)?如果你知道你的數據是一個操作系統專用的,那麼你可以使用characterSetWithCharactersInString:@「\ n」 – Miek 2013-03-08 20:01:30

1

來解決這個問題,我用另一種方式:

NSArray *tableRows = [theWholeTable componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"\n"]] 

所以你不需要刪除任何行。

相關問題