2011-12-25 5 views
7

は、私が使用して配列にCSVファイルを読み込む:配列内の他のすべてのオブジェクトが空白なのはなぜですか?

NSString *theWholeTable = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"example" ofType:@"csv"] 
                encoding:NSUTF8StringEncoding 
                 error:NULL]; 
NSArray *tableRows = [theWholeTable componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]]; 

し、アレイ内のすべての第二の目的は、任意のアイデアなぜ空のですか? 10と20が開始されて 10,156,326,614,1261,1890,3639,5800,10253,20914 20,107,224,422,867,1299,2501,3986,7047,14374

CSVファイルのデータは次のようになりますそれぞれの新しい行。

ありがとうございます。

編集 私の代わりに次のコードを使用してみました:

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

そして、それは私があまりにもそれを望んでいた道を働きました。あなたのCSVファイルは非UNIXシステムから来る場合

newlineCharacterSetは空のオブジェクトを作成した理由を、私はまだわからないよものの

...

+3

あなたの 'CSV'ファイルは、おそらくWindowsコンピュータから来ていますか? – dasblinkenlight

答えて

9

は、それが(例えば\r\n代わり\nの)複数行区切りが含まれていてもよいです。この場合、componentsSeparatedByCharactersInSetは、空の文字列の空の文字列を\r\nの間に挿入します。

あなたは、このメソッドを使用してNSArrayから空の文字列を削除することができます。

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

ああ、説明のおかげで、それは理にかなっています。この特定のCSVとTXTファイルは、Apple Numbersを使用して簡単なテーブルから作成されました。私は無用にファイルの書式タグを表示するために何かを見つけることを試みていた。また、述語のチップもありがとう、それは便利です。 –

+0

アップルのメソッド呼び出しを、時間の90%に必要な方法で動作させるための素晴らしい1行です。ありがとうございます。 – Adam

+0

私はnewLineCharacterSetを使う理由は、すべての行末が(ウィンドウ、リンゴのレガシー、linux、およびIntel mac)に対応していると思ったのですか?あなたのデータが1つのオペレーティングシステムに限定されていると分かっているなら、characterSetWithCharactersInStringを使うことができます:@ "\ n" – Miek

1

この問題を解決するために、私は他の方法を使用しています

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

だから、任意の行を削除必要はありません。

関連する問題