2012-04-11 10 views
8

में एसएसकेएनएफ समतुल्य मैं वर्तमान में उद्देश्य-सी में एक तरंग ओबीजे लोडर लिख रहा हूं और मैं यह पता लगाने की कोशिश कर रहा हूं कि एनएसएसटींग से डेटा को सीएसकेएनएफ() फ़ंक्शन में इसी तरह से कैसे पार्स करना है।उद्देश्य-सी

f 1.43//2.43 1.11//2.33 3.14//0.009 

मैं बनावट के बारे में चिंतित नहीं हूँ वर्तमान क्षण में निर्देशांक:

OBJ फ़ाइलों जैसे एक्स, वाई में चेहरे, कोने, बनावट निर्देशांक के z तीन, और normals परिभाषित करते हैं।

sscanf(buf, "f %d//%d %d//%d %d//%d", &temp[0], &temp[1], &temp[2], &temp[3], &temp[4], &temp[5]); 

जाहिर है, NSStrings पहली बार उन्हें एक सी शैली स्ट्रिंग में कनवर्ट करने के बिना एक sscanf() में नहीं किया जा सकता है, लेकिन मैं: सी में, एक आसान तरीका यह लाइन विभाजित करने एक बयान जैसे होगा मैं सोच रहा हूं कि ऐसा रूपांतरण किए बिना ऐसा करने का एक और शानदार तरीका है या नहीं।

उत्तर

9

NSScanner कक्षा तारों में संख्याओं को पार्स कर सकती है, हालांकि इसे एसएसकेएनएफ के लिए ड्रॉप-इन प्रतिस्थापन के रूप में उपयोग नहीं किया जा सकता है।

संपादित करें: इसका उपयोग करने का एक तरीका यहां है। आप छोड़ने के लिए वर्णों की सूची में / भी डाल सकते हैं।

float temp[6]; 
NSString *objContent = @"f 1.43//2.43 1.11//2.33 3.14//0.009"; 
NSScanner *objScanner = [NSScanner scannerWithString:objContent]; 

// Skip the first character. 
[objScanner scanString:@"f " intoString:nil]; 

// Read the numbers. 
NSInteger index=0; 
BOOL parsed=YES; 
while ((index<6)&&(parsed)) 
{ 
    parsed=[objScanner scanFloat:&temp[index]]; 
    // Skip the slashes. 
    [objScanner scanString:@"//" intoString:nil]; 

    NSLog(@"Parsed %f", temp[index]); 
    index++; 
} 
5

एक NSString से एक सी-स्ट्रिंग (चार *) के लिए जाने के लिए, का उपयोग

NSString *str = @"string"; 
const char *c = [str UTF8String]; 

वैकल्पिक रूप से,

NSString *str = @"Some string"; 
const char *c = [str cStringUsingEncoding:NSUTF8StringEncoding]; 

sscanf() कार्य करने के लिए पहुँच प्रदान करें।

अन्य रास्ता तय करने के लिए, का उपयोग

const *char cString = "cStr"; 
NSString *string = [NSString stringWithUTF8String:cString]; 

या

const *char cString = "cStr"; 
NSString *myNSString = [NSString stringWithCString:cString encoding:NSASCIIStringEncoding]; 

एक शुद्ध ObjC दृष्टिकोण से, NSScanner ints खींचने के लिए -scanInteger या -scanFloat तरीकों प्रदान करता है और एक स्ट्रिंग से बाहर तैरता है।

NSScanner *aScanner = [NSScanner scannerWithString:string]; 
[aScanner scanInteger:anInteger];