الفرق بين المراجعتين لصفحة: «Ruby/IO/new»
أنشأ الصفحة ب'<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> | يُعيد التابع <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| | يُستدعى التابع <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/ | إن كان الوسيط <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> [[Ruby/String|سلسلة نصية]]، فيجب أن يكون وفق أحد الصيغ التالية:<syntaxhighlight lang="ruby">fmode | ||
<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> هو | |||
== وضعية الفتح الخاصة ب[[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)، فلن يكون بالإمكان تغيير الوضع لجعله قابلا للكتابة. وبالمثل، لا يمكن تغيير وضعية الفتح من الكتابة إلى القراءة فقط. | |||
عند محاولة إجراء مثل هذا التغيير، سيُطلق خطأ في مواقع مختلفة بحسب للنظام المستخدم. | |||
عند محاولة إجراء مثل هذا التغيير، سيُطلق خطأ في مواقع مختلفة | |||
== ترميز [[Ruby/IO|مجرى د/خ]] (<code>[[Ruby/IO|IO]]</code> <code>[[Ruby/Encoding|Encoding]]</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> لمزيد من التفاصيل حول تحويل ترميز المدخلات والمخرجات. | |||
في حال استخدام أحد الترميزات "<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>" صالحة أيضًا.) | |||
== خيارات == | |||
يمكن استخدام الوسيط <code>opt</code> بدلاً من <code>mode</code> لأجل مقروئية أفضل. | |||
: | المفاتيح التالية مدعومة: | ||
* <code>mode</code>: مثل الوسيط <code>mode</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> للتحكم في التحويل بين الترميز الخارجي والترميز الداخلي. | ||
==البنية العامة== | ==البنية العامة== | ||
<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>. | |||
==أمثلة== | ==أمثلة== | ||
=== المثال الأول === | |||
<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/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| | |||
==مصادر== | ==مصادر== | ||
*[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
.