الفرق بين المراجعتين لصفحة: «Ruby/Kernel/format»

من موسوعة حسوب
< Ruby‏ | Kernel
لا ملخص تعديل
لا ملخص تعديل
 
(مراجعتان متوسطتان بواسطة مستخدمين اثنين آخرين غير معروضتين)
سطر 3: سطر 3:
[[تصنيف: Ruby Method]]
[[تصنيف: Ruby Method]]
[[تصنيف: Ruby Kernel]]
[[تصنيف: Ruby Kernel]]
يعيد التابع <code>format</code> السلسلة النصية الناتجة عن تطبيق التابع المُعطى <code>format_string</code> (انظر فقرة البنية العامة) على الوسائط الإضافية المُمرّرة. داخل السلسلة النصية <code>format_string</code>، ستُنسخ كل الأحرف في النتيجة باستثناء تسلسلات التنسيق (format sequences).
يعيد التابع <code>format</code> السلسلة النصية المعطاة بعد تنسيقها بشكل معين.
==البنية العامة==
<syntaxhighlight lang="ruby">format(format_string [, arguments...] )→ string‎</syntaxhighlight>
==المعاملات==
===<code>format_string‎</code>===
السلسلة التي تحدد التنسيق. داخل سلسلة التنسيق <code>format_string</code>، ستُنسخ كل المحارف إلى السلسلة النصية الناتجة باستثناء سلسلة التنسيق (format sequences).


صياغة تسلسلات التنسيق تأخذ الشكل التالي:<syntaxhighlight lang="ruby">%[flags][width][.precision]type‎</syntaxhighlight>تتألف تسلسلات التنسيق من علامة النسبة المئوية، متبوعة بثلاث حقول اختيارية، <code>flags</code> و <code>width</code> و <code>precision.</code>، ثم تنتهي بحرف يحدد نوع الحقل.  يتحكم نوع الحقل في كيفية تأويل الوسيط المقابل <code>sprintf</code>، بينما تعدل الحقول <code>flags</code> ذلك التأويل.
صيغة سلسلة محارف التنسيق تأخذ الشكل التالي:<syntaxhighlight lang="ruby">%[flags][width][.precision]type‎</syntaxhighlight>تتألف سلسلة محارف التنسيق من علامة النسبة المئوية، متبوعةً بثلاث حقول اختيارية هي: <code>flags</code> و <code>width</code> و <code>precision</code> ثم تنتهي بمحرف يحدد حقل النوع <code>type</code>.  يتحكم حقل النوع في كيفية تأويل الوسيط المقابل <code>sprintf</code>، بينما تعدل الحقول <code>flags</code> ذلك التأويل.


احرف نوع الحقل هي:
محارف حقل النوع <code>type</code> هي:
{| class="wikitable"
{| class="wikitable"
!الحقل
!حقل النوع
!التنسيق (Integer)
!تنسيق الأعداد الصحيحة
|-
|-
|<code>b</code>
|<code>b</code>
|يحول الوسيط إلى عدد ثنائي (binary number).
|يحول الوسيط <code>arguments...‎</code> إلى عدد ثنائي (binary number).
الأعداد السالبة ستُعرض مع البادئة "<code>‎..1</code>‎".
الأعداد السالبة ستُعرض كمتمم ثنائي مع البادئة "<code>‎..1</code>‎".
|-
|-
|<code>B</code>
|<code>B</code>
|مكافئة لـ b، إلا أنها تستخدم حرفًا كبيرا <code>0B</code> كبادئة في الشكل البديل عبر <code>#</code>.
|يشبه النوع <code>b</code> إلا أنَّه يستخدم حرفًا كبيرًا <code>0B</code> للبادئة في التنسيق البديل عبر <code>#</code>.
|-
|-
|<code>d</code>
|<code>d</code>
|يحول الوسيط إلى عدد عشري (decimal number).
|يحول الوسيط <code>arguments...‎</code> إلى عدد عشري (decimal number).
|-
|-
|<code>i</code>
|<code>i</code>
|مشابه لـ "<code>d</code>"
|مشابه تمامًا للنوع "<code>d</code>".
|-
|-
|<code>o</code>
|<code>o</code>
|يحول الوسيط إلى عدد ثماني (octal number).
|يحول الوسيط إلى عدد ثماني (octal number).
 
الأعداد السالبة ستُعرَض كمتمم ثنائي مع البادئة "<code>‎..7</code>‎".
الأعداد السالبة ستُعرض مع البادئة "<code>‎..7</code>‎".
|-
|-
|<code>u</code>
|<code>u</code>
|مشابه لـ "<code>d</code>"
|مشابه تمامًا للنوع "<code>d</code>".
|-
|-
|<code>x</code>
|<code>x</code>
|يحول الوسيط إلى عدد ستة عشري(hexadecimal number).
|يحول الوسيط <code>arguments...‎</code> إلى عدد ست عشري (hexadecimal number).
 
الأعداد السالبة ستُعرض كمتمم ثنائي مع البادئة "<code>‎..f</code>" (تمثل سلسلة نصية  لا منتهية بالمحارف <code>f</code>).
الأعداد السالبة ستُعرض مع البادئة "<code>‎..f</code>" (تمثل سلسلة نصية  لامنتهية من حروف <code>f</code>)
|-
|-
|<code>X</code>
|<code>X</code>
|مكافئ ل <code>x</code> لكن مع استخدام الحروف الكبيرة.
|مكافئ للنوع <code>x</code> لكن مع استخدام الحروف الكبيرة.
|-
|-
!الحقل
!حقل النوع
!التنسيق (Format)
!تنسيق الأعداد العشرية
|-
|-
|<code>e</code>
|<code>e</code>
|يحول الوسائط العددية الكسرية (floating point) إلى الشكل الأسي مع رقم واحد قبل النقطة العشرية على الشكل ‎<code>[-]d.dddddde[+-]dd</code>
|يحول الوسائط <code>arguments...‎</code> العددية الكسرية (floating point) إلى الشكل الأسي مع رقم واحد قبل النقطة العشرية على الشكل ‎<code>[-]d.dddddde[+-]dd</code>.
تحدد الدقة (‎precision) عدد الأرقام بعد النقطة العشرية (القيمة الافتراضية تساوي 6).
تحدد الدقة (‎precision) عدد الأرقام بعد النقطة العشرية (القيمة الافتراضية تساوي 6).
|-
|-
|<code>E</code>
|<code>E</code>
|يكافئ "<code>e</code>"  لكن يستخدم حرف <code>E</code> كبير للدلالة على الأس.
|يكافئ "<code>e</code>"  لكن يستخدم الحرف <code>E</code> الكبير للدلالة على الأس.
|-
|-
|<code>f</code>
|<code>f</code>
|يحول الوسائط العددية الكسرية إلى الشكل الأسي مع رقم واحد قبل النقطة العشرية على الشكل ‎<code>[-]ddd.dddddd</code>، حيث تحدد الدقة عدد الأرقام بعد النقطة العشرية.
|يحول الوسائط <code>arguments...‎</code> العددية الكسرية إلى الشكل الأسي بالشكل ‎<code>[-]ddd.dddddd</code>، حيث تحدد الدقة عدد الأرقام بعد النقطة العشرية.
|-
|-
|<code>g</code>
|<code>g</code>
|يحول الوسائط العددية الكسرية (floating point) باستخدام الشكل الأسي إن كان الأسّ أصغر من ‎ <code>-4</code>‎أو أكبر من أو يساوي الدقة (precision)، أو يحوله إلى الشكل <code>dd.dddd</code> خلاف ذلك.
|يحول الوسائط <code>arguments...‎</code> العددية الكسرية (floating point) باستخدام الشكل الأسي إن كان الأسّ أصغر من ‎ <code>-4</code>‎أو أكبر من أو يساوي الدقة (precision)، أو يحوله إلى الشكل <code>dd.dddd</code> خلاف ذلك.
 
تحدد الدقة (‎precision) عدد الأرقام المهمة (significant digits).
تحدد الدقة (‎precision) عدد الأرقام المهمة (significant digits).
|-
|-
|<code>G</code>
|<code>G</code>
|يكافئ "<code>g</code>"  لكن يستخدم حرف <code>E</code> كبير للدلالة على الأس.
|يكافئ "<code>g</code>"  لكن يستخدم الحرف <code>E</code> الكبير للدلالة على الأس.
|-
|-
|<code>a</code>
|<code>a</code>
|يحول الوسائط العددية الكسرية إلى الشكل ‎،<code>[-]0xh.hhhhp[+-]dd</code> والذي يتألف من علامة إشارة اختيارية  و "<code>0x</code>" و والجزء الكسري على الشكل الستة عشري و "<code>p</code>" والجزء الأسي على شكل عدد عشري.
|يحول الوسائط <code>arguments...‎</code> العددية الكسرية إلى الشكل ‎،<code>[-]0xh.hhhhp[+-]dd</code> والذي يتألف من علامة إشارة اختيارية  و "<code>0x</code>" و والجزء الكسري على الشكل الست عشري و "<code>p</code>" والجزء الأسي على شكل عدد عشري.
|-
|-
|<code>A</code>
|<code>A</code>
|يكافئ "<code>a</code>"  لكن يستخدم الحرفين الكبيرين <code>X</code>  و <code>P</code>
|يكافئ "<code>a</code>"  لكن يستخدم الحرفين <code>X</code>  و <code>P</code> الكبيرين.
|-
|-
!الحقل
!حقل النوع
!تنسيقات أخرى
!تنسيقات أخرى
|-
|-
|<code>c</code>
|<code>c</code>
|الوسيط (Argument) هو الكود الرقمي لحرف واحد أو سلسلة نصية.
|الوسيط <code>arguments...‎</code> هو شيفرة رقمية لحرف واحد أو سلسلة نصية.
|-
|-
|<code>p</code>
|<code>p</code>
|فيمة التعبير <code>argument.inspect</code>.
|قيمة التعبير <code>argument.inspect</code>.
|-
|-
|<code>s</code>
|<code>s</code>
|الوسيط (Argument) هو سلسلة نصية المراد تعويضها. إن احتوى شكل التنسيق على الدقة (precision)، فسيكون عدد الأحرف المنسوخة أصغر من تلك الدقة.
|الوسيط <code>arguments...‎</code> هو سلسلة نصية يراد استبدالها. إن احتوى شكل التنسيق على دقة محددة (precision)، فسيكون عدد الأحرف المنسوخة أصغر من تلك الدقة.
|-
|-
|<code>%</code>
|<code>%</code>
|ستُعرض علامة النسبة المئوية بنفسها، ولن يؤخذ أي وسيط.
|ستُعرض علامة النسبة المئوية بنفسها، ولن تأخذ مكان أي وسيط.
|}
|}تعدل الحقول <code>flags</code> سلوك عملية التنسيق. الرايات التي يمكن استعمال مع الحقل <code>flag</code> هي كالتالي:
تقوم الحقول <code>flags</code> بتعديل سلوك التنسيقات. أحرف الراية <code>flag</code> هي كالتالي:
{| class="wikitable"
{| class="wikitable"
!الراية                
!الراية
!تُطبق على                
!تطبق على
!شرح
!شرح
|-
|-
|مسافة            بيضاء
|مسافة            بيضاء
|bBdiouxX
|bBdiouxX
aAeEfgG
aAeEfgG


(numeric fmt)
(numeric fmt)
|يترك مسافة بيضاء في بداية الأعداد غير السالبة.
|يترك مسافة بيضاء في بداية الأعداد غير السالبة.
بالنسبة لـ `o' و `x' و `X' و `b' و`B'، تُستخدم علامة الإشارة ناقص مع القيمة المطلقة للأعداد السالبة.
بالنسبة للتحويلات 'o' و 'x' و 'X' و 'b' و 'B'، تُستخدم علامة الإشارة ناقص مع القيمة المطلقة للأعداد السالبة.
|-
|-
|<code>(digit)$</code>
|<code>(digit)$</code>
|الكل
|الكل
|يحدد قيمة الوسيط المطلقة (absolute argument number) لهذا الحقل. قيم الوسيط المطلقة والنسبية لا يمكن خلطها في نصوص <code>sprintf</code> .
|يحدد قيمة الوسيط المطلقة (absolute argument number) لهذا الحقل. قيم الوسيط المطلقة والنسبية لا يمكن خلطها في النصوص المراد طباعتها عبر <code>sprintf</code>.
|-
|-
|<code>#</code>
|<code>#</code>
|bBoxX
|bBoxX
aAeEfgG
aAeEfgG
|تستخدم تنسيقا بديلا.
|تستخدم تنسيقًا بديلًا.
بالنسبة للتحويل `<code>o</code>'، ترفع الدقة إلى أن يصير الرقم الأول `<code>0</code>'  إن لم يتم تنسيقه كمُكمّلات (complements).
بالنسبة للتحويل '<code>o</code>'، ترفع الدقة إلى أن يصير الرقم الأول '<code>0</code>'  إن لم يتم تنسيقه كمتمم (complements).


بالنسبة للتحويلات  `x' و `X' و `b' و`B'، بالنسبة للأعداد المخالفة للصفر، تُبدأ النتيجة بـ
بالنسبة للتحويلات  'x' و 'X' و 'b' و 'B'، بالنسبة للأعداد المخالفة للصفر، تُبدأ النتيجة بالبادئة


<code>``0x<nowiki>''</nowiki></code>و  <code>``0X<nowiki>''</nowiki></code> و <code>``0b<nowiki>''</nowiki></code>  و<code>``0B<nowiki>''</nowiki></code>, تواليًا.
<code><nowiki>''</nowiki>0x<nowiki>''</nowiki></code>و  <code><nowiki>''</nowiki>0X<nowiki>''</nowiki></code> و <code><nowiki>''</nowiki>0b<nowiki>''</nowiki></code>  و <code><nowiki>''</nowiki>0B<nowiki>''</nowiki></code> على التوالي.


بالنسبة ل`a'و `A' و `e' و `Eو `f' و `g' و 'G'، تُفرض إضافة النقطة العشرية، حتى لو لم يكن بعدها أي أرقام.
بالنسبة لتحويلات 'a' و 'A' و 'e' و 'E' و 'f' و 'g' و 'G'، تُفرض إضافة النقطة العشرية، حتى لو لم يكن بعدها أي أرقام.


بالنسبة لـ `g' و  'G' ، لا تزيل الأصفار الإضافية.
بالنسبة للتحويلات 'g' و  'G'، لا تزال الأصفار الإضافية.
|-
|-
|<code>+</code>
|<code>+</code>
|bBdiouxX
|bBdiouxX
aAeEfgG
aAeEfgG


(numeric fmt)
(numeric fmt)
|تضيف علامة + في بداية الأعداد الموجبة.
|تضاف العلامة <code>+</code> في بداية الأعداد الموجبة.
بالنسبة لـ `o' و `x' و `X' و `b' و`B'، تُستخدم علامة الإشارة ناقص مع القيمة المطلقة للأعداد السالبة.
بالنسبة للتحويلات 'o' و 'x' و 'X' و 'b' و 'B'، تُستخدم علامة إشارة السالبة <code>-</code> مع القيمة المطلقة للأعداد السالبة.
|-
|-
|<code>-</code>
|<code>-</code>
|الكل
|الكل
|تعدل نتيحة التحويل من الجهة اليسرى.
|تعدِّل نتيحة تنسيق السلسلة النصية إلى الجهة اليسرى.
|-
|-
|<code>0</code>
|<code>0</code>
|bBdiouxX
|bBdiouxX
aAeEfgG
aAeEfgG


(numeric fmt)
(numeric fmt)
|تملأ المنازل الرقمية الفارغة بالأصفار، وليس المسافات البيضاء، بالنسبة لـ `o' و `x' و `X' و `b' و`B'، تُستخدم radix-1  للأعداد السالبة المُنسّقة على شكل مكملات.
|تملأ المنازل الرقمية الفارغة بالأصفار، وليس المسافات البيضاء.
بالنسبة للتحويلات 'o' و 'x' و 'X' و 'b' و 'B'، تُستخدم الأساسradix-1  للأعداد السالبة المُنسّقة على شكل متممات.
|-
|-
|<code>*</code>
|<code>*</code>
|الكل
|الكل
|تستخدم الوسيط الموالي كعرض للحقل. إن كان سالبًا تعدل نتيحة التحويل من الجهة اليسرى، إن كانت العلامة * متبوعة بعدد وبعلامة الدولار، يُستخدم الوسيط كعرض.
|يستخدم الوسيط الموالي كعرض للسلسلة النصية المراد تنسيقها. إن كان سالبًا، فستعدل نتيحة التحويل إلى الجهة اليسرى. إن اتبِعت العلامة <code>*</code> بعدد وبالعلامة <code>$</code>، فسيُستخدم الوسيط كعرض للسلسلة النصية.
|}
|}أمثلة على استعمال الرايات <code>flags</code>:<syntaxhighlight lang="ruby"># تحدد الراية "+" والمسافة البيضاء إشارة الأعداد غير السالبة
أمثلة على الرايات <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'.
# يرفع عدد المنازل العددية  "o" استخدام الراية "#" مع الحرف
# `+' and space flag changes format of negative numbers.
# تغير الراية "+" والمسافة البيضاء تنسيق الأعداد غير السالبة
sprintf("%o", 123)  #=> "173"
sprintf("%o", 123)  #=> "173"
sprintf("%#o", 123)  #=> "0173"
sprintf("%#o", 123)  #=> "0173"
سطر 155: سطر 152:
sprintf("%#o", -123) #=> "..7605"
sprintf("%#o", -123) #=> "..7605"


# `#' flag for `x' add a prefix `0x' for non-zero numbers.
# إلى الأعداد غير المعدومة x  يضيف البادئة  "x"  استخدام الراية "#" مع الحرف
# `+' and space flag disables complements for negative numbers.
# تعطل الراية "+" والمسافة البيضاء مكمل الأعداد غير السالبة
sprintf("%x", 123)  #=> "7b"
sprintf("%x", 123)  #=> "7b"
sprintf("%#x", 123)  #=> "0x7b"
sprintf("%#x", 123)  #=> "0x7b"
سطر 164: سطر 161:
sprintf("%#x", 0)    #=> "0"
sprintf("%#x", 0)    #=> "0"


# `#' for `X' uses the prefix `0X'.
# 0X تستخدم البادئة  "X" الراية "#" مع الحرف
 
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.
# إلى الأعداد غير المعدومة b  يضيف البادئة  "b"  استخدام الراية "#" مع الحرف
# `+' and space flag disables complements for negative numbers.
# تعطل الراية "+" والمسافة البيضاء مكمل الأعداد غير السالبة
sprintf("%b", 123)  #=> "1111011"
sprintf("%b", 123)  #=> "1111011"
sprintf("%#b", 123)  #=> "0b1111011"
sprintf("%#b", 123)  #=> "0b1111011"
سطر 177: سطر 175:
sprintf("%#b", 0)    #=> "0"
sprintf("%#b", 0)    #=> "0"


# `#' for `B' uses the prefix `0B'.
# 0B تستخدم البادئة  "B" الراية "#" مع الحرف
 
sprintf("%B", 123)  #=> "1111011"
sprintf("%B", 123)  #=> "1111011"
sprintf("%#B", 123) #=> "0B1111011"
sprintf("%#B", 123) #=> "0B1111011"


# `#' for `e' forces to show the decimal point.
# تؤدي إلى إظهار النقطة العشرية  "b" الراية "#" مع الحرف
 
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.
# تؤدي إلى إظهار النقطة العشرية  "f" الراية "#" مع الحرف
 
sprintf("%.0f", 1234)  #=> "1234"
sprintf("%.0f", 1234)  #=> "1234"
sprintf("%#.0f", 1234) #=> "1234."
sprintf("%#.0f", 1234) #=> "1234."


# `#' for `g' forces to show the decimal point.
# تؤدي إلى إظهار النقطة العشرية  "g" الراية "#" مع الحرف
# It also disables stripping lowest zeros.
# كما تعطل حذف الأصفار الدنيا
 
sprintf("%g", 123.4)  #=> "123.4"
sprintf("%g", 123.4)  #=> "123.4"
sprintf("%#g", 123.4)  #=> "123.400"
sprintf("%#g", 123.4)  #=> "123.400"
sprintf("%g", 123456)  #=> "123456"
sprintf("%g", 123456)  #=> "123456"
sprintf("%#g", 123456) #=> "123456."</syntaxhighlight>الحقل <code>width</code> هو عدد صحيح اختياري، متبوع اختياريًا بنقطة وحقل <code>precision</code>.  يحدد <code>width</code> الحد الأدنى لعدد الأحرف التي ستُكتب في النتيجة الخاصة بهذا الحقل.
sprintf("%#g", 123456) #=> "123456."</syntaxhighlight>الحقل <code>width</code> هو عدد صحيح اختياري يُتبَع اختياريًا بنقطة وبقيمة تمثِّل حقل الدقة <code>precision</code>.  يحدد الحقل <code>width</code> الحد الأدنى لعدد محارف السلسلة النصية الناتجة.


أمثلة على الحقل <code>width</code>:<syntaxhighlight lang="ruby"># padding is done by spaces,      width=20
أمثلة على الحقل <code>width</code>:<syntaxhighlight lang="ruby"># يتم التطويل عبر المسافات البيضاء ,      width=20
# 0 or radix-1.            <------------------>
# 0 or radix-1.            <------------------>
sprintf("%20d", 123)  #=> "                123"
sprintf("%20d", 123)  #=> "                123"
سطر 207: سطر 209:
sprintf("%- 20d", 123) #=> " 123                "
sprintf("%- 20d", 123) #=> " 123                "
sprintf("%020x", -123) #=> "..ffffffffffffffff85"
sprintf("%020x", -123) #=> "..ffffffffffffffff85"
</syntaxhighlight>بالنسبة للحقول العددية، يتحكم الحقل <code>precision</code> في عدد المنازل العشرية المعروضة. بالنسبة للحقول النصية، يحدد الحقل <code>precision</code> الحد الأقصى لعدد الأحرف التي ستُنسخ من السلسلة(وهكذا، فإن تسلسل التنسيق ‎<code>%10.10s</code> سيخصص دائمًا عشرة أحرف بالضبط في النتيجة.)
</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
أمثلة على الحقل <code>precision</code>:<syntaxhighlight lang="ruby"># هو "d" و "x" و "o" و "b" دقة
# minimum number of digits              <------>
# الحد الأدنى من المنازل العددية        <------>
sprintf("%20.8d", 123)  #=> "            00000123"
sprintf("%20.8d", 123)  #=> "            00000123"
sprintf("%20.8o", 123)  #=> "            00000173"
sprintf("%20.8o", 123)  #=> "            00000173"
سطر 220: سطر 222:
sprintf("%20.8b", -11)  #=> "            ..110101"
sprintf("%20.8b", -11)  #=> "            ..110101"


# "0x" and "0b" for `#x' and `#b' is not counted for
# في الدقة `#x' و `#b' مع "‎0x" , "0b" لا تحتسب في
# precision but "0" for `#o' is counted. <------>
# "‎#o‎" مع ‎0 ‎لكن تحتسب <------>
sprintf("%#20.8d", 123)  #=> "            00000123"
sprintf("%#20.8d", 123)  #=> "            00000123"
sprintf("%#20.8o", 123)  #=> "            00000173"
sprintf("%#20.8o", 123)  #=> "            00000173"
سطر 231: سطر 233:
sprintf("%#20.8b", -11)  #=> "          0b..110101"
sprintf("%#20.8b", -11)  #=> "          0b..110101"


# precision for `e' is number of
# هي عدد "e" دقة
# digits after the decimal point           <------>
# المنازل بعد النقطة العشرية           <------>
sprintf("%20.8e", 1234.56789) #=> "      1.23456789e+03"
sprintf("%20.8e", 1234.56789) #=> "      1.23456789e+03"


# precision for `f' is number of
# هي عدد "f" دقة
# digits after the decimal point              <------>
# المنازل بعد النقطة العشرية          <------>
sprintf("%20.8f", 1234.56789) #=> "      1234.56789000"
sprintf("%20.8f", 1234.56789) #=> "      1234.56789000"


# precision for `g' is number of
# هي عدد "g" دقة
# significant digits                          <------->
# المنازل العشرية الهامة          <------>
sprintf("%20.8g", 1234.56789) #=> "          1234.5679"
sprintf("%20.8g", 1234.56789) #=> "          1234.5679"


سطر 246: سطر 248:
sprintf("%20.8g", 123456789)  #=> "      1.2345679e+08"
sprintf("%20.8g", 123456789)  #=> "      1.2345679e+08"


# precision for `s' is
# هي عدد "s" دقة
# maximum number of characters                    <------>
# الحد الأقصى للحروف          <------>
sprintf("%20.8s", "string test") #=> "            string t"
sprintf("%20.8s", "string test") #=> "            string t"


</syntaxhighlight>بالنسبة للتنسيقات الأكثر تعقيدًا، تدعم روبي المراجع الاسمية (reference by name). حيث يستخدم النمط ‎<code><name>s</code> نمط التنسيق (format style)، وذلك على خلاف النمط‎ <code>%{name}</code>.
</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>arguments...‎</code>===
الوسائط الممرة إلى <code>format_string‎.</code>
القيم المراد تنسيقها وفقًا لسلسلة التنسيق <code>format_string‎</code>.
==القيمة المُعادة==
==القيمة المعادة==
سلسلة نصية بعد تنسيقها.
تعاد سلسلة نصية تحوي قيمة المعامل <code>arguments...‎</code> بعد تنسيقها وفقًا لسلسلة التنسيق <code>format_string‎</code>.
 
==أمثلة==
==أمثلة==
مثال على استخدام التابع <code>format‎</code>:<syntaxhighlight lang="ruby">sprintf("%d %04x", 123, 123)              #=> "123 007b"
مثال على استخدام التابع <code>format‎</code>:<syntaxhighlight lang="ruby">sprintf("%d %04x", 123, 123)              #=> "123 007b"
سطر 276: سطر 270:
   # => "1f"</syntaxhighlight>
   # => "1f"</syntaxhighlight>
==انظر أيضا==
==انظر أيضا==
*التابع <code>[[Ruby/Kernel/sprintf|sprintf]]</code>: ينسق السلاسل النصية.
*التابع <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‎ في توثيق روبي الرسمي.]

المراجعة الحالية بتاريخ 14:32، 17 نوفمبر 2018

يعيد التابع format السلسلة النصية المعطاة بعد تنسيقها بشكل معين.

البنية العامة

format(format_string [, arguments...] ) string

المعاملات

format_string‎

السلسلة التي تحدد التنسيق. داخل سلسلة التنسيق format_string، ستُنسخ كل المحارف إلى السلسلة النصية الناتجة باستثناء سلسلة التنسيق (format sequences).

صيغة سلسلة محارف التنسيق تأخذ الشكل التالي:

%[flags][width][.precision]type

تتألف سلسلة محارف التنسيق من علامة النسبة المئوية، متبوعةً بثلاث حقول اختيارية هي: flags و width و precision ثم تنتهي بمحرف يحدد حقل النوع type. يتحكم حقل النوع في كيفية تأويل الوسيط المقابل sprintf، بينما تعدل الحقول flags ذلك التأويل.

محارف حقل النوع type هي:

حقل النوع تنسيق الأعداد الصحيحة
b يحول الوسيط arguments...‎ إلى عدد ثنائي (binary number).

الأعداد السالبة ستُعرض كمتمم ثنائي مع البادئة "‎..1‎".

B يشبه النوع b إلا أنَّه يستخدم حرفًا كبيرًا 0B للبادئة في التنسيق البديل عبر #.
d يحول الوسيط arguments...‎ إلى عدد عشري (decimal number).
i مشابه تمامًا للنوع "d".
o يحول الوسيط إلى عدد ثماني (octal number).

الأعداد السالبة ستُعرَض كمتمم ثنائي مع البادئة "‎..7‎".

u مشابه تمامًا للنوع "d".
x يحول الوسيط arguments...‎ إلى عدد ست عشري (hexadecimal number).

الأعداد السالبة ستُعرض كمتمم ثنائي مع البادئة "‎..f" (تمثل سلسلة نصية لا منتهية بالمحارف f).

X مكافئ للنوع x لكن مع استخدام الحروف الكبيرة.
حقل النوع تنسيق الأعداد العشرية
e يحول الوسائط arguments...‎ العددية الكسرية (floating point) إلى الشكل الأسي مع رقم واحد قبل النقطة العشرية على الشكل ‎[-]d.dddddde[+-]dd.

تحدد الدقة (‎precision) عدد الأرقام بعد النقطة العشرية (القيمة الافتراضية تساوي 6).

E يكافئ "e" لكن يستخدم الحرف E الكبير للدلالة على الأس.
f يحول الوسائط arguments...‎ العددية الكسرية إلى الشكل الأسي بالشكل ‎[-]ddd.dddddd، حيث تحدد الدقة عدد الأرقام بعد النقطة العشرية.
g يحول الوسائط arguments...‎ العددية الكسرية (floating point) باستخدام الشكل الأسي إن كان الأسّ أصغر من ‎ -4‎أو أكبر من أو يساوي الدقة (precision)، أو يحوله إلى الشكل dd.dddd خلاف ذلك.

تحدد الدقة (‎precision) عدد الأرقام المهمة (significant digits).

G يكافئ "g" لكن يستخدم الحرف E الكبير للدلالة على الأس.
a يحول الوسائط arguments...‎ العددية الكسرية إلى الشكل ‎،[-]0xh.hhhhp[+-]dd والذي يتألف من علامة إشارة اختيارية و "0x" و والجزء الكسري على الشكل الست عشري و "p" والجزء الأسي على شكل عدد عشري.
A يكافئ "a" لكن يستخدم الحرفين X و P الكبيرين.
حقل النوع تنسيقات أخرى
c الوسيط arguments...‎ هو شيفرة رقمية لحرف واحد أو سلسلة نصية.
p قيمة التعبير argument.inspect.
s الوسيط arguments...‎ هو سلسلة نصية يراد استبدالها. إن احتوى شكل التنسيق على دقة محددة (precision)، فسيكون عدد الأحرف المنسوخة أصغر من تلك الدقة.
% ستُعرض علامة النسبة المئوية بنفسها، ولن تأخذ مكان أي وسيط.

تعدل الحقول flags سلوك عملية التنسيق. الرايات التي يمكن استعمال مع الحقل flag هي كالتالي:

الراية تطبق على شرح
مسافة بيضاء bBdiouxX

aAeEfgG

(numeric fmt)

يترك مسافة بيضاء في بداية الأعداد غير السالبة.

بالنسبة للتحويلات 'o' و 'x' و 'X' و 'b' و 'B'، تُستخدم علامة الإشارة ناقص مع القيمة المطلقة للأعداد السالبة.

(digit)$ الكل يحدد قيمة الوسيط المطلقة (absolute argument number) لهذا الحقل. قيم الوسيط المطلقة والنسبية لا يمكن خلطها في النصوص المراد طباعتها عبر sprintf.
# bBoxX

aAeEfgG

تستخدم تنسيقًا بديلًا.

بالنسبة للتحويل 'o'، ترفع الدقة إلى أن يصير الرقم الأول '0' إن لم يتم تنسيقه كمتمم (complements).

بالنسبة للتحويلات 'x' و 'X' و 'b' و 'B'، بالنسبة للأعداد المخالفة للصفر، تُبدأ النتيجة بالبادئة

''0x''و ''0X'' و ''0b'' و ''0B'' على التوالي.

بالنسبة لتحويلات '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:

# تحدد الراية "+" والمسافة البيضاء إشارة الأعداد غير السالبة
sprintf("%d", 123)  #=> "123"
sprintf("%+d", 123) #=> "+123"
sprintf("% d", 123) #=> " 123"

# يرفع عدد المنازل العددية  "o" استخدام الراية "#" مع الحرف
# تغير الراية "+" والمسافة البيضاء تنسيق الأعداد غير السالبة
sprintf("%o", 123)   #=> "173"
sprintf("%#o", 123)  #=> "0173"
sprintf("%+o", -123) #=> "-173"
sprintf("%o", -123)  #=> "..7605"
sprintf("%#o", -123) #=> "..7605"

#  إلى الأعداد غير المعدومة x  يضيف البادئة   "x"  استخدام الراية "#" مع الحرف
# تعطل الراية "+" والمسافة البيضاء مكمل الأعداد غير السالبة
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"

# 0X تستخدم البادئة  "X" الراية "#" مع الحرف 

sprintf("%X", 123)  #=> "7B"
sprintf("%#X", 123) #=> "0X7B"

#  إلى الأعداد غير المعدومة b  يضيف البادئة   "b"  استخدام الراية "#" مع الحرف
# تعطل الراية "+" والمسافة البيضاء مكمل الأعداد غير السالبة
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"

# 0B تستخدم البادئة  "B" الراية "#" مع الحرف 

sprintf("%B", 123)  #=> "1111011"
sprintf("%#B", 123) #=> "0B1111011"

#  تؤدي إلى إظهار النقطة العشرية  "b" الراية "#" مع الحرف

sprintf("%.0e", 1)  #=> "1e+00"
sprintf("%#.0e", 1) #=> "1.e+00"

#  تؤدي إلى إظهار النقطة العشرية  "f" الراية "#" مع الحرف

sprintf("%.0f", 1234)  #=> "1234"
sprintf("%#.0f", 1234) #=> "1234."

#  تؤدي إلى إظهار النقطة العشرية  "g" الراية "#" مع الحرف
#  كما تعطل حذف الأصفار الدنيا

sprintf("%g", 123.4)   #=> "123.4"
sprintf("%#g", 123.4)  #=> "123.400"
sprintf("%g", 123456)  #=> "123456"
sprintf("%#g", 123456) #=> "123456."

الحقل width هو عدد صحيح اختياري يُتبَع اختياريًا بنقطة وبقيمة تمثِّل حقل الدقة precision. يحدد الحقل width الحد الأدنى لعدد محارف السلسلة النصية الناتجة. أمثلة على الحقل width:

# يتم التطويل عبر المسافات البيضاء ,       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:

# هو "d" و "x" و "o" و "b" دقة 
# الحد الأدنى من المنازل العددية         <------>
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"

#  في الدقة `#x' و `#b' مع "‎0x" , "0b" لا تحتسب في 
#  "‎#o‎" مع ‎0 ‎لكن تحتسب  <------>
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"

# هي عدد "e" دقة
# المنازل بعد النقطة العشرية           <------>
sprintf("%20.8e", 1234.56789) #=> "      1.23456789e+03"

# هي عدد "f" دقة
# المنازل بعد النقطة العشرية           <------>
sprintf("%20.8f", 1234.56789) #=> "       1234.56789000"

# هي عدد "g" دقة
# المنازل العشرية الهامة           <------>
sprintf("%20.8g", 1234.56789) #=> "           1234.5679"

#                                         <------->
sprintf("%20.8g", 123456789)  #=> "       1.2345679e+08"

# هي عدد "s" دقة
# الحد الأقصى للحروف           <------>
sprintf("%20.8s", "string test") #=> "            string t"

بالنسبة للتنسيقات الأكثر تعقيدًا، تدعم روبي المراجع الاسمية (reference by name). حيث يستخدم النمط ‎%<name>s نمط التنسيق (format style)، وذلك على خلافًا للنمط {name‎}%.

arguments...‎

القيم المراد تنسيقها وفقًا لسلسلة التنسيق 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: ينسق السلاسل النصية ثم يطبعها.

مصادر