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

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


الحقل width هو عدد صحيح اختياري، متبوع اختياريًا بنقطة وحقل precisionيحدد width الحد الأدنى لعدد الأحرف التي ستُكتب في النتيجة الخاصة بهذا الحقل.
تحدد الدقة (‎precision) عدد الأرقام المهمة (significant digits).
أمثلة على الحقل width:
|-
|<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


للحقول العددية، يتحكم الحقل precision في عدد المنازل العشرية المعروضة.  بالنسبة للحقول النصية، يحدد الحقل precision الحد الأقصى لعدد الأحرف التي ستُنسخ من السلسلة.  (وهكذا، فإن تسلسل التنسيق <code>%10.10s</code> سيخصص دائمًا عشرة أحرف بالضبط في النتيجة.)
aAeEfgG
أمثلة على الحقول precision:


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


بالنسبة للتنسيقات الأكثر تعقيدًا، تدعم روبي المراجع الاسمية (reference by name). حيث يستخدم النمط <name> s نمط التنسيق (format style)، وذلك على خلاف النمط٪ {name}.
aAeEfgG
أمثلة:
|تستخدم تنسيقا بديلا.
==البنية العامة==
بالنسبة للتحويل `<code>o</code>'، ترفع الدقة إلى أن يصير الرقم الأول `<code>0</code>'  إن لم يتم تنسيقه كمُكمّلات (complements).
<syntaxhighlight lang="ruby">format(format_string [, arguments...] )→ string‎</syntaxhighlight>
 
==المعاملات==
بالنسبة للتحويلات  `x' و `X' و `b' و`B'، بالنسبة للأعداد المخالفة للصفر، تُبدأ النتيجة بـ
===<code>format_string‎</code>===
 
<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


===<code>arguments...‎</code>===
aAeEfgG


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


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


==أمثلة==
(numeric fmt)
مثال على استخدام التابع <code>format‎</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: سطر 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/fork|fork]]</code>: ينشئ التابع عملية فرعية (subprocess). في حال إعطاء كتلة، فستُنفّذ تلك الكتلة في العملية الفرعية، كما أن قيمة الحالة عند الانتهاء ستساوي صفر. وإلا ، فإن استدعاء التابع <code>fork</code> سيقوم بالإعادة مرتين، مرة في العملية الأم (parent, process)، حيث يعيد معرف العملية الفرعية، ومرة في العملية الفرعية، حيث يعيد nil. يمكن للعملية الفرعية الخروج باستخدام <code>Kernel.exit!</code> لتجنب تشغيل دوال <code>at_exit</code>. يجب أن تستخدم العملية الأم <code>Process.wait</code> لجمع حالات إنهاء عملياتها الفرعية، أو تستخدم <code>Process.detach</code> لتسجيل إهمال تلك الحالات؛ خلاف ذلك، قد يُراكم نظام التشغيل عمليات الزومبي (zombie processes).
*التابع <code>[[Ruby/Kernel/sprintf|sprintf]]</code>: ينسق السلاسل النصية.
* التابع <code>[[Ruby/Kernel/gets|gets]]</code>: يعيد التابع (ويُحيل على <code>$_</code>) السطر الموالي من قائمة الملفات في <code>ARGV</code> (أو <code>$*</code>)، أو من مجرى الإدخال القياسي في حالة عدم تمرير أي ملفات في سطر الأوامر. ويعيد <code>nil</code> في نهاية الملف. يحدد الوسيط الاختياري فاصل السجل. يتم تضمين الفاصل مع محتويات كل سجل. قي حال كان الوسيط sep يساوي <code>nil</code> فسيقرأ التابع gets كامل المحتوى، أما إذا كان الفاصل معدوم الطول (zero-length) فسيقرأ فقرة واحدة في كل مرة من المدخلات، بحيث تكون الفقرات مقسمة بواسطة سطرين جديدين متتاليين .  إذا كان الوسيط الأول عددًا صحيحًا أو في حالإعطاء الوسيط الثاني الاختياري، فإنّ السلسلة النصية المعادة لن تكون أطول من القيمة المحددة من حيث عدد البتات (bytes).  في حال تمرير عدة أسماء ملفات إلى <code>ARGV</code> ، فسيقرأ <code>gets(nil)</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).

الأعداد السالبة ستُعرض مع البادئة "‎..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}‎.

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

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: ينسق السلاسل النصية.

مصادر