मैं NSScanner का उपयोग कैसे करूँ कोको में एक टैब सीमांकित स्ट्रिंग पार्स करने में?

वोट
0

मैं एक वेब सेवा है जो टैब सीमांकित डेटा देता है (नीचे नमूना देखें)।

मैं एक सरणी या इसी तरह में इस पार्स करने के लिए तो मैं इसके बारे में एक नेविगेशन दृश्य बना सकते हैं की जरूरत है।

मैं वेब अनुरोध करने के लिए प्रबंधित किया है और एक XML फ़ाइल को पार्स सकता है, लेकिन ऑब्जेक्टिव-सी की मेरी जानकारी छोटा है।

433 Eat
    502 Not Fussed
    442 British
    443 Chinese
    444 Dim Sum
    445 Fish
    446 French
    447 Gastropubs
    449 Indian
    451 Italian
    452 Japanese
    453 Middle Eastern
    454 Pan-Asian
    455 Pizza
    456 Spanish
    457 Tapas
    458 Thai
    459 Vegetarian
434 Drink
    501 Not Fussed
    460 Bars 
    461 Pubs
09/12/2008 को 15:43
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


3 जवाब

वोट
7

मुझे यकीन है कि मैं अपने प्रारूप ठीक से समझ (यह मेरे लिए थोड़ा अजीब प्रदर्शित करता है) नहीं कर रहा हूँ, लेकिन यह करने के लिए सबसे आसान तरीका है with - (NSArray *)componentsSeparatedByString:(NSString *)separatorमें NSString वर्ग ... उदाहरण के एक विधि है जो:

NSArray *components = [myString componentsSeperatedByString:@"\t"];

यह एक रिटर्न NSArrayके NSStringsप्रत्येक टैब-सीमांकित क्षेत्र के लिए एक,। आप उपयोग कर सकते हैं नई लाइन विभाजक महत्वपूर्ण हैं - (NSArray *)componentsSeparatedByCharactersInSet:(NSCharacterSet *)separator(यह भी पर NSString) सीमांकक के एक से अधिक प्रकार का उपयोग कर विभाजित करने के लिए।

09/12/2008 को 17:58
का स्रोत उपयोगकर्ता

वोट
4

मैं एक एक फ्लैट सूची से अधिक लग रहा है की तलाश है था। आप एक बहुआयामी संरचना चाहते हैं तो आप कुछ इस तरह कर सकते हैं:

NSArray *lines = [data componentsSeparatedByString:@"\n"];
for (NSString *line in lines) {
    NSArray *fields = [line componentsSeparatedByString:@"\t"];
     // Do something here with each two-element array, such as add to an NSDictionary or to an NSArray (to make a multidimensional array.)
}
09/12/2008 को 18:13
का स्रोत उपयोगकर्ता

वोट
2

आप NSScanner साथ सही रास्ते पर हैं। आप कम से कम दो स्कैनर की आवश्यकता होगी: एक पूरे इनपुट स्ट्रिंग से लाइनों स्कैन करने के लिए, और प्रत्येक पंक्ति के लिए एक स्कैनर। इसमें केवल रिक्त स्थान (नहीं नई पंक्तियां) को छोड़ पूरे इनपुट स्कैनर सेट करें, फिर:

  1. एक पंक्ति (स्रोत स्ट्रिंग के अंत की लाइन अप करने के लिए) के लिए स्कैन।
  2. एक स्कैनर बनाएँ और यह लाइन से टैब स्कैन की है।
  3. टैब आप स्कैन की गणना करें। यही कारण है कि अपने खरोज स्तर है।
  4. लाइन के बाकी प्रविष्टि नंबर और नाम है। ऊपर नंबर और नाम अलग हैं, या उन्हें एक साथ छोड़ देते हैं, आपको क्या चाहिए पर निर्भर करता है के लिए खाली स्थान के लिए आप लाइन स्कैन कर सकते हैं।
  5. चरण 1 पर वापस जाएँ।

विशिष्ट विधि के नाम के लिए, देखें NSScanner वर्ग संदर्भ और NSCharacterSet वर्ग संदर्भ

09/12/2008 को 18:15
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more