الفرق بين المراجعتين لصفحة: «Ruby/Kernel/format»
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: التابع <code>format</code> الخاص بالصنف <code>Kernel</code> في روبي}}</noinclude> تصنيف: Ruby تصني...' |
لا ملخص تعديل |
||
سطر 3: | سطر 3: | ||
[[تصنيف: Ruby Method]] | [[تصنيف: Ruby Method]] | ||
[[تصنيف: Ruby Kernel]] | [[تصنيف: Ruby Kernel]] | ||
يعيد التابع السلسلة النصية الناتجة | يعيد التابع <code>format</code> السلسلة النصية الناتجة عن تطبيق التابع المُعطى <code>format_string</code> (انظر فقرة البنية العامة) على الوسائط الإضافية المُمرّرة. داخل السلسلة النصية <code>format_string</code>، ستُنسخ كل الأحرف في النتيجة باستثناء تسلسلات التنسيق (format sequences). | ||
صياغة تسلسلات التنسيق | |||
<syntaxhighlight lang="ruby">%[flags][width][.precision]type</syntaxhighlight> | صياغة تسلسلات التنسيق تأخذ الشكل التالي:<syntaxhighlight lang="ruby">%[flags][width][.precision]type</syntaxhighlight>تتألف تسلسلات التنسيق من علامة النسبة المئوية، متبوعة بثلاث حقول اختيارية، <code>flags</code> و <code>width</code> و <code>precision.</code>، ثم تنتهي بحرف يحدد نوع الحقل. يتحكم نوع الحقل في كيفية تأويل الوسيط المقابل <code>sprintf</code>، بينما تعدل الحقول <code>flags</code> ذلك التأويل. | ||
تتألف تسلسلات التنسيق من علامة النسبة المئوية، متبوعة بثلاث حقول اختيارية، flags و width ، | |||
احرف نوع الحقل هي: | احرف نوع الحقل هي: | ||
{| class="wikitable" | |||
!الحقل | |||
!التنسيق (Integer) | |||
|- | |||
|<code>b</code> | |||
|يحول الوسيط إلى عدد ثنائي (binary number). | |||
الأعداد السالبة ستُعرض مع البادئة "<code>..1</code>". | |||
|- | |||
|<code>B</code> | |||
|مكافئة لـ b، إلا أنها تستخدم حرفًا كبيرا <code>0B</code> كبادئة في الشكل البديل عبر <code>#</code>. | |||
|- | |||
|<code>d</code> | |||
|يحول الوسيط إلى عدد عشري (decimal number). | |||
|- | |||
|<code>i</code> | |||
|مشابه لـ "<code>d</code>" | |||
|- | |||
|<code>o</code> | |||
|يحول الوسيط إلى عدد ثماني (octal number). | |||
الأعداد السالبة ستُعرض مع البادئة "<code>..7</code>". | |||
|- | |||
|<code>u</code> | |||
|مشابه لـ "<code>d</code>" | |||
|- | |||
|<code>x</code> | |||
|يحول الوسيط إلى عدد ستة عشري(hexadecimal number). | |||
الأعداد السالبة ستُعرض مع البادئة "<code>..f</code>" (تمثل سلسلة نصية لامنتهية من حروف <code>f</code>) | |||
|- | |||
|<code>X</code> | |||
|مكافئ ل <code>x</code> لكن مع استخدام الحروف الكبيرة. | |||
|- | |||
!الحقل | |||
!التنسيق (Format) | |||
|- | |||
|<code>e</code> | |||
|يحول الوسائط العددية الكسرية (floating point) إلى الشكل الأسي مع رقم واحد قبل النقطة العشرية على الشكل <code>[-]d.dddddde[+-]dd</code> | |||
تحدد الدقة (precision) عدد الأرقام بعد النقطة العشرية (القيمة الافتراضية تساوي 6). | |||
|- | |||
|<code>E</code> | |||
|يكافئ "<code>e</code>" لكن يستخدم حرف <code>E</code> كبير للدلالة على الأس. | |||
|- | |||
|<code>f</code> | |||
|يحول الوسائط العددية الكسرية إلى الشكل الأسي مع رقم واحد قبل النقطة العشرية على الشكل <code>[-]ddd.dddddd</code>، حيث تحدد الدقة عدد الأرقام بعد النقطة العشرية. | |||
|- | |||
|<code>g</code> | |||
|يحول الوسائط العددية الكسرية (floating point) باستخدام الشكل الأسي إن كان الأسّ أصغر من <code>-4</code>أو أكبر من أو يساوي الدقة (precision)، أو يحوله إلى الشكل <code>dd.dddd</code> خلاف ذلك. | |||
< | |||
- | |||
- | |||
تحدد الدقة (precision) عدد الأرقام المهمة (significant digits). | |||
|- | |||
|<code>G</code> | |||
|يكافئ "<code>g</code>" لكن يستخدم حرف <code>E</code> كبير للدلالة على الأس. | |||
|- | |||
|<code>a</code> | |||
|يحول الوسائط العددية الكسرية إلى الشكل ،<code>[-]0xh.hhhhp[+-]dd</code> والذي يتألف من علامة إشارة اختيارية و "<code>0x</code>" و والجزء الكسري على الشكل الستة عشري و "<code>p</code>" والجزء الأسي على شكل عدد عشري. | |||
|- | |||
|<code>A</code> | |||
|يكافئ "<code>a</code>" لكن يستخدم الحرفين الكبيرين <code>X</code> و <code>P</code> | |||
|- | |||
!الحقل | |||
!تنسيقات أخرى | |||
|- | |||
|<code>c</code> | |||
|الوسيط (Argument) هو الكود الرقمي لحرف واحد أو سلسلة نصية. | |||
|- | |||
|<code>p</code> | |||
|فيمة التعبير <code>argument.inspect</code>. | |||
|- | |||
|<code>s</code> | |||
|الوسيط (Argument) هو سلسلة نصية المراد تعويضها. إن احتوى شكل التنسيق على الدقة (precision)، فسيكون عدد الأحرف المنسوخة أصغر من تلك الدقة. | |||
|- | |||
|<code>%</code> | |||
|ستُعرض علامة النسبة المئوية بنفسها، ولن يؤخذ أي وسيط. | |||
|} | |||
تقوم الحقول <code>flags</code> بتعديل سلوك التنسيقات. أحرف الراية <code>flag</code> هي كالتالي: | |||
{| class="wikitable" | |||
!الراية | |||
!تُطبق على | |||
!شرح | |||
|- | |||
|مسافة بيضاء | |||
|bBdiouxX | |||
aAeEfgG | |||
(numeric fmt) | |||
|يترك مسافة بيضاء في بداية الأعداد غير السالبة. | |||
بالنسبة لـ `o' و `x' و `X' و `b' و`B'، تُستخدم علامة الإشارة ناقص مع القيمة المطلقة للأعداد السالبة. | |||
|- | |||
|<code>(digit)$</code> | |||
|الكل | |||
|يحدد قيمة الوسيط المطلقة (absolute argument number) لهذا الحقل. قيم الوسيط المطلقة والنسبية لا يمكن خلطها في نصوص <code>sprintf</code> . | |||
|- | |||
|<code>#</code> | |||
|bBoxX | |||
بالنسبة | aAeEfgG | ||
|تستخدم تنسيقا بديلا. | |||
بالنسبة للتحويل `<code>o</code>'، ترفع الدقة إلى أن يصير الرقم الأول `<code>0</code>' إن لم يتم تنسيقه كمُكمّلات (complements). | |||
< | |||
بالنسبة للتحويلات `x' و `X' و `b' و`B'، بالنسبة للأعداد المخالفة للصفر، تُبدأ النتيجة بـ | |||
<code>``0x<nowiki>''</nowiki></code>و <code>``0X<nowiki>''</nowiki></code> و <code>``0b<nowiki>''</nowiki></code> و<code>``0B<nowiki>''</nowiki></code>, تواليًا. | |||
بالنسبة ل`a'و `A' و `e' و `Eو `f' و `g' و 'G'، تُفرض إضافة النقطة العشرية، حتى لو لم يكن بعدها أي أرقام. | |||
بالنسبة لـ `g' و 'G' ، لا تزيل الأصفار الإضافية. | |||
|- | |||
|<code>+</code> | |||
|bBdiouxX | |||
aAeEfgG | |||
(numeric fmt) | |||
|تضيف علامة + في بداية الأعداد الموجبة. | |||
بالنسبة لـ `o' و `x' و `X' و `b' و`B'، تُستخدم علامة الإشارة ناقص مع القيمة المطلقة للأعداد السالبة. | |||
|- | |||
|<code>-</code> | |||
|الكل | |||
|تعدل نتيحة التحويل من الجهة اليسرى. | |||
|- | |||
|<code>0</code> | |||
|bBdiouxX | |||
aAeEfgG | |||
(numeric fmt) | |||
|تملأ المنازل الرقمية الفارغة بالأصفار، وليس المسافات البيضاء، بالنسبة لـ `o' و `x' و `X' و `b' و`B'، تُستخدم radix-1 للأعداد السالبة المُنسّقة على شكل مكملات. | |||
<syntaxhighlight lang="ruby"># `+' and space flag specifies the sign of non-negative numbers. | |- | ||
|<code>*</code> | |||
|الكل | |||
|تستخدم الوسيط الموالي كعرض للحقل. إن كان سالبًا تعدل نتيحة التحويل من الجهة اليسرى، إن كانت العلامة * متبوعة بعدد وبعلامة الدولار، يُستخدم الوسيط كعرض. | |||
|} | |||
أمثلة على الرايات <code>flags</code>:<syntaxhighlight lang="ruby"># `+' and space flag specifies the sign of non-negative numbers. | |||
sprintf("%d", 123) #=> "123" | sprintf("%d", 123) #=> "123" | ||
sprintf("%+d", 123) #=> "+123" | sprintf("%+d", 123) #=> "+123" | ||
sprintf("% d", 123) #=> " 123" | sprintf("% d", 123) #=> " 123" | ||
# `#' flag for `o' increases number of digits to show `0'. | # `#' flag for `o' increases number of digits to show `0'. | ||
# `+' and space flag changes format of negative numbers. | # `+' and space flag changes format of negative numbers. | ||
سطر 133: | سطر 154: | ||
sprintf("%o", -123) #=> "..7605" | sprintf("%o", -123) #=> "..7605" | ||
sprintf("%#o", -123) #=> "..7605" | sprintf("%#o", -123) #=> "..7605" | ||
# `#' flag for `x' add a prefix `0x' for non-zero numbers. | # `#' flag for `x' add a prefix `0x' for non-zero numbers. | ||
# `+' and space flag disables complements for negative numbers. | # `+' and space flag disables complements for negative numbers. | ||
سطر 141: | سطر 163: | ||
sprintf("%#x", -123) #=> "0x..f85" | sprintf("%#x", -123) #=> "0x..f85" | ||
sprintf("%#x", 0) #=> "0" | sprintf("%#x", 0) #=> "0" | ||
# `#' for `X' uses the prefix `0X'. | # `#' for `X' uses the prefix `0X'. | ||
sprintf("%X", 123) #=> "7B" | sprintf("%X", 123) #=> "7B" | ||
sprintf("%#X", 123) #=> "0X7B" | sprintf("%#X", 123) #=> "0X7B" | ||
# `#' flag for `b' add a prefix `0b' for non-zero numbers. | # `#' flag for `b' add a prefix `0b' for non-zero numbers. | ||
# `+' and space flag disables complements for negative numbers. | # `+' and space flag disables complements for negative numbers. | ||
سطر 152: | سطر 176: | ||
sprintf("%#b", -123) #=> "0b..10000101" | sprintf("%#b", -123) #=> "0b..10000101" | ||
sprintf("%#b", 0) #=> "0" | sprintf("%#b", 0) #=> "0" | ||
# `#' for `B' uses the prefix `0B'. | # `#' for `B' uses the prefix `0B'. | ||
sprintf("%B", 123) #=> "1111011" | sprintf("%B", 123) #=> "1111011" | ||
sprintf("%#B", 123) #=> "0B1111011" | sprintf("%#B", 123) #=> "0B1111011" | ||
# `#' for `e' forces to show the decimal point. | # `#' for `e' forces to show the decimal point. | ||
sprintf("%.0e", 1) #=> "1e+00" | sprintf("%.0e", 1) #=> "1e+00" | ||
sprintf("%#.0e", 1) #=> "1.e+00" | sprintf("%#.0e", 1) #=> "1.e+00" | ||
# `#' for `f' forces to show the decimal point. | # `#' for `f' forces to show the decimal point. | ||
sprintf("%.0f", 1234) #=> "1234" | sprintf("%.0f", 1234) #=> "1234" | ||
sprintf("%#.0f", 1234) #=> "1234." | sprintf("%#.0f", 1234) #=> "1234." | ||
# `#' for `g' forces to show the decimal point. | # `#' for `g' forces to show the decimal point. | ||
# It also disables stripping lowest zeros. | # It also disables stripping lowest zeros. | ||
سطر 166: | سطر 194: | ||
sprintf("%#g", 123.4) #=> "123.400" | sprintf("%#g", 123.4) #=> "123.400" | ||
sprintf("%g", 123456) #=> "123456" | sprintf("%g", 123456) #=> "123456" | ||
sprintf("%#g", 123456) #=> "123456." | sprintf("%#g", 123456) #=> "123456."</syntaxhighlight>الحقل <code>width</code> هو عدد صحيح اختياري، متبوع اختياريًا بنقطة وحقل <code>precision</code>. يحدد <code>width</code> الحد الأدنى لعدد الأحرف التي ستُكتب في النتيجة الخاصة بهذا الحقل. | ||
</syntaxhighlight> | |||
أمثلة على الحقل <code>width</code>:<syntaxhighlight lang="ruby"># padding is done by spaces, width=20 | |||
# 0 or radix-1. <------------------> | |||
sprintf("%20d", 123) #=> " 123" | |||
sprintf("%+20d", 123) #=> " +123" | |||
sprintf("%020d", 123) #=> "00000000000000000123" | |||
sprintf("%+020d", 123) #=> "+0000000000000000123" | |||
sprintf("% 020d", 123) #=> " 0000000000000000123" | |||
sprintf("%-20d", 123) #=> "123 " | |||
sprintf("%-+20d", 123) #=> "+123 " | |||
sprintf("%- 20d", 123) #=> " 123 " | |||
sprintf("%020x", -123) #=> "..ffffffffffffffff85" | |||
</syntaxhighlight>بالنسبة للحقول العددية، يتحكم الحقل <code>precision</code> في عدد المنازل العشرية المعروضة. بالنسبة للحقول النصية، يحدد الحقل <code>precision</code> الحد الأقصى لعدد الأحرف التي ستُنسخ من السلسلة. (وهكذا، فإن تسلسل التنسيق <code>%10.10s</code> سيخصص دائمًا عشرة أحرف بالضبط في النتيجة.) | |||
أمثلة على الحقل <code>precision</code>:<syntaxhighlight lang="ruby"># precision for `d', 'o', 'x' and 'b' is | |||
# minimum number of digits <------> | |||
sprintf("%20.8d", 123) #=> " 00000123" | |||
sprintf("%20.8o", 123) #=> " 00000173" | |||
sprintf("%20.8x", 123) #=> " 0000007b" | |||
sprintf("%20.8b", 123) #=> " 01111011" | |||
sprintf("%20.8d", -123) #=> " -00000123" | |||
sprintf("%20.8o", -123) #=> " ..777605" | |||
sprintf("%20.8x", -123) #=> " ..ffff85" | |||
sprintf("%20.8b", -11) #=> " ..110101" | |||
# "0x" and "0b" for `#x' and `#b' is not counted for | |||
# precision but "0" for `#o' is counted. <------> | |||
sprintf("%#20.8d", 123) #=> " 00000123" | |||
sprintf("%#20.8o", 123) #=> " 00000173" | |||
sprintf("%#20.8x", 123) #=> " 0x0000007b" | |||
sprintf("%#20.8b", 123) #=> " 0b01111011" | |||
sprintf("%#20.8d", -123) #=> " -00000123" | |||
sprintf("%#20.8o", -123) #=> " ..777605" | |||
sprintf("%#20.8x", -123) #=> " 0x..ffff85" | |||
sprintf("%#20.8b", -11) #=> " 0b..110101" | |||
# precision for `e' is number of | |||
# digits after the decimal point <------> | |||
sprintf("%20.8e", 1234.56789) #=> " 1.23456789e+03" | |||
# precision for `f' is number of | |||
# digits after the decimal point <------> | |||
sprintf("%20.8f", 1234.56789) #=> " 1234.56789000" | |||
# precision for `g' is number of | |||
# significant digits <-------> | |||
sprintf("%20.8g", 1234.56789) #=> " 1234.5679" | |||
# <-------> | |||
sprintf("%20.8g", 123456789) #=> " 1.2345679e+08" | |||
# precision for `s' is | |||
# maximum number of characters <------> | |||
sprintf("%20.8s", "string test") #=> " string t" | |||
</syntaxhighlight>بالنسبة للتنسيقات الأكثر تعقيدًا، تدعم روبي المراجع الاسمية (reference by name). حيث يستخدم النمط <code><name>s</code> نمط التنسيق (format style)، وذلك على خلاف النمط <code>%{name}</code>. | |||
==البنية العامة== | |||
<syntaxhighlight lang="ruby">format(format_string [, arguments...] )→ string</syntaxhighlight> | |||
==المعاملات== | |||
===<code>format_string</code>=== | |||
التنسيق المراد تطبيقه | |||
===<code>arguments...</code>=== | |||
الوسائط الممرة إلى <code>format_string.</code> | |||
==القيمة المُعادة== | |||
سلسلة نصية بعد تنسيقها. | |||
==أمثلة== | |||
مثال على استخدام التابع <code>format</code>:<syntaxhighlight lang="ruby">sprintf("%d %04x", 123, 123) #=> "123 007b" | |||
sprintf("%08b '%4s'", 123, 123) #=> "01111011 ' 123'" | |||
sprintf("%1$*2$s %2$d %1$s", "hello", 8) #=> " hello 8 hello" | |||
sprintf("%1$*2$s %2$d", "hello", -8) #=> "hello -8" | |||
sprintf("%+g:% g:%-g", 1.23, 1.23, 1.23) #=> "+1.23: 1.23:1.23" | |||
sprintf("%u", -123) #=> "-123" | |||
sprintf("%<foo>d : %<bar>f", { :foo => 1, :bar => 2 }) | |||
#=> 1 : 2.000000 | |||
sprintf("%{foo}f", { :foo => 1 }) | |||
# => "1f"</syntaxhighlight> | |||
==انظر أيضا== | ==انظر أيضا== | ||
* التابع <code>[[Ruby/Kernel/ | *التابع <code>[[Ruby/Kernel/sprintf|sprintf]]</code>: ينسق السلاسل النصية. | ||
==مصادر== | ==مصادر== | ||
*[http://ruby-doc.org/core-2.5.1/Kernel.html#method-i-format قسم التابع format في الصنف Kernel في توثيق روبي الرسمي.] | *[http://ruby-doc.org/core-2.5.1/Kernel.html#method-i-format قسم التابع format في الصنف Kernel في توثيق روبي الرسمي.] |
مراجعة 23:48، 21 أكتوبر 2018
يعيد التابع format
السلسلة النصية الناتجة عن تطبيق التابع المُعطى format_string
(انظر فقرة البنية العامة) على الوسائط الإضافية المُمرّرة. داخل السلسلة النصية format_string
، ستُنسخ كل الأحرف في النتيجة باستثناء تسلسلات التنسيق (format sequences).
صياغة تسلسلات التنسيق تأخذ الشكل التالي:
%[flags][width][.precision]type
تتألف تسلسلات التنسيق من علامة النسبة المئوية، متبوعة بثلاث حقول اختيارية، flags
و width
و precision.
، ثم تنتهي بحرف يحدد نوع الحقل. يتحكم نوع الحقل في كيفية تأويل الوسيط المقابل sprintf
، بينما تعدل الحقول flags
ذلك التأويل.
احرف نوع الحقل هي:
الحقل | التنسيق (Integer) |
---|---|
b
|
يحول الوسيط إلى عدد ثنائي (binary number).
الأعداد السالبة ستُعرض مع البادئة " |
B
|
مكافئة لـ b، إلا أنها تستخدم حرفًا كبيرا 0B كبادئة في الشكل البديل عبر # .
|
d
|
يحول الوسيط إلى عدد عشري (decimal number). |
i
|
مشابه لـ "d "
|
o
|
يحول الوسيط إلى عدد ثماني (octal number).
الأعداد السالبة ستُعرض مع البادئة " |
u
|
مشابه لـ "d "
|
x
|
يحول الوسيط إلى عدد ستة عشري(hexadecimal number).
الأعداد السالبة ستُعرض مع البادئة " |
X
|
مكافئ ل x لكن مع استخدام الحروف الكبيرة.
|
الحقل | التنسيق (Format) |
e
|
يحول الوسائط العددية الكسرية (floating point) إلى الشكل الأسي مع رقم واحد قبل النقطة العشرية على الشكل [-]d.dddddde[+-]dd
تحدد الدقة (precision) عدد الأرقام بعد النقطة العشرية (القيمة الافتراضية تساوي 6). |
E
|
يكافئ "e " لكن يستخدم حرف E كبير للدلالة على الأس.
|
f
|
يحول الوسائط العددية الكسرية إلى الشكل الأسي مع رقم واحد قبل النقطة العشرية على الشكل [-]ddd.dddddd ، حيث تحدد الدقة عدد الأرقام بعد النقطة العشرية.
|
g
|
يحول الوسائط العددية الكسرية (floating point) باستخدام الشكل الأسي إن كان الأسّ أصغر من -4 أو أكبر من أو يساوي الدقة (precision)، أو يحوله إلى الشكل dd.dddd خلاف ذلك.
تحدد الدقة (precision) عدد الأرقام المهمة (significant digits). |
G
|
يكافئ "g " لكن يستخدم حرف E كبير للدلالة على الأس.
|
a
|
يحول الوسائط العددية الكسرية إلى الشكل ،[-]0xh.hhhhp[+-]dd والذي يتألف من علامة إشارة اختيارية و "0x " و والجزء الكسري على الشكل الستة عشري و "p " والجزء الأسي على شكل عدد عشري.
|
A
|
يكافئ "a " لكن يستخدم الحرفين الكبيرين X و P
|
الحقل | تنسيقات أخرى |
c
|
الوسيط (Argument) هو الكود الرقمي لحرف واحد أو سلسلة نصية. |
p
|
فيمة التعبير argument.inspect .
|
s
|
الوسيط (Argument) هو سلسلة نصية المراد تعويضها. إن احتوى شكل التنسيق على الدقة (precision)، فسيكون عدد الأحرف المنسوخة أصغر من تلك الدقة. |
%
|
ستُعرض علامة النسبة المئوية بنفسها، ولن يؤخذ أي وسيط. |
تقوم الحقول flags
بتعديل سلوك التنسيقات. أحرف الراية flag
هي كالتالي:
الراية | تُطبق على | شرح |
---|---|---|
مسافة بيضاء | bBdiouxX
aAeEfgG (numeric fmt) |
يترك مسافة بيضاء في بداية الأعداد غير السالبة.
بالنسبة لـ `o' و `x' و `X' و `b' و`B'، تُستخدم علامة الإشارة ناقص مع القيمة المطلقة للأعداد السالبة. |
(digit)$
|
الكل | يحدد قيمة الوسيط المطلقة (absolute argument number) لهذا الحقل. قيم الوسيط المطلقة والنسبية لا يمكن خلطها في نصوص sprintf .
|
#
|
bBoxX
aAeEfgG |
تستخدم تنسيقا بديلا.
بالنسبة للتحويل ` بالنسبة للتحويلات `x' و `X' و `b' و`B'، بالنسبة للأعداد المخالفة للصفر، تُبدأ النتيجة بـ
بالنسبة ل`a'و `A' و `e' و `Eو `f' و `g' و 'G'، تُفرض إضافة النقطة العشرية، حتى لو لم يكن بعدها أي أرقام. بالنسبة لـ `g' و 'G' ، لا تزيل الأصفار الإضافية. |
+
|
bBdiouxX
aAeEfgG (numeric fmt) |
تضيف علامة + في بداية الأعداد الموجبة.
بالنسبة لـ `o' و `x' و `X' و `b' و`B'، تُستخدم علامة الإشارة ناقص مع القيمة المطلقة للأعداد السالبة. |
-
|
الكل | تعدل نتيحة التحويل من الجهة اليسرى. |
0
|
bBdiouxX
aAeEfgG (numeric fmt) |
تملأ المنازل الرقمية الفارغة بالأصفار، وليس المسافات البيضاء، بالنسبة لـ `o' و `x' و `X' و `b' و`B'، تُستخدم radix-1 للأعداد السالبة المُنسّقة على شكل مكملات. |
*
|
الكل | تستخدم الوسيط الموالي كعرض للحقل. إن كان سالبًا تعدل نتيحة التحويل من الجهة اليسرى، إن كانت العلامة * متبوعة بعدد وبعلامة الدولار، يُستخدم الوسيط كعرض. |
أمثلة على الرايات flags
:
# `+' and space flag specifies the sign of non-negative numbers.
sprintf("%d", 123) #=> "123"
sprintf("%+d", 123) #=> "+123"
sprintf("% d", 123) #=> " 123"
# `#' flag for `o' increases number of digits to show `0'.
# `+' and space flag changes format of negative numbers.
sprintf("%o", 123) #=> "173"
sprintf("%#o", 123) #=> "0173"
sprintf("%+o", -123) #=> "-173"
sprintf("%o", -123) #=> "..7605"
sprintf("%#o", -123) #=> "..7605"
# `#' flag for `x' add a prefix `0x' for non-zero numbers.
# `+' and space flag disables complements for negative numbers.
sprintf("%x", 123) #=> "7b"
sprintf("%#x", 123) #=> "0x7b"
sprintf("%+x", -123) #=> "-7b"
sprintf("%x", -123) #=> "..f85"
sprintf("%#x", -123) #=> "0x..f85"
sprintf("%#x", 0) #=> "0"
# `#' for `X' uses the prefix `0X'.
sprintf("%X", 123) #=> "7B"
sprintf("%#X", 123) #=> "0X7B"
# `#' flag for `b' add a prefix `0b' for non-zero numbers.
# `+' and space flag disables complements for negative numbers.
sprintf("%b", 123) #=> "1111011"
sprintf("%#b", 123) #=> "0b1111011"
sprintf("%+b", -123) #=> "-1111011"
sprintf("%b", -123) #=> "..10000101"
sprintf("%#b", -123) #=> "0b..10000101"
sprintf("%#b", 0) #=> "0"
# `#' for `B' uses the prefix `0B'.
sprintf("%B", 123) #=> "1111011"
sprintf("%#B", 123) #=> "0B1111011"
# `#' for `e' forces to show the decimal point.
sprintf("%.0e", 1) #=> "1e+00"
sprintf("%#.0e", 1) #=> "1.e+00"
# `#' for `f' forces to show the decimal point.
sprintf("%.0f", 1234) #=> "1234"
sprintf("%#.0f", 1234) #=> "1234."
# `#' for `g' forces to show the decimal point.
# It also disables stripping lowest zeros.
sprintf("%g", 123.4) #=> "123.4"
sprintf("%#g", 123.4) #=> "123.400"
sprintf("%g", 123456) #=> "123456"
sprintf("%#g", 123456) #=> "123456."
الحقل width
هو عدد صحيح اختياري، متبوع اختياريًا بنقطة وحقل precision
. يحدد width
الحد الأدنى لعدد الأحرف التي ستُكتب في النتيجة الخاصة بهذا الحقل.
أمثلة على الحقل width
:
# padding is done by spaces, width=20
# 0 or radix-1. <------------------>
sprintf("%20d", 123) #=> " 123"
sprintf("%+20d", 123) #=> " +123"
sprintf("%020d", 123) #=> "00000000000000000123"
sprintf("%+020d", 123) #=> "+0000000000000000123"
sprintf("% 020d", 123) #=> " 0000000000000000123"
sprintf("%-20d", 123) #=> "123 "
sprintf("%-+20d", 123) #=> "+123 "
sprintf("%- 20d", 123) #=> " 123 "
sprintf("%020x", -123) #=> "..ffffffffffffffff85"
بالنسبة للحقول العددية، يتحكم الحقل precision
في عدد المنازل العشرية المعروضة. بالنسبة للحقول النصية، يحدد الحقل precision
الحد الأقصى لعدد الأحرف التي ستُنسخ من السلسلة. (وهكذا، فإن تسلسل التنسيق %10.10s
سيخصص دائمًا عشرة أحرف بالضبط في النتيجة.)
أمثلة على الحقل precision
:
# precision for `d', 'o', 'x' and 'b' is
# minimum number of digits <------>
sprintf("%20.8d", 123) #=> " 00000123"
sprintf("%20.8o", 123) #=> " 00000173"
sprintf("%20.8x", 123) #=> " 0000007b"
sprintf("%20.8b", 123) #=> " 01111011"
sprintf("%20.8d", -123) #=> " -00000123"
sprintf("%20.8o", -123) #=> " ..777605"
sprintf("%20.8x", -123) #=> " ..ffff85"
sprintf("%20.8b", -11) #=> " ..110101"
# "0x" and "0b" for `#x' and `#b' is not counted for
# precision but "0" for `#o' is counted. <------>
sprintf("%#20.8d", 123) #=> " 00000123"
sprintf("%#20.8o", 123) #=> " 00000173"
sprintf("%#20.8x", 123) #=> " 0x0000007b"
sprintf("%#20.8b", 123) #=> " 0b01111011"
sprintf("%#20.8d", -123) #=> " -00000123"
sprintf("%#20.8o", -123) #=> " ..777605"
sprintf("%#20.8x", -123) #=> " 0x..ffff85"
sprintf("%#20.8b", -11) #=> " 0b..110101"
# precision for `e' is number of
# digits after the decimal point <------>
sprintf("%20.8e", 1234.56789) #=> " 1.23456789e+03"
# precision for `f' is number of
# digits after the decimal point <------>
sprintf("%20.8f", 1234.56789) #=> " 1234.56789000"
# precision for `g' is number of
# significant digits <------->
sprintf("%20.8g", 1234.56789) #=> " 1234.5679"
# <------->
sprintf("%20.8g", 123456789) #=> " 1.2345679e+08"
# precision for `s' is
# maximum number of characters <------>
sprintf("%20.8s", "string test") #=> " string t"
بالنسبة للتنسيقات الأكثر تعقيدًا، تدعم روبي المراجع الاسمية (reference by name). حيث يستخدم النمط <name>s
نمط التنسيق (format style)، وذلك على خلاف النمط %{name}
.
البنية العامة
format(format_string [, arguments...] )→ string
المعاملات
format_string
التنسيق المراد تطبيقه
arguments...
الوسائط الممرة إلى format_string.
القيمة المُعادة
سلسلة نصية بعد تنسيقها.
أمثلة
مثال على استخدام التابع format
:
sprintf("%d %04x", 123, 123) #=> "123 007b"
sprintf("%08b '%4s'", 123, 123) #=> "01111011 ' 123'"
sprintf("%1$*2$s %2$d %1$s", "hello", 8) #=> " hello 8 hello"
sprintf("%1$*2$s %2$d", "hello", -8) #=> "hello -8"
sprintf("%+g:% g:%-g", 1.23, 1.23, 1.23) #=> "+1.23: 1.23:1.23"
sprintf("%u", -123) #=> "-123"
sprintf("%<foo>d : %<bar>f", { :foo => 1, :bar => 2 })
#=> 1 : 2.000000
sprintf("%{foo}f", { :foo => 1 })
# => "1f"
انظر أيضا
- التابع
sprintf
: ينسق السلاسل النصية.