الفرق بين المراجعتين ل"Ruby/IO/new"

من موسوعة حسوب
< Ruby‏ | IO
اذهب إلى التنقل اذهب إلى البحث
(أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: التابع <code>new‎</code> الخاص بالصنف <code>IO</code> في روبي}}</noinclude> تصنيف: Ruby تصنيف: Rub...')
 
سطر 3: سطر 3:
 
[[تصنيف: Ruby Method]]
 
[[تصنيف: Ruby Method]]
 
[[تصنيف: Ruby IO]]
 
[[تصنيف: Ruby IO]]
يُعيد التابع <code>new</code> كائنًا جديدًا من النوع <code>[[Ruby/IO|IO]]</code> لواصف الملف (file descriptor) المعطى <code>fd</code> (انظر فقرة البنية العامة) والوضع <code>mode</code>.  يمكن استخدام <code>opt</code> لتحديد أجزاء من <code>mode</code> بطريقة أكثر قابلية للقراءة.  انظر أيضًا صفحتي <code>[[Ruby/IO/sysopen|::sysopen]]</code> و <code>[[Ruby/IO/for_fd|::for_fd]]</code>.
+
يُعيد التابع <code>new</code> كائنًا جديدًا من النوع <code>[[Ruby/IO|IO]]</code> انطلاقا من واصف الملف (file descriptor) المعطى <code>fd</code> (انظر فقرة البنية العامة) ووفق الوضع <code>mode</code>.  يمكن استخدام الوسيط <code>opt</code> لتحديد أجزاء من الوضع <code>mode</code> بطريقة أكثر قابلية للقراءة.  انظر أيضًا صفحتي <code>[[Ruby/IO/sysopen|sysopen]]</code> و <code>[[Ruby/IO/for fd|for_fd]]</code>.
  
يُستدعى التابع <code>[[Ruby/IO/new|::new]]</code> عبر العديد من توابع الفتح الخاصة بالصنفين <code>[[Ruby/File|File]]</code> و <code>[[Ruby/IO|IO]]</code>، مثل <code>[[Ruby/IO/open|::open]]</code> و <code>[[Ruby/Kernel/open|Kernel#open]]</code> و <code>[[Ruby/File/open|File.open]]</code>.
+
يُستدعى التابع <code>[[Ruby/IO/new|new]]</code> عبر العديد من توابع الفتح الخاصة بالصنفين <code>[[Ruby/File|File]]</code> و <code>[[Ruby/IO|IO]]</code>، مثل <code>[[Ruby/IO/open|open]]</code> و <code>[[Ruby/Kernel/open|Kernel#open]]</code> و <code>[[Ruby/File/open|File.open]]</code>.
  
وضع الفتح (Open Mode)
+
== وضع الفتح (Open Mode) ==
<code>[[Ruby//new-label-Open+Mode|]]</code> <code>[[Ruby//top|↑]]</code>
+
إن كان الوسيط <code>mode</code> عددًا صحيحًا، فيجب أن يكون مزيجًا من الأوضاع المعرفة في <code>[[Ruby/Constants|File::Constants]]</code>‏ (<code>File::RDONLY</code>، <code>File::WRONLY|File::CREAT</code>). انظر صفحة <code>open(2)‎</code> لمزيد من المعلومات.
  
إن كان الوسيط <code>mode</code> عددًا صحيحًا، فيجب أن يكون مزيجًا من الأوضاع المعرف في <code>[[Ruby/Constants|File::Constants]]</code>‏ (<code>File::RDONLY</code>، <code>File::WRONLY|File::CREAT</code>). انظر صفحة open(2)‎ لمزيد من المعلومات.
+
إن كان <code>mode</code> [[Ruby/String|سلسلة نصية]]، فيجب أن يكون وفق أحد الصيغ التالية:<syntaxhighlight lang="ruby">fmode
 
 
إن كان <code>mode</code> عبارة عن [[Ruby/String|سلسلة نصية]]، فيجب أن يكون وفق أحد الصيغ التالية:
 
 
 
<syntaxhighlight lang="ruby">fmode
 
 
fmode ":" ext_enc
 
fmode ":" ext_enc
 
fmode ":" ext_enc ":" int_enc
 
fmode ":" ext_enc ":" int_enc
fmode ":" "BOM|UTF-*"‎</syntaxhighlight>
+
fmode ":" "BOM|UTF-*"‎</syntaxhighlight><code>fmode</code> هو سلسلة نصية تمثل وضعية فتح (open mode) مجرى د/خ (<code>[[Ruby/IO|IO]]</code>)، فيما يمثل الوسيط <code>ext_enc</code> الترميز الخارجي للمجرى، ويمثل <code>int_enc</code> الترميز الداخلي.
 
 
<code>fmode</code> هو عبارة عن وضعية فتح (open mode) [[Ruby/IO|التابع الحر]] (<code>[[Ruby/IO|IO]]</code>X)، فيما يمثل <code>ext_enc</code> الترميز الخارجي [[Ruby/IO|التابع الحر]] <code>[[Ruby/IO|IO]]</code> ويمثل <code>int_enc</code> الترميز الداخلي.
 
 
 
وضعية الفتح الخاصة ب[[Ruby/IO|التابع الحر]] (<code>[[Ruby/IO|IO]]</code> Open Mode)
 
<code>[[Ruby//new-label-IO+Open+Mode|¶]]</code> <code>[[Ruby//top|↑]]</code>
 
 
 
تتيح روبي وضعيا الفتح التالية:
 
 
 
<syntaxhighlight lang="ruby">"r"  Read-only, starts at beginning of file  (default mode).
 
"r+" Read-write, starts at beginning of file.
 
"w"  Write-only, truncates existing file
 
    to zero length or creates a new file for writing.
 
"w+" Read-write, truncates existing file to zero length
 
    or creates a new file for reading and writing.
 
"a"  Write-only, each write call appends data at end of file.
 
    Creates a new file for writing if file does not exist.
 
"a+" Read-write, each write call appends data at end of file.
 
    Creates a new file for reading and writing if file does
 
    not exist.‎</syntaxhighlight>
 
  
 +
== وضعية الفتح الخاصة ب[[Ruby/IO|مجرى د/خ]] (<code>[[Ruby/IO|IO]]</code> Open Mode) ==
 +
تتيح روبي وضعيات الفتح التالية:
 +
* "<code>r</code>":  القراءة فقط، بدءًا من بداية الملف (الوضع الافتراضي.)
 +
* "<code>+r</code>": القراءة والكتابة، بدءًا من بداية الملف.
 +
* "<code>w</code>":  الكتابة فقط، مسح محتويات الملف إن كان موجودا، أو إنشاء واحد جديد لأجل الكتابة.
 +
* "<code>w+</code>‎": الكتابة والقراءة، مسح محتويات الملف إن كان موجودا، أو إنشاء واحد جديد لأجل الكتابة والقراءة.
 +
* "<code>a</code>":  الكتابة فقط، كل عملية كتابة ستضيف بيانات إلى نهاية الملف، أو إنشاء ملف جديد لأجل الكتابة إن لم يكن موجودا.
 +
* "<code>a+‎</code>": الكتابة والقراءة، كل عملية كتابة ستضيف بيانات إلى نهاية الملف، أو إنشاء ملف جديد لأجل الكتابة والقراءة إن لم يكن موجودا.
 
يجب استخدام الأوضاع التالية بشكل منفصل، بالإضافة إلى واحد أو أكثر من الأوضاع المذكورة أعلاه.
 
يجب استخدام الأوضاع التالية بشكل منفصل، بالإضافة إلى واحد أو أكثر من الأوضاع المذكورة أعلاه.
 +
* "<code>b</code>":  الوضع الثنائي (Binary file mode). يمنع تحويل المحارف <code>EOL</code> <-> <code>CRLF</code>  في نظام ويندوز. ويعين الترميز الخارجي عند القيمة ASCII-8BIT، إلا إن حُدد ترميز آخر.
 +
* "t":  الوضع النصي (Text file mode).
 +
عندما تكون وضعية فتح (open mode) [[Ruby/IO|مجرى د/خ]] الأصلي هي القراءة فقط (read only)، فلن يكون بالإمكان تغيير الوضع لجعله قابلا للكتابة.  وبالمثل، لا يمكن تغيير وضعية الفتح من الكتابة إلى القراءة فقط.
  
<syntaxhighlight lang="ruby">"b"  Binary file mode
+
عند محاولة إجراء مثل هذا التغيير، سيُطلق خطأ في مواقع مختلفة بحسب للنظام المستخدم.
    Suppresses EOL <-> CRLF conversion on Windows. And
 
    sets external encoding to ASCII-8BIT unless explicitly
 
    specified.
 
"t"  Text file mode‎</syntaxhighlight>
 
 
 
عندما تكون وضعية فتح (open mode) [[Ruby/IO|التابع الحر]] الأصلي (<code>[[Ruby/IO|IO]]</code>) هي القراءة فقط (read only)، لا يمكن تغيير الوضع لجعله قابلا للكتابة.  وبالمثل، لا يمكن تغيير وضعية الفتح من الكتابة إلى القراءة فقط.
 
 
 
عند محاولة إجراء مثل هذا التغيير، سيُطلق خطأ في مواقع مختلفة وفقًا للنظام المستخدم.
 
 
 
ترميز [[Ruby/IO|التابع الحر]] (<code>[[Ruby/IO|IO]]</code> <code>[[Ruby/Encoding|Encoding]]</code>)
 
<code>[[Ruby//new-label-IO+Encoding|¶]]</code> <code>[[Ruby//top|↑]]</code>
 
 
 
عند تحديد <code>ext_enc</code>، سيتم وسم [[Ruby/String|السلاسل النصية]] بواسطة الترميز عند القراءة، وستُحوّل [[Ruby/String|السلاسل النصية]] المُخرجة إلى الترميز المحدد عند الكتابة.
 
 
 
عند تحديد <code>ext_enc</code> و <code>int_enc</code> سيتم تحويل [[Ruby/String|السلاسل النصية]] المقروءة من <code>ext_enc</code> إلى <code>int_enc</code> عند الإدخال، كما سيتم تحويل [[Ruby/String|السلاسل النصية]] المكتوبة من <code>int_enc</code> إلى <code>ext_enc</code> عند الإخراج.  راجع صفحة <code>[[Ruby/Encoding|Encoding]]</code> لمزيد من التفاصيل حول تحويل ترميز المدخلات والمخرجات.
 
 
 
في حال استخدام الترميزات "BOM | UTF-8" أو "BOM | UTF-16LE" أو "BOM | UTF16-BE"، ستتحقق روبي من محرف اليونيكود BOM في مستند الإدخال لأجل تحديد الترميز.  بالنسبة للترميز UTF-16، يجب أن تكون وضعية فتح الملف ثنائية (binary).  عند وجوده، يتم تجريد المحرف BOM، ويُستخدم الترميز الخارجي المُستنتج من المحرف BOM.  عند عدم إيجاد المحرف BOM، فسيتم استخدام ترميز اليونيكود المعطى ياعتباره <code>ext_enc</code>.  (خيار الترميز BOM غير حساس لحالة الأحرف، بحيث تكون "bom | utf-8" صالحة أيضًا.)
 
 
 
خيارات
 
<code>[[Ruby//new-label-Options|¶]]</code> <code>[[Ruby//top|↑]]</code>
 
 
 
يمكن استخدام <code>opt</code> بدلاً من <code>mode</code> لتحسين قابلية القراءة.  المفاتيح التالية مدعومة:
 
 
 
:mode
 
 
 
مثل الوسيط <code>mode</code>
 
 
 
:flags
 
 
 
يحدد رايات فتح الملف على هيئة عدد صحيح. في حال إعطاء الوسيط <code>mode</code>، فسيتم تحديد هذا الوسيط باستخدام عملية "أو الثنائية" (bitwise-OR).
 
 
 
:external_encoding
 
 
 
الترميز الخارجي ل[[Ruby/IO|مجرى د/خ]] <code>[[Ruby/IO|IO]]</code>.
 
 
 
: internal_encoding
 
  
الترميز الداخلي ل[[Ruby/IO|مجرى د/خ]] (<code>[[Ruby/IO|IO]]</code>). العلامة "-" هي مرادف للترميز الداخلي الافتراضي.
+
== ترميز [[Ruby/IO|مجرى د/خ]] (<code>[[Ruby/IO|IO]]</code> <code>[[Ruby/Encoding|Encoding]]</code>) ==
 +
عند تحديد الترميز<code>ext_enc</code>، سيتم وسم [[Ruby/String|السلاسل النصية]] بذلك الترميز عند القراءة، وستُحوّل [[Ruby/String|السلاسل النصية]] المُخرجة إلى الترميز المحدد عند الكتابة.
  
إن كانت قيمته تساوي <code>nil</code>، فلن يحدث أي تحويل.
+
عند تحديد الترميزين <code>ext_enc</code> و <code>int_enc</code> سيتم تحويل [[Ruby/String|السلاسل النصية]] المقروءة من <code>ext_enc</code> إلى <code>int_enc</code> عند الإدخال، كما سيتم تحويل [[Ruby/String|السلاسل النصية]] المكتوبة من <code>int_enc</code> إلى <code>ext_enc</code> عند الإخراج.  راجع صفحة <code>[[Ruby/Encoding|Encoding]]</code> لمزيد من التفاصيل حول تحويل ترميز المدخلات والمخرجات.
  
:encoding
+
في حال استخدام أحد الترميزات "<code>BOM | UTF-8</code>" أو "<code>BOM | UTF-16LE</code>" أو "<code>BOM | UTF16-BE</code>"، ستتحقق روبي من محرف اليونيكود <code>BOM</code> في مستند الإدخال لأجل تحديد الترميز.  بالنسبة للترميز <code>UTF-16</code>، يجب أن تكون وضعية فتح الملف ثنائية (binary).  عند وجود المحرف <code>BOM</code>، فسيُحذف، ويُستخدم الترميز الخارجي المُستنتج من المحرف <code>BOM</code>.  أما عند عدم إيجاد المحرف <code>BOM</code>، فسيتم استخدام ترميز اليونيكود المعطى ياعتباره الترميز الخارجي <code>ext_enc</code>.  (خيار الترميز BOM-set غير حساس لحالة الأحرف، ما يجعل "<code>bom | utf-8</code>" صالحة أيضًا.)
  
يحدد الترميزات الخارجية والداخلية على هيئة "extern: intern".
+
== خيارات ==
 +
يمكن استخدام الوسيط <code>opt</code> بدلاً من <code>mode</code> لأجل مقروئية أفضل.
  
:textmode
+
المفاتيح التالية مدعومة:
 
+
* <code>mode</code>: مثل الوسيط <code>mode</code>
إن كانت القيمة قيمة صحيحة (truth value)، فسيكون مثل "t" في الوسيط <code>mode</code>.
 
 
 
: binmode
 
 
 
إن كانت القيمة قيمة صحيحة (truth value)، فسيكون مثل "b" في الوسيط <code>mode</code>.
 
 
 
:autoclose
 
 
 
إن كانت قيمته تساوي <code>false</code>، فسيبقى <code>fd</code> مفتوحا بعد انتهاء [[Ruby/IO|مجرى د/خ]] (<code>[[Ruby/IO|IO]]</code>).
 
  
 +
* <code>flags</code>: يحدد رايات فتح الملف على هيئة عدد صحيح. في حال إعطاء الوسيط <code>mode</code>، فسيتم تحديد هذا الوسيط باستخدام عملية "أو الثنائية" (bitwise-OR).
 +
* <code>external_encoding</code>: الترميز الخارجي ل[[Ruby/IO|مجرى د/خ]].
 +
* <code>internal_encoding</code>: الترميز الداخلي ل[[Ruby/IO|مجرى د/خ]]. العلامة "<code>-</code>" هي مرادف للترميز الداخلي الافتراضي. إن كانت قيمة هذا المفتاح تساوي <code>nil</code>، فلن يحدث أي تحويل.
 +
* <code>encoding</code>: يحدد الترميزين الخارجي والداخلي على الهيئة "<code>extern:intern</code>".
 +
* <code>textmode</code>: إن كانت القيمة قيمة صحيحة (truth value)، فسيكون مثل "<code>t</code>" في الوسيط <code>mode</code>.
 +
* <code>binmode</code>: إن كانت القيمة قيمة صحيحة (truth value)، فسيكون مثل "<code>b</code>" في الوسيط <code>mode</code>
 +
* <code>autoclose</code>: إن كانت قيمته تساوي <code>false</code>، فسيبقى <code>fd</code> مفتوحا بعد إنهاء [[Ruby/IO|مجرى د/خ]].
 
أيضا، يمكن أن يكون للوسيط <code>opt</code> نفس مفاتيح التابع <code>[[Ruby/String/encode|String#encode]]</code> للتحكم في التحويل بين الترميز الخارجي والترميز الداخلي.
 
أيضا، يمكن أن يكون للوسيط <code>opt</code> نفس مفاتيح التابع <code>[[Ruby/String/encode|String#encode]]</code> للتحكم في التحويل بين الترميز الخارجي والترميز الداخلي.
 
مثال 1
 
<code>[[Ruby//new-label-Example+1|¶]]</code> <code>[[Ruby//top|↑]]</code>
 
 
 
 
الناتج:
 
 
 
 
مثال 2
 
<code>[[Ruby//new-label-Example+2|¶]]</code> <code>[[Ruby//top|↑]]</code>
 
 
 
 
كلا المثالين أعلاه من يطبعان "Hello, World!" وفق الترميز UTF-16LE في مجرى إخراج الخطأ القياسي مع تحويل المحرف EOL التي تم إنشاؤها بواسطة <code>[[Ruby/IO/puts|puts]]</code> إلى CR.
 
 
==البنية العامة==
 
==البنية العامة==
 
<syntaxhighlight lang="ruby">new(fd [, mode] [, opt])→ io‎</syntaxhighlight>
 
<syntaxhighlight lang="ruby">new(fd [, mode] [, opt])→ io‎</syntaxhighlight>
 
==المعاملات==
 
==المعاملات==
 
===<code>fd‎</code>===
 
===<code>fd‎</code>===
 +
واصف الملف
 +
 
===<code>mode‎</code>===
 
===<code>mode‎</code>===
 +
الوضعية
 +
 
===<code>opt‎</code>===
 
===<code>opt‎</code>===
 +
خيارات
 +
 
==القيمة المُعادة==
 
==القيمة المُعادة==
 +
يُعيد التابع <code>new</code> كائنًا جديدًا من النوع <code>[[Ruby/IO|IO]]</code>.
 +
 
==أمثلة==
 
==أمثلة==
مثال على استخدام التابع <code>new‎</code>:
+
 
 +
=== المثال الأول ===
 
<syntaxhighlight lang="ruby">fd = IO.sysopen("/dev/tty", "w")
 
<syntaxhighlight lang="ruby">fd = IO.sysopen("/dev/tty", "w")
 
a = IO.new(fd,"w")
 
a = IO.new(fd,"w")
 
$stderr.puts "Hello"
 
$stderr.puts "Hello"
a.puts "World"‎</syntaxhighlight>
+
a.puts "World"‎</syntaxhighlight>الناتج:<syntaxhighlight lang="ruby">Hello
 +
World</syntaxhighlight>
 +
 
 +
=== المثال الثاني ===
 +
<syntaxhighlight lang="ruby">require 'fcntl'
 +
 
 +
fd = STDERR.fcntl(Fcntl::F_DUPFD)
 +
io = IO.new(fd, mode: 'w:UTF-16LE', cr_newline: true)
 +
io.puts "Hello, World!"
 +
 
 +
fd = STDERR.fcntl(Fcntl::F_DUPFD)
 +
io = IO.new(fd, mode: 'w', cr_newline: true,
 +
            external_encoding: Encoding::UTF_16LE)
 +
io.puts "Hello, World!"</syntaxhighlight>كلا المثالين أعلاه يطبعان "<code>Hello, World!‎</code>" وفق الترميز <code>UTF-16LE</code> في مجرى إخراج الخطأ القياسي، مع تحويل المحرف <code>EOL</code> التي تم إنشاؤها من قبل<code>[[Ruby/IO/puts|puts]]</code> إلى المحرف <code>CR</code>.
 +
 
 
==انظر أيضا==
 
==انظر أيضا==
* التابع <code>[[Ruby/IO/foreach|foreach]]</code>: ينفذ التابع <code>foreach</code> الكتلة المعطاة على كل سطر في منفذ [[Ruby/IO|مجرى د/خ]] المسمى، حيث يتم فصل الأسطر بواسطة <code>sep</code>.
+
*التابع <code>[[Ruby/IO/open|open]]</code>: عند عدم تمرير كتلة، فسيكون التابع <code>IO.open</code> مرادفاً للتابع <code>[[Ruby/IO/new|new]]</code>.  
* التابع <code>[[Ruby/IO/open|open]]</code>: عند عدم تمرير كتلة، فسيكون التابع <code>IO.open</code> مرادفاً للتابع <code>[[Ruby/IO/new|::new]]</code>.  أما في حال تمرير الكتلة البرمجية، فسيُمرّر إليها <code>io</code> (انظر فقرة البنية العامة) كوسيط، وسيتم إغلاق [[Ruby/IO|مجرى د/خ]] (<code>[[Ruby/IO|IO]]</code>) تلقائيًا عند إنهاء الكتلة. في هذه الحالة، سيعيد التابع <code>[[Ruby/IO/open|::open]]</code> قيمة الكتلة.
 
 
==مصادر==
 
==مصادر==
 
*[http://ruby-doc.org/core-2.5.1/IO.html#method-c-new قسم  التابع new‎ في الصنف IO‎ في توثيق روبي الرسمي.]
 
*[http://ruby-doc.org/core-2.5.1/IO.html#method-c-new قسم  التابع new‎ في الصنف IO‎ في توثيق روبي الرسمي.]

مراجعة 21:50، 12 نوفمبر 2018

يُعيد التابع new كائنًا جديدًا من النوع IO انطلاقا من واصف الملف (file descriptor) المعطى fd (انظر فقرة البنية العامة) ووفق الوضع mode. يمكن استخدام الوسيط opt لتحديد أجزاء من الوضع mode بطريقة أكثر قابلية للقراءة. انظر أيضًا صفحتي sysopen و for_fd.

يُستدعى التابع new عبر العديد من توابع الفتح الخاصة بالصنفين File و IO، مثل open و Kernel#open و File.open.

وضع الفتح (Open Mode)

إن كان الوسيط mode عددًا صحيحًا، فيجب أن يكون مزيجًا من الأوضاع المعرفة في File::Constants‏ (File::RDONLY، File::WRONLY|File::CREAT). انظر صفحة open(2)‎ لمزيد من المعلومات.

إن كان mode سلسلة نصية، فيجب أن يكون وفق أحد الصيغ التالية:

fmode
fmode ":" ext_enc
fmode ":" ext_enc ":" int_enc
fmode ":" "BOM|UTF-*"

fmode هو سلسلة نصية تمثل وضعية فتح (open mode) مجرى د/خ (IO)، فيما يمثل الوسيط ext_enc الترميز الخارجي للمجرى، ويمثل int_enc الترميز الداخلي.

وضعية الفتح الخاصة بمجرى د/خ (IO Open Mode)

تتيح روبي وضعيات الفتح التالية:

  • "r": القراءة فقط، بدءًا من بداية الملف (الوضع الافتراضي.)
  • "+r": القراءة والكتابة، بدءًا من بداية الملف.
  • "w": الكتابة فقط، مسح محتويات الملف إن كان موجودا، أو إنشاء واحد جديد لأجل الكتابة.
  • "w+‎": الكتابة والقراءة، مسح محتويات الملف إن كان موجودا، أو إنشاء واحد جديد لأجل الكتابة والقراءة.
  • "a": الكتابة فقط، كل عملية كتابة ستضيف بيانات إلى نهاية الملف، أو إنشاء ملف جديد لأجل الكتابة إن لم يكن موجودا.
  • "a+‎": الكتابة والقراءة، كل عملية كتابة ستضيف بيانات إلى نهاية الملف، أو إنشاء ملف جديد لأجل الكتابة والقراءة إن لم يكن موجودا.

يجب استخدام الأوضاع التالية بشكل منفصل، بالإضافة إلى واحد أو أكثر من الأوضاع المذكورة أعلاه.

  • "b": الوضع الثنائي (Binary file mode). يمنع تحويل المحارف EOL <-> CRLF في نظام ويندوز. ويعين الترميز الخارجي عند القيمة ASCII-8BIT، إلا إن حُدد ترميز آخر.
  • "t": الوضع النصي (Text file mode).

عندما تكون وضعية فتح (open mode) مجرى د/خ الأصلي هي القراءة فقط (read only)، فلن يكون بالإمكان تغيير الوضع لجعله قابلا للكتابة. وبالمثل، لا يمكن تغيير وضعية الفتح من الكتابة إلى القراءة فقط.

عند محاولة إجراء مثل هذا التغيير، سيُطلق خطأ في مواقع مختلفة بحسب للنظام المستخدم.

ترميز مجرى د/خ (IO Encoding)

عند تحديد الترميزext_enc، سيتم وسم السلاسل النصية بذلك الترميز عند القراءة، وستُحوّل السلاسل النصية المُخرجة إلى الترميز المحدد عند الكتابة.

عند تحديد الترميزين ext_enc و int_enc سيتم تحويل السلاسل النصية المقروءة من ext_enc إلى int_enc عند الإدخال، كما سيتم تحويل السلاسل النصية المكتوبة من int_enc إلى ext_enc عند الإخراج. راجع صفحة Encoding لمزيد من التفاصيل حول تحويل ترميز المدخلات والمخرجات.

في حال استخدام أحد الترميزات "BOM | UTF-8" أو "BOM | UTF-16LE" أو "BOM | UTF16-BE"، ستتحقق روبي من محرف اليونيكود BOM في مستند الإدخال لأجل تحديد الترميز. بالنسبة للترميز UTF-16، يجب أن تكون وضعية فتح الملف ثنائية (binary). عند وجود المحرف BOM، فسيُحذف، ويُستخدم الترميز الخارجي المُستنتج من المحرف BOM. أما عند عدم إيجاد المحرف BOM، فسيتم استخدام ترميز اليونيكود المعطى ياعتباره الترميز الخارجي ext_enc. (خيار الترميز BOM-set غير حساس لحالة الأحرف، ما يجعل "bom | utf-8" صالحة أيضًا.)

خيارات

يمكن استخدام الوسيط opt بدلاً من mode لأجل مقروئية أفضل.

المفاتيح التالية مدعومة:

  • mode: مثل الوسيط mode
  • flags: يحدد رايات فتح الملف على هيئة عدد صحيح. في حال إعطاء الوسيط mode، فسيتم تحديد هذا الوسيط باستخدام عملية "أو الثنائية" (bitwise-OR).
  • external_encoding: الترميز الخارجي لمجرى د/خ.
  • internal_encoding: الترميز الداخلي لمجرى د/خ. العلامة "-" هي مرادف للترميز الداخلي الافتراضي. إن كانت قيمة هذا المفتاح تساوي nil، فلن يحدث أي تحويل.
  • encoding: يحدد الترميزين الخارجي والداخلي على الهيئة "extern:intern".
  • textmode: إن كانت القيمة قيمة صحيحة (truth value)، فسيكون مثل "t" في الوسيط mode.
  • binmode: إن كانت القيمة قيمة صحيحة (truth value)، فسيكون مثل "b" في الوسيط mode
  • autoclose: إن كانت قيمته تساوي false، فسيبقى fd مفتوحا بعد إنهاء مجرى د/خ.

أيضا، يمكن أن يكون للوسيط opt نفس مفاتيح التابع String#encode للتحكم في التحويل بين الترميز الخارجي والترميز الداخلي.

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

new(fd [, mode] [, opt]) io

المعاملات

fd‎

واصف الملف

mode‎

الوضعية

opt‎

خيارات

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

يُعيد التابع new كائنًا جديدًا من النوع IO.

أمثلة

المثال الأول

fd = IO.sysopen("/dev/tty", "w")
a = IO.new(fd,"w")
$stderr.puts "Hello"
a.puts "World"

الناتج:

Hello
World

المثال الثاني

require 'fcntl'

fd = STDERR.fcntl(Fcntl::F_DUPFD)
io = IO.new(fd, mode: 'w:UTF-16LE', cr_newline: true)
io.puts "Hello, World!"

fd = STDERR.fcntl(Fcntl::F_DUPFD)
io = IO.new(fd, mode: 'w', cr_newline: true,
            external_encoding: Encoding::UTF_16LE)
io.puts "Hello, World!"

كلا المثالين أعلاه يطبعان "Hello, World!‎" وفق الترميز UTF-16LE في مجرى إخراج الخطأ القياسي، مع تحويل المحرف EOL التي تم إنشاؤها من قبلputs إلى المحرف CR.

انظر أيضا

  • التابع open: عند عدم تمرير كتلة، فسيكون التابع IO.open مرادفاً للتابع new.

مصادر