OnWorks Linux و Windows Online WorkStations

الشعار

استضافة مجانية على الإنترنت لمحطات العمل

<السابق | المحتويات | التالي>

printf - تنسيق وطباعة البيانات

على عكس الأوامر الأخرى في هذا الفصل ، فإن printf لا يتم استخدام الأمر في خطوط الأنابيب (لا يقبل الإدخال القياسي) ولا يجد التطبيق المتكرر مباشرة على سطر الأوامر (يستخدم غالبًا في البرامج النصية). فلماذا هو مهم؟ لأنه يستخدم على نطاق واسع.

تم تطوير printf (من العبارة "print formatted") في الأصل للغة البرمجة C وتم تنفيذه في العديد من لغات البرمجة بما في ذلك shell. في الواقع ، في bash ، تعتبر printf مدمجة.

يعمل printf مثل هذا:

printf "شكل" الحجج

يتم إعطاء الأمر سلسلة تحتوي على وصف تنسيق يتم تطبيقه بعد ذلك على قائمة من الوسائط. يتم إرسال النتيجة المنسقة إلى الإخراج القياسي. هنا امتحان بسيط:



[me @ linuxbox ~] $ printf "لقد قمت بتنسيق السلسلة:٪ s \ n" foo

لقد قمت بتنسيق السلسلة: foo

[me @ linuxbox ~] $ printf "لقد قمت بتنسيق السلسلة:٪ s \ n" foo

لقد قمت بتنسيق السلسلة: foo


قد تحتوي سلسلة التنسيق على نص حرفي (مثل "نسقت السلسلة:") ، متسلسلات الهروب (مثل \n، حرف سطر جديد) ، والتسلسلات التي تبدأ بـ % الشخصية التي تسمى مواصفات التحويل. في المثال أعلاه ، مواصفات التحويل %s تُستخدم لتنسيق السلسلة "foo" ووضعها في إخراج الأمر. ها هو مرة أخرى:



[me @ linuxbox ~] $ printf "لقد قمت بتنسيق '٪ s' كسلسلة. \ n" foo

لقد قمت بتنسيق "foo" كسلسلة.

[me @ linuxbox ~] $ printf "لقد قمت بتنسيق '٪ s' كسلسلة. \ n" foo

لقد قمت بتنسيق "foo" كسلسلة.


كما نرى ، فإن %s يتم استبدال مواصفات التحويل بالسلسلة "foo" في إخراج الأمر. يستخدم التحويل s لتنسيق بيانات السلسلة. هناك محددات أخرى لأنواع أخرى من البيانات. يسرد هذا الجدول أنواع البيانات شائعة الاستخدام:


جدول 21-4: محددات أنواع البيانات العامة printf


وصف المحدد

وصف المحدد

د تنسيق رقم كعدد صحيح عشري بعلامة.


صورة

f تنسيق وإخراج رقم فاصلة عائمة.


صورة

o تنسيق عدد صحيح كرقم ثماني.


صورة


صورة

s تنسيق سلسلة.


صورة

x قم بتنسيق عدد صحيح كرقم سداسي عشري باستخدام الحرف الصغير af عند الحاجة.


صورة

X مثل x لكن استخدم الأحرف الكبيرة.


صورة

٪ طباعة رمز٪ حرفي (أي تحديد "٪٪")


صورة


سنوضح تأثير كل من محددات التحويل على السلسلة "380":



[me @ linuxbox ~] $ printf "٪ d،٪ f،٪ o،٪ s،٪ x،٪ X \ n" 380 380 380 380

380 380

380 ، 380.000000 ، 574 ، 380 ، 17 ج ، 17 ج

[me @ linuxbox ~] $ printf "٪ d،٪ f،٪ o،٪ s،٪ x،٪ X \ n" 380 380 380 380

380 380

380 ، 380.000000 ، 574 ، 380 ، 17 ج ، 17 ج


نظرًا لأننا حددنا ستة محددات للتحويل ، يجب علينا أيضًا توفير ست حجج لـ

printf للمعالجة. تظهر النتائج الستة تأثير كل محدد.

يمكن إضافة العديد من المكونات الاختيارية إلى محدد التحويل لضبط إخراجها. قد تتكون مواصفات التحويل الكاملة مما يلي:

%[الأعلام][عرض][.الاحكام] تحويل_المواصفات

يجب أن تظهر المكونات الاختيارية المتعددة ، عند استخدامها ، بالترتيب المحدد أعلاه ليتم تفسيرها بشكل صحيح. فيما يلي وصف لكل:


جدول 21-5: مكونات مواصفات التحويل printf


وصف القطع

وصف القطع

الأعلام هناك خمسة أعلام مختلفة:


صورة

# - استخدم "التنسيق البديل" للإخراج. هذا يختلف حسب نوع البيانات. لتحويل o (رقم ثماني) ، يكون الإخراج مسبوقًا بـ

0. بالنسبة إلى تحويلات x و X (رقم سداسي عشري) ، يكون الناتج مسبوقًا بـ 0x أو 0X على التوالي.


صورة

0– (صفر) حشو الإخراج بالأصفار. هذا يعني أنه سيتم ملء الحقل بالأصفار البادئة ، كما في "000380".


صورة

- - (اندفاعة) يسار محاذاة الإخراج. بشكل افتراضي ، تقوم printf إلى اليمين بمحاذاة الإخراج.


صورة

"- (مسافة) أنتج مسافة بادئة للأرقام الموجبة.


صورة

+ - (علامة زائد) قم بتوقيع أرقام موجبة. بشكل افتراضي ، printf فقط


صورة


صورة

علامات الأرقام السالبة.


صورة

العرض رقم يحدد الحد الأدنى لعرض الحقل.


صورة

.الاحكام بالنسبة لأرقام الفاصلة العائمة ، حدد عدد أرقام الدقة المطلوب إخراجها بعد الفاصلة العشرية. لتحويل السلسلة ، دقة يحدد عدد الأحرف التي سيتم إخراجها.


صورة


فيما يلي بعض الأمثلة على التنسيقات المختلفة قيد التشغيل:


جدول 21-6: أمثلة لمواصفات تحويل الطباعة


حجة

شكل

نتيجة

ملاحظة

380

"٪د"

380

تنسيق بسيط لملف

عدد صحيح.

380

"٪ # x"

0x17c

عدد صحيح منسق كملف

رقم سداسي عشري باستخدام

علامة "التنسيق البديل".

380

"٪ 05d"

00380

عدد صحيح منسق بـ

الأصفار البادئة (المساحة المتروكة)

وعرض الحقل الأدنى

من خمسة أحرف.

380

"٪ 05.5f"

380.00000

رقم منسق كملف

رقم الفاصلة العائمة مع

المساحة المتروكة وخمسة عشرية

أماكن الدقة. حيث

الحد الأدنى المحدد

عرض المجال (5) أقل من

العرض الفعلي لـ

رقم منسق ، فإن

الحشو ليس له تأثير.

380

"٪ 010.5f"

0380.00000

عن طريق زيادة

الحد الأدنى لعرض الحقل إلى 10

المساحة المتروكة مرئية الآن.

380

"٪ + d"

380+

إشارة + إشارة إيجابية

عدد.

380

"٪-د"

380

- العلم الأيسر يحاذي

التنسيق.


com.abcdefghijk

"٪ 5s"

أبسيدفجيك

سلسلة منسقة بعرض حقل أدنى.

com.abcdefghijk

"٪ .5s"

ABCDE

من خلال تطبيق الدقة على سلسلة ، يتم قطعها.


مرة أخرى، printf يتم استخدامه في الغالب في البرامج النصية حيث يتم استخدامه لتنسيق البيانات الجدولية ، بدلاً من سطر الأوامر مباشرة. لكن لا يزال بإمكاننا إظهار كيف يمكن استخدامه لحل مشكلات التنسيق المختلفة. أولاً ، لنخرج بعض الحقول مفصولة بأحرف جدولة:



[me @ linuxbox ~] $ printf "٪ s \ t٪ s \ t٪ s \ n" str1 str2 str3

str1 str2 str3

[me @ linuxbox ~] $ printf "٪ s \ t٪ s \ t٪ s \ n" str1 str2 str3

str1 str2 str3


عن طريق إدخال \t (تسلسل الهروب لعلامة تبويب) ، نحقق التأثير المطلوب. بعد ذلك ، بعض الأرقام بتنسيق أنيق:



[me @ linuxbox ~] $ printf "سطر:٪ 05d٪ 15.3f النتيجة:٪ + 15d \ n" 1071 3.14156295 32589

الخط: 01071 3.142 النتيجة: +32589

[me @ linuxbox ~] $ printf "سطر:٪ 05d٪ 15.3f النتيجة:٪ + 15d \ n" 1071 3.14156295 32589

الخط: 01071 3.142 النتيجة: +32589


يوضح هذا تأثير الحد الأدنى لعرض الحقل على تباعد الحقول. أو ماذا عن تنسيق صفحة ويب صغيرة:



[me @ linuxbox ~] $ printf " \ n \ t \ n \ t \ t ٪س \ن

\ t \ n \ t \ n \ t \ t ٪س \ n \ t \ن \ n "" Page Tit le "" Page Content "

عنوان الصفحة

محتوى الصفحة

[me @ linuxbox ~] $ printf " \ n \ t \ n \ t \ t ٪س \ن

\ t \ n \ t \ n \ t \ t ٪س \ n \ t \ن \ n "" Page Tit le "" Page Content "

عنوان الصفحة

محتوى الصفحة


أفضل الحوسبة السحابية لنظام التشغيل في OnWorks: