هل من الممكن استخدام سلاسل التنسيق لمحاذاة NSStrings مثل الأرقام يمكن أن تكون؟

StackOverflow https://stackoverflow.com/questions/1671531

  •  13-09-2019
  •  | 
  •  

سؤال

أنا استخدم 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  

السبب في أنني أسأل عن التنسيق سلاسل هو آمل أن يكون هناك طريقة خفيفة الوزن لتنسيق إخراج أخطاء Ghetto.

هنا ما حاولت:

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

نتيجة:

الكلمة: شجرة التصنيف: 4

لا يوجد تأثير على الإطلاق.

هل كانت مفيدة؟

المحلول

يبدو أن ما يلي يعمل، ولكنه يتطلب التحويل من NSString الخاص بك إلى C-Strings.

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

لا أعرف لماذا يتم تجاهل عرض الحقل عند محاولة استخدام nsstring.

نصائح أخرى

نعم، تماما مثل printf.

بالنسبة الى وثائق, stringWithFormat: يطيع IEEE. printf المواصفات، والتي تسمح لجميع أنواع التعديلات على الحجج الفردية. الوثائق لها مجموعة فرعية مقيدة من هذه المعلومات، لكنها تصل إلى Opengroup. printf مواصفات 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]);

إذا فعلت شيئا مثل الإجابة السابقة:

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

... يمكنك الحصول على مشاكل تحويل الترميز لأحرف غير ASCII ... يبدو أن StringWithFormat تفترض ترميز النظام الافتراضي للنظام، والذي لا يزال macroman لسبب مجنون. يمكنك الدخول إلى مستوى Stdlib - قم بكل التنسيق مع sprintf في المخزن المؤقت الخاص بك، وبعد ذلك يمكنك التحكم في الترميز عند إنشاء NSSTRING من ذلك - ولكن هذا أمر مرهق. إذا كان أي شخص يعرف حلا مريحا، فأنا جميع الأذنين.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top