2011-12-25 12 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

क्या आपकी 'सीएसवी' फ़ाइल किसी भी कंप्यूटर से किसी भी कंप्यूटर से आ रही है? – dasblinkenlight

उत्तर

9

अपने CSV फ़ाइल एक गैर यूनिक्स प्रणाली से आता है, यह कई पंक्ति विभाजक (\n की जैसे \r\n बजाय) हो सकती है। इस मामले में, componentsSeparatedByCharactersInSet\r और \n के बीच खाली वर्ण अनुक्रमों के लिए खाली तार डालेंगे।

आप इस पद्धति का उपयोग NSArray से रिक्त स्ट्रिंग निकाल सकते हैं:

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

आह ठीक है, स्पष्टीकरण के लिए धन्यवाद, यह समझ में आता है। यह विशेष सीएसवी और फिर TXT फ़ाइल ऐप्पल नंबर का उपयोग करके एक साधारण तालिका से बनाई गई थी। मैं फ़ाइल में फ़ॉर्मेटिंग टैग दिखाने के लिए कुछ खोजने का प्रयास नहीं कर रहा था। और predicate टिप के लिए भी धन्यवाद, कि काम में आ जाएगा। –

+0

ऐप्पल की विधि कॉल करने के लिए बहुत बढ़िया 1-लाइनर जिस तरह से आपको 90% समय की आवश्यकता है, धन्यवाद। – Adam

+0

मैंने सोचा था कि newLineCharacterSet का उपयोग करने का पूरा कारण यह था कि सभी लाइन समाप्ति (विंडोज़, सेब विरासत, लिनक्स और इंटेल मैक) के साथ निपटाया गया था ?? यदि आप जानते हैं कि आपका डेटा एक ऑपरेटिंग सिस्टम के लिए अनन्य है, तो आप केवल characterSetWithCharactersInString का उपयोग कर सकते हैं: @ "\ n" – Miek

1

इस समस्या को हल करने के लिए, मैं का इस्तेमाल किया है दूसरा रास्ता:

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

तो आप किसी भी लाइनों को हटाने की जरूरत नहीं होगी।