الفرق بين المراجعتين ل"Ruby/Kernel/sprintf"

من موسوعة حسوب
< Ruby‏ | Kernel
اذهب إلى التنقل اذهب إلى البحث
(أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: التابع <code>sprintf‎</code> الخاص بالصنف <code>Kernel</code> في روبي}}</noinclude> تصنيف: Ruby تصن...')
 
سطر 3: سطر 3:
 
[[تصنيف: Ruby Method]]
 
[[تصنيف: Ruby Method]]
 
[[تصنيف: Ruby Kernel]]
 
[[تصنيف: Ruby Kernel]]
يعيد التابع sprintf السلسلة النصية الناتجة من تطبيق format_string على الوسائط الإضافية.  داخل سلسلة التنسيق، يتم نسخ كل الأحرف في النتيجة باستثناء تسلسلات الشكل .
+
يعيد التابع <code>sprintf</code> السلسلة النصية الناتجة من تطبيق <code>format_string</code> على الوسائط الإضافية.  داخل سلسلة التنسيق، يتم نسخ كل الأحرف في النتيجة باستثناء تسلسلات التنسيق (format sequences).
صياغة تسلسل التنسيق هو كالآتي.
+
 
<syntaxhighlight lang="ruby">%[flags][width][.precision]type‎</syntaxhighlight>
+
صياغة تسلسلات التنسيق تأخذ الشكل الآتي.
يتألف تسلسل التنسيق من علامة النسبة المئوية (%)، متبوعة برايات اختيارية، وحقل width، ومحددات الدقة precision، ثم يُقفل بحرف نوع الحقل.  يتحكم نوع الحقل في كيفية تفسير الوسائط <code>sprintf</code> المقابلة، بينما تعدّل الرايات تأويلها.
+
<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">Field |  Integer Format
+
 
------+--------------------------------------------------------------
 
  b  | Convert argument as a binary number.
 
      | Negative numbers will be displayed as a two's complement
 
      | prefixed with `..1'.
 
  B  | Equivalent to `b', but uses an uppercase 0B for prefix
 
      | in the alternative format by #.
 
  d  | Convert argument as a decimal number.
 
  i  | Identical to `d'.
 
  o  | Convert argument as an octal number.
 
      | Negative numbers will be displayed as a two's complement
 
      | prefixed with `..7'.
 
  u  | Identical to `d'.
 
  x  | Convert argument as a hexadecimal number.
 
      | Negative numbers will be displayed as a two's complement
 
      | prefixed with `..f' (representing an infinite string of
 
      | leading 'ff's).
 
  X  | Equivalent to `x', but uses uppercase letters.
 
Field |  Float Format
 
------+--------------------------------------------------------------
 
  e  | Convert floating point argument into exponential notation
 
      | with one digit before the decimal point as [-]d.dddddde[+-]dd.
 
      | The precision specifies the number of digits after the decimal
 
      | point (defaulting to six).
 
  E  | Equivalent to `e', but uses an uppercase E to indicate
 
      | the exponent.
 
  f  | Convert floating point argument as [-]ddd.dddddd,
 
      | where the precision specifies the number of digits after
 
      | the decimal point.
 
  g  | Convert a floating point number using exponential form
 
      | if the exponent is less than -4 or greater than or
 
      | equal to the precision, or in dd.dddd form otherwise.
 
      | The precision specifies the number of significant digits.
 
  G  | Equivalent to `g', but use an uppercase `E' in exponent form.
 
  a  | Convert floating point argument as [-]0xh.hhhhp[+-]dd,
 
      | which is consisted from optional sign, "0x", fraction part
 
      | as hexadecimal, "p", and exponential part as decimal.
 
  A  | Equivalent to `a', but use uppercase `X' and `P'.
 
Field |  Other Format
 
------+--------------------------------------------------------------
 
  c  | Argument is the numeric code for a single character or
 
      | a single character string itself.
 
  p  | The valuing of argument.inspect.
 
  s  | Argument is a string to be substituted.  If the format
 
      | sequence contains a precision, at most that many characters
 
      | will be copied.
 
  %  | A percent sign itself will be displayed.  No argument taken.‎</syntaxhighlight>
 
 
تعدل الرايات سلوك التنسيقات. أحرف الراية هي:
 
تعدل الرايات سلوك التنسيقات. أحرف الراية هي:
<syntaxhighlight lang="ruby">Flag    | Applies to    | Meaning
+
{| class="wikitable"
---------+---------------+-----------------------------------------
+
!الحقل
space    | bBdiouxX      | Leave a space at the start of
+
!التنسيق (Integer)
        | aAeEfgG      | non-negative numbers.
+
|-
        | (numeric fmt) | For `o', `x', `X', `b' and `B', use
+
|<code>b</code>
        |               | a minus sign with absolute value for
+
|يحول الوسيط إلى عدد ثنائي (binary number).
        |               | negative values.
+
الأعداد السالبة ستُعرض مع البادئة "<code>‎..1</code>‎".
---------+---------------+-----------------------------------------
+
|-
(digit)$ | all          | Specifies the absolute argument number
+
|<code>B</code>
        |               | for this field.  Absolute and relative
+
|مكافئة لـ b، إلا أنها تستخدم حرفًا كبيرا <code>0B</code> كبادئة في الشكل البديل عبر <code>#</code>.
        |               | argument numbers cannot be mixed in a
+
|-
        |               | sprintf string.
+
|<code>d</code>
---------+---------------+-----------------------------------------
+
|يحول الوسيط إلى عدد عشري (decimal number).
#      | bBoxX        | Use an alternative format.
+
|-
        | aAeEfgG      | For the conversions `o', increase the precision
+
|<code>i</code>
        |               | until the first digit will be `0' if
+
|مشابه لـ "<code>d</code>"
        |               | it is not formatted as complements.
+
|-
        |               | For the conversions `x', `X', `b' and `B'
+
|<code>o</code>
        |               | on non-zero, prefix the result with ``0x'',
+
|يحول الوسيط إلى عدد ثماني (octal number).
        |               | ``0X'', ``0b'' and ``0B'', respectively.
+
الأعداد السالبة ستُعرض مع البادئة "<code>‎..7</code>‎".
        |               | For `a', `A', `e', `E', `f', `g', and 'G',
+
|-
        |               | force a decimal point to be added,
+
|<code>u</code>
        |               | even if no digits follow.
+
|مشابه لـ "<code>d</code>"
        |               | For `g' and 'G', do not remove trailing zeros.
+
|-
---------+---------------+-----------------------------------------
+
|<code>x</code>
+        | bBdiouxX      | Add a leading plus sign to non-negative
+
|يحول الوسيط إلى عدد ستة عشري(hexadecimal number).
        | aAeEfgG      | numbers.
+
الأعداد السالبة ستُعرض مع البادئة "<code>‎..f</code>" (تمثل سلسلة نصية  لامنتهية من حروف <code>f</code>)
        | (numeric fmt) | For `o', `x', `X', `b' and `B', use
+
|-
        |               | a minus sign with absolute value for
+
|<code>X</code>
        |               | negative values.
+
|مكافئ ل <code>x</code> لكن مع استخدام الحروف الكبيرة.
---------+---------------+-----------------------------------------
+
|-
-        | all          | Left-justify the result of this conversion.
+
!الحقل
---------+---------------+-----------------------------------------
+
!التنسيق (Format)
0 (zero) | bBdiouxX      | Pad with zeros, not spaces.
+
|-
        | aAeEfgG      | For `o', `x', `X', `b' and `B', radix-1
+
|<code>e</code>
        | (numeric fmt) | is used for negative numbers formatted as
+
|يحول الوسائط العددية الكسرية (floating point) إلى الشكل الأسي مع رقم واحد قبل النقطة العشرية على الشكل ‎<code>[-]d.dddddde[+-]dd</code>تحدد الدقة (‎precision) عدد الأرقام بعد النقطة العشرية (القيمة الافتراضية تساوي 6).
        |               | complements.
+
|-
---------+---------------+-----------------------------------------
+
|<code>E</code>
*        | all          | Use the next argument as the field width.
+
|يكافئ "<code>e</code>"  لكن يستخدم حرف <code>E</code> كبير للدلالة على الأس.
        |              | If negative, left-justify the result. If the
+
|-
        |               | asterisk is followed by a number and a dollar
+
|<code>f</code>
        |               | sign, use the indicated argument as the width.</syntaxhighlight>
+
|يحول الوسائط العددية الكسرية إلى الشكل الأسي مع رقم واحد قبل النقطة العشرية على الشكل ‎<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
  
الحقل width هو عدد صحيح اختياري، متبوعًا اختياريًا بنقطة ودقة (precision). يحدد width الحد الأدنى لعدد الأحرف التي ستُكتب في النتيجة الخاصة بهذا الحقل.
+
(numeric fmt)
أمثلة على width:
+
|يترك مسافة بيضاء في بداية الأعداد غير السالبة.
 +
بالنسبة لـ `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).
  
بالنسبة للحقول العددية، تتحكم الدقة (precision) في عدد المنازل العشرية المعروضة. بالنسبة للحقول النصية، تحدد الدقة الحد الأقصى لعدد الأحرف التي ستُنسخ من السلسلة النصية.  (وهكذا ، فإن تسلسل التنسيق <code>%10.10s</code> سيساهم دائمًا بعشرة أحرف بالضبط في النتيجة.)
+
بالنسبة للتحويلات `x' و `X' و `b' و`B'، بالنسبة للأعداد المخالفة للصفر، تُبدأ النتيجة بـ
أمثلة على الدقة:
 
  
أمثلة:
+
<code>``0x<nowiki>''</nowiki></code>و  <code>``0X<nowiki>''</nowiki></code> و <code>``0b<nowiki>''</nowiki></code>  و<code>``0B<nowiki>''</nowiki></code>, تواليًا.
  
للتنسيقات الأكثر تعقيدًا، تدعم روبي المراجع الاسمية (reference by name). يستخدم النمط <name> s نمط التنسيق ، على خلاف النمط ٪ {name}.
+
بالنسبة ل`a'و `A' و `e' و `Eو `f' و `g' و 'G'، تُفرض إضافة النقطة العشرية، حتى لو لم يكن بعدها أي أرقام.
أمثلة:
 
==البنية العامة==
 
<syntaxhighlight lang="ruby">sprintf(format_string [, arguments...] )  → string‎</syntaxhighlight>
 
==المعاملات==
 
===<code>format_string‎</code>===
 
 
 
===<code>arguments...‎</code>===
 
  
 +
بالنسبة لـ `g' و  'G' ، لا تزيل الأصفار الإضافية.
 +
|-
 +
|<code>+</code>
 +
|bBdiouxX
 +
aAeEfgG
  
==القيمة المُعادة==
+
(numeric fmt)
 +
|تضيف علامة + في بداية الأعداد الموجبة.
 +
بالنسبة لـ `o' و `x' و `X' و `b' و`B'، تُستخدم علامة الإشارة ناقص مع القيمة المطلقة للأعداد السالبة.
 +
|-
 +
|<code>-</code>
 +
|الكل
 +
|تعدل نتيحة التحويل من الجهة اليسرى.
 +
|-
 +
|<code>0</code>
 +
|bBdiouxX
 +
aAeEfgG
  
==أمثلة==
+
(numeric fmt)
مثال على استخدام التابع <code>sprintf‎</code>:
+
|تملأ المنازل الرقمية الفارغة بالأصفار، وليس المسافات البيضاء، بالنسبة لـ `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: سطر 149:
 
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: سطر 158:
 
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: سطر 171:
 
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: سطر 189:
 
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>
+
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
 +
# 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">sprintf(format_string [, arguments...] )  → string‎</syntaxhighlight>
 +
==المعاملات==
 +
===<code>format_string‎</code>===
 +
التنسيق المراد تطبيقه
 +
===<code>arguments...‎</code>===
 +
الوسائط الممرة إلى <code>format_string‎.</code>
 +
==القيمة المُعادة==
 +
سلسلة نصية بعد تنسيقها.
 +
==أمثلة==
 +
مثال على استخدام التابع <code>sprintf‎</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/spawn|spawn]]</code>: ينفذ التابع spawn تعليمة محددة، ثم يعيد معرفها (pid).
+
* التابع <code>[[Ruby/Kernel/format|format]]</code>: ينسق التابع <code>format</code> السلسلة النصية المعطاة..
* التابع <code>[[Ruby/Kernel/srand|srand]]</code>: يحدد التابع srand بذرة مولد الأعداد شبه العشوائية (system pseudo-random number generator)، حيث يعين Random :: DEFAULT ، ويعطيها القيمة <code>number</code>. تُعاد قيمة البذرة السابقة.
 
  
 
==مصادر==
 
==مصادر==
 
*[http://ruby-doc.org/core-2.5.1/Kernel.html#method-i-sprintf قسم  التابع sprintf‎ في الصنف Kernel‎ في توثيق روبي الرسمي.]
 
*[http://ruby-doc.org/core-2.5.1/Kernel.html#method-i-sprintf قسم  التابع sprintf‎ في الصنف Kernel‎ في توثيق روبي الرسمي.]

مراجعة 17:00، 23 أكتوبر 2018

يعيد التابع sprintf السلسلة النصية الناتجة من تطبيق format_string على الوسائط الإضافية. داخل سلسلة التنسيق، يتم نسخ كل الأحرف في النتيجة باستثناء تسلسلات التنسيق (format sequences).

صياغة تسلسلات التنسيق تأخذ الشكل الآتي.

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

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

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

تعدل الرايات سلوك التنسيقات. أحرف الراية هي:

الحقل التنسيق (Integer)
b يحول الوسيط إلى عدد ثنائي (binary number).

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

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

الأعداد السالبة ستُعرض مع البادئة "‎..7‎".

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

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

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

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

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

# `+' 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}‎.

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

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

المعاملات

format_string‎

التنسيق المراد تطبيقه

arguments...‎

الوسائط الممرة إلى format_string‎.

القيمة المُعادة

سلسلة نصية بعد تنسيقها.

أمثلة

مثال على استخدام التابع sprintf‎:

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"

انظر أيضا

  • التابع format: ينسق التابع format السلسلة النصية المعطاة..

مصادر