2009-11-04 2 views
12

मैं NSLog() उपयोग कर रहा हूँ कुछ सारणीबद्ध एक NSString से मिलकर डेटा मुद्रित करने के लिए और एक पूर्णांक जुड़े।एनएसएसटींग्स ​​को संरेखित करने के लिए प्रारूप स्ट्रिंग का उपयोग करना संभव है जैसे संख्याएं हो सकती हैं?

मान लें कि मुझे सबसे लंबे शब्द की लंबाई पता है।

वहाँ प्रारूप तार का उपयोग कर स्तंभ संरेखण के इस प्रकार प्राप्त करने के लिए एक रास्ता है:

word:tree  rank:5 
word:frog  rank:3 
word:house  rank:2 
word:peppercorn rank:2 
word:sword  rank:2 
word:antlion  rank:1 

कारण के बारे में मैं तार स्वरूपण मैं एक हल्के रास्ता के लिए आशा करती हूं कि है पूछ रहा हूँ मेरे यहूदी डेबगिंग आउटपुट को प्रारूपित करने के लिए।

यहाँ मैं क्या करने की कोशिश की है:

NSString *word = @"tree"; 
NSUInteger rank = 4; 
NSString *str = [NSString stringWithFormat:@"word:%[email protected] rank:%u", word, rank]; 
NSLog(@"%@", str); 

परिणाम:

शब्द: पेड़ रैंक: 4

कोई प्रभाव नहीं बिल्कुल नहीं।

+1

हाहाहा +1 यहूदी-डिबगिंग टैग के लिए – nall

उत्तर

15

निम्नलिखित काम करने के लिए लगता है, लेकिन अपने NSString के सी-तार करने से रूपांतरण की आवश्यकता है।

NSString *word = @"tree"; 
NSUInteger rank = 4; 
NSString *str = [NSString stringWithFormat:@"word:%-20s rank:%u", [word UTF8String], rank]; 
NSLog(@"%@", str); 

पता नहीं क्यों एनएसएसटींग का उपयोग करने की कोशिश करते समय फ़ील्ड चौड़ाई को अनदेखा किया जा रहा है।

+0

हाँ, यह अजीब है। –

+0

आपके पास एक पूर्ण स्ट्रिंग क्या है (उदाहरण 1 आइटम 1 6 0% 6) यह कैसे होगा? – jongbanaag

+0

@ एंथनी क्रैम्प: स्ट्रिंग की लंबाई अधिक होने पर यह काम नहीं करेगा .... स्ट्रिंग की लंबाई कॉलम की लंबाई से अधिक होने पर स्ट्रिंग को ट्रिम करना चाहते हैं ... – Nit

1

हां, बस printf की तरह।

the documentation के अनुसार, stringWithFormat: आईईईई printf विनिर्देशन का पालन करता है, जो व्यक्तिगत तर्कों पर सभी प्रकार के संशोधनों की अनुमति देता है। दस्तावेज़ीकरण में उस जानकारी का एक प्रतिबंधित सबसेट है, लेकिन वे पूरी जानकारी देने के लिए OpenGroup printf specification for Unix से लिंक करते हैं (पढ़ने के लायक, आप प्रारूप विनिर्देशकों के साथ बहुत सी चालें पूरा कर सकते हैं)।

इस प्रयास करें, वास्तव में प्राप्त करने के लिए क्या आप चिपकाया है ऊपर:

NSString *word = @"butterfly"; 
NSUInteger rank = 4; 
NSString *str = [NSString stringWithFormat:@"word:%-11s rank:%u", [word UTF8String], rank]; 

यहाँ कैसे मैं अपने डिबगिंग आउटपुट फ़ॉर्मेट का उदाहरण (मैं NSLog का उपयोग नहीं करते है, मैं प्राप्त करने के लिए मानक त्रुटि के लिए मुद्रण लपेट फ़ाइल और लाइन, भी):

fprintf(stderr, "%s | %30s:%-5d | %s", [[[NSDate date] description] UTF8String], 
    [fileName UTF8String], line, [body UTF8String]); 
+0

यदि शब्द "पेड़" है तो आपको क्या मिलता है। मुझे "शब्द: पेड़ रैंक: 4" मिलता है जो कॉलम विनिर्देशक पर प्रतिक्रिया नहीं करता है। – willc2

+0

@ willc2: मैंने एंथनी की जानकारी के साथ अपना जवाब संपादित कर लिया है, इसे आज़माएं। –

+0

@ जेडस्मिथ, क्या मुझे पता है कि स्विफ्ट में इसे कैसे किया जाए? टायिया –

0

आप पहले इस सवाल का जवाब कुछ इस तरह करते हैं:

NSString *word = @"tree"; 
NSUInteger rank = 4; 
NSString *str = [NSString stringWithFormat:@"word:%-20s rank:%u", [word UTF8String], rank]; 
NSLog(@"%@", str); 

... आप गैर- ASCII वर्ण के लिए एन्कोडिंग-रूपांतरण समस्याओं प्राप्त कर सकते हैं ... stringWithFormat प्रणाली डिफ़ॉल्ट एन्कोडिंग, जो अभी भी है ग्रहण करने के लिए लगता है कुछ पागल कारण के लिए MacRoman। आप stdlib स्तर पर नीचे जा सकते हैं - अपने सभी स्वरूपण को sprintf के साथ अपने स्वयं के बफर में करें, और फिर आप उस से एनएसएसटींग बनाते समय एन्कोडिंग को नियंत्रित कर सकते हैं - लेकिन यह बोझिल है। अगर कोई सुविधाजनक कामकाज जानता है, तो मैं सभी कान हूं।

संबंधित मुद्दे

 संबंधित मुद्दे