OnWorks Linux ו-Windows Online WorkStations

לוגו

אירוח מקוון בחינם עבור תחנות עבודה

<הקודם | תוכן | הבא>

printf - עיצוב והדפס נתונים

שלא כמו הפקודות האחרות בפרק זה, ה הדפס הפקודה אינה משמשת עבור קווי צינור (היא אינה מקבלת קלט סטנדרטי) ואינה מוצאת יישומים תכופים ישירות בשורת הפקודה (היא משמשת בעיקר בסקריפטים). אז למה זה חשוב? כי הוא נמצא בשימוש כה נרחב.

printf (מהביטוי "print formatted") פותחה במקור עבור שפת התכנות C והוטמעה בשפות תכנות רבות, כולל המעטפת. למעשה, ב-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: מפרטי סוג נתונים נפוצים להדפסה


תיאור המפרט

תיאור המפרט

ד עיצוב מספר כמספר שלם עשרוני בסימן.


תמונה

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, 17c, 17C

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

380 380

380, 380.000000, 574, 380, 17c, 17C


מכיוון שציינו שישה מפרטי המרה, עלינו לספק גם שישה ארגומנטים עבור

printf לעיבוד. שש התוצאות מציגות את ההשפעה של כל מפרט.

ניתן להוסיף מספר רכיבים אופציונליים למפרט ההמרה כדי להתאים את התפוקה שלו. מפרט המרה מלא עשוי להכיל את הדברים הבאים:

%[דגלים][רוחב][.דיוק]specific_conversion

רכיבים אופציונליים מרובים, כאשר משתמשים בהם, חייבים להופיע בסדר שצוין לעיל כדי להתפרש כראוי. הנה תיאור של כל אחד מהם:


טבלה 21-5: רכיבי מפרט המרה של printf


תיאור הרכיב

תיאור הרכיב

דגלים ישנם חמישה דגלים שונים:


תמונה

# - השתמש ב"פורמט חלופי" לפלט. זה משתנה לפי סוג הנתונים. עבור המרת o (מספר אוקטלי), הפלט מקבל קידומת

0. עבור המרות x ו-X (מספר הקסדצימלי), הפלט מקבל קידומת 0x או 0X בהתאמה.


תמונה

0–(אפס) רפד את הפלט באפסים. המשמעות היא שהשדה יתמלא באפסים מובילים, כמו ב-"000380".


תמונה

- – (מקף) יישור לשמאל את הפלט. כברירת מחדל, printf מיישר את הפלט לימין.


תמונה

' ' – (רווח) צור רווח מוביל למספרים חיוביים.


תמונה

+ – (סימן פלוס) סימן מספרים חיוביים. כברירת מחדל, printf בלבד


תמונה


תמונה

סימן מספרים שליליים.


תמונה

width מספר המציין את רוחב השדה המינימלי.


תמונה

.דיוק עבור מספרי נקודה צפה, ציין את מספר ספרות הדיוק שיוצא לאחר הנקודה העשרונית. להמרת מחרוזת, דיוק מציין את מספר התווים לפלט.


תמונה


הנה כמה דוגמאות לפורמטים שונים בפעולה:


טבלה 21-6: הדפס דוגמאות למפרט המרה


טיעון

פוּרמָט

תוֹצָאָה

הערות

380

"%d"

380

עיצוב פשוט של an

מספר שלם.

380

"%#איקס"

0x17c

מספר שלם מעוצב כ-a

מספר הקסדצימלי באמצעות

דגל "פורמט חלופי".

380

"%05d"

00380

מספר שלם מעוצב עם

אפסים מובילים (ריפוד)

ורוחב שדה מינימלי

של חמש דמויות.

380

"%05.5f"

380.00000

מספר בפורמט א

מספר נקודה צפה עם

ריפוד וחמישה עשרונים

מקומות של דיוק. מאז

המינימום שצוין

רוחב השדה (5) קטן מ

הרוחב האמיתי של

מספר מעוצב, ה

לריפוד אין השפעה.

380

"%010.5f"

0380.00000

על ידי הגדלת ה

רוחב שדה מינימלי עד 10

הריפוד נראה כעת.

380

"%+d"

+380

הדגל + מסמן חיובי

מספר.

380

"%-d"

380

הדגל - שמאלה מיישר את

עיצוב.


abcdefghijk

"%5s"

abcedfghijk

מחרוזת מעוצבת ברוחב שדה מינימלי.

abcdefghijk

"%5s"

א ב ג ד ה

על ידי החלת דיוק על מחרוזת, הוא נחתך.


שוב, הדפס משמש בעיקר בסקריפטים שבהם הוא משמש לעיצוב נתונים טבלאיים, ולא בשורת הפקודה ישירות. אבל אנחנו עדיין יכולים להראות כיצד ניתן להשתמש בו כדי לפתור בעיות עיצוב שונות. ראשית, הבה נוציא כמה שדות מופרדים על ידי תווי טאב:



[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 %s \n

\t \n\t \n\t\t %s \n\t \n \n" "כותרת עמוד" "תוכן עמוד"

כותרת העמוד

תוכן הדף

[me@linuxbox ~]$ printf" \n\t \n\t\t %s \n

\t \n\t \n\t\t %s \n\t \n \n" "כותרת עמוד" "תוכן עמוד"

כותרת העמוד

תוכן הדף


מחשוב ענן מערכת ההפעלה המוביל ב-OnWorks: