2012-04-18 10 views
5

का उपयोग कर एक सीएसवी फ़ाइल से एक ऐरे बनाना, मैं कोडिंग के लिए नया हूं इसलिए कृपया मुझे क्षमा करें यदि यह एक साधारण प्रश्न की तरह लगता है।उद्देश्य सी

मैं मानचित्र पर निर्देशांक साजिश करने की कोशिश कर रहा हूं।

मैं एक सीएसवी फ़ाइल पढ़ना चाहता हूं और जानकारी को दो अलग-अलग सरणी में भेजना चाहता हूं।

पहली सरणी NSArray * towerInfo हो जाएगा (युक्त अक्षांश, देशांतर और टावर शीर्षक)

दूसरा, NSArray * पहली सरणी के रूप में ही गिनती सूचकांक के साथ क्षेत्र (युक्त टावर शीर्षक और क्षेत्र)।

अनिवार्य रूप से, मुझे विश्वास है कि मुझे इसकी आवश्यकता है;

1) एक स्ट्रिंग के लिए फ़ाइल .....

2) हर पर अलग करने के लिए एक अस्थायी सरणी/एन/आर में स्ट्रिंग को विभाजित ......

3) पाश पढ़ temp सरणी के माध्यम से और इस जानकारी को दो मुख्य भंडारण सरणी में जोड़ने से पहले हर बार एक टावर और क्षेत्र वस्तु बनाएँ।

क्या यह सही प्रक्रिया है और यदि ऐसा कोई है तो वहां कोई भी नमूना कोड पोस्ट कर सकता है क्योंकि मैं वास्तव में यह अधिकार प्राप्त करने के लिए संघर्ष कर रहा हूं।

सभी को अग्रिम धन्यवाद।

क्रिस।

मैंने इसे अपने कोड का एक उदाहरण दिखाने के लिए संपादित किया है। मुझे समस्या है कि मुझे चेतावनी मिल रही है कि

1) "डेटाएसआरआर 'की स्थानीय घोषणा उदाहरण चर को छुपाती है। 2)" सरणी' की स्थानीय घोषणा उदाहरण चर को छुपाती है।

मुझे लगता है कि मैं समझता हूं कि ये क्या मतलब है लेकिन मुझे नहीं पता कि इसके आसपास कैसे जाना है। कार्यक्रम संकलित करता है और चलता है लेकिन लॉग मुझे बताता है कि "सरणी शून्य है।"

#import "ViewController.h" 

@interface ViewController() 

@end 

@implementation ViewController 

@synthesize dataStr; 
@synthesize array; 

-(IBAction)convert { 
//calls the following program when the onscreen 'convert' button is pressed. 

    NSString *dataStr = [NSString stringWithContentsOfFile:@"Towers.csv" encoding:NSUTF8StringEncoding error:nil]; 
    //specifies the csv file to read - stored in project root directory - and encodes specifies that the format of the file is NSUTF8. Choses not to return an error message if the reading fails 

    NSArray *array = [dataStr componentsSeparatedByString: @","]; 
    //splits the string into an array by identifying data separators. 

    NSLog(@"array: %@", array); 
    //prints the array to screen 

} 

कोई अतिरिक्त सहायता की सराहना की जाएगी। अब तक के उत्तरों के लिए धन्यवाद।

+0

पहले आप अपनी तरफ से कुछ बात करना है और यदि u अटक जहां उन की कोशिश करता बीच कुछ पोस्ट कोड और फिर हम आपकी कोशिशों के साथ बहुत अच्छी किस्मत में आपकी मदद कर सकते हैं –

+0

क्या आप सीएसवी फ़ाइल की कुछ उदाहरण पंक्तियां दे सकते हैं और बता सकते हैं कि जानकारी कहां है? – NSGod

उत्तर

6
NSString* fileContents = [NSString stringWithContentsOfURL:filename ...]; 
NSArray* rows = [fileContents componentsSeparatedByString:@"\n"]; 
for (... 
    NSString* row = [rows objectAtIndex:n]; 
    NSArray* columns = [row componentsSeparatedByString:@","]; 
... 

आप शायद कुछ "stringTrimmingCharactersInSet" कॉल में डाइट्स स्पेस को ट्रिम करने के लिए फेंकना चाहते हैं।

0

मुझे लगता है कि आपके प्रश्न का मूल "सीएसवी फ़ाइल को कैसे पार्स करना है" नहीं, "डेटा के साथ क्या किया जाए इसके बाद क्या करना है"। यदि ऐसा है, तो CHCSVParser लाइब्रेरी देखें। मैंने इसे पहले परियोजनाओं में इस्तेमाल किया है और इसे बहुत विश्वसनीय मानते हैं। यह आपके लिए पंक्तियों/स्तंभों के एनएसएआरएआरई में किसी भी मनमानी स्ट्रिंग या फ़ाइलपाथ को पार्स कर सकता है। उसके बाद, जो भी आप डेटा के साथ करते हैं वह आपके ऊपर है।

1

अपने चेतावनी के संबंध में:

आपका कोड, एक (एक चेतावनी नहीं) त्रुटि उत्पन्न होगा जब से तुम इंटरफ़ेस फ़ाइल में अपनी संपत्ति की घोषणा करने से पहले उनके कार्यान्वयन में संश्लेषण की जरूरत है। आपको शायद याद है कि @synthesize आपकी गुणों के लिए एक्सेसर विधियां उत्पन्न करता है। इसके अलावा, @synthesize निर्देश का उपयोग करने से पहले, आपको इंटरफ़ेस में भी @property निर्देश का उपयोग करने की आवश्यकता है। यहाँ एक उदाहरण है:

@interface MyObject : NSObject { 
    NSString *myString; 
} 
@property (assign) NSString *myString; 
@end 

@implementation MyObject 
@synthesize myString; 
    // funky code here 
@end 

ध्यान दें कि संपत्ति घोषणा एक प्रकार द्वारा पीछा किया जाता है (इस मामले, जो डिफ़ॉल्ट है में आवंटित)। वहाँ स्टीफन जी Kochans की किताब में इस बारे में एक उत्कृष्ट व्याख्या दी गई है: Programming in Objective-C 2.0


लेकिन तर्क की खातिर यह सोचते हैं, कि आप सही @interface फ़ाइल यहां छोड़े गए। यदि आप पहली बार @interface में कोई संपत्ति घोषित करते हैं, और फिर उसी विधि नाम का उपयोग करके अपनी विधि में एक और संपत्ति घोषित करें, तो विधि चर आवृत्ति चर पर प्राथमिकता लेगा।

अपने कोड में, यह चर नाम की घोषणा कर छोड़ देते हैं, तो जैसे पर्याप्त होगा:

dataStr = [NSString stringWithContentsOfFile:@"Towers.csv" encoding:NSUTF8StringEncoding error:nil];  
array = [dataStr componentsSeparatedByString: @","];