الفرق بين المراجعتين ل"Ruby/IO/read-i"
سطر 3: | سطر 3: | ||
[[تصنيف: Ruby Method]] | [[تصنيف: Ruby Method]] | ||
[[تصنيف: Ruby IO]] | [[تصنيف: Ruby IO]] | ||
− | يقرأ التابع <code>read</code> <code>length</code> بايتًا (انظر فقرة البنية العامة) | + | يقرأ التابع <code>read</code> من [[Ruby/IO|مجرى د/خ]] <code>length</code> بايتًا (انظر فقرة البنية العامة). يجب أن يكون الوسيط <code>length</code> عددًا صحيحًا غير سلبي أو يكون <code>nil</code>. |
− | + | إن كان <code>length</code> عددًا صحيحًا موجبًا، سيحاول التابع <code>read</code> قراءة <code>length</code> بايت دون أي تحويل (الوضع الثنائي). | |
− | + | سيُعيد التابع <code>read</code> القيمة <code>nil</code> إذا تمت مصادفة محرف نهاية الملف (<code>EOF</code>) قبل إيجاد أي شيء يمكن قراءته. كما سيعيد عددا من البايتات أقل من العدد<code>length</code> إذا تمت مصادفة محرف نهاية الملف (<code>EOF</code>) أثناء القراءة. في حالة كان <code>length</code> عددا صحيحا، ستُرمّز [[Ruby/String|السلسلة النصية]] الناتجة دائمًا ب[[Ruby/Encoding|الترميز]] <code>ASCII-8BIT</code>. | |
− | إذا تم حذف الوسيط <code>length</code>، أو كان يساوي <code>nil</code>، فسيقرأ التابع <code>read</code> حتى يصادف محرف نهاية الملف | + | إذا تم حذف الوسيط <code>length</code>، أو كان يساوي <code>nil</code>، فسيقرأ التابع <code>read</code> حتى يصادف محرف نهاية الملف <code>EOF</code>، وسيتم تطبيق تحويل الترميز إن كان ذلك ممكنًا. ستُعاد [[Ruby/String|سلسلة نصية]] حتى لو صودِف محرف نهاية الملف EOF قبل قراءة أي بيانات. |
إن كان <code>length</code> يساوي الصفر، فستُعاد [[Ruby/String|سلسلة نصية]] فارغة (<code>""</code>). | إن كان <code>length</code> يساوي الصفر، فستُعاد [[Ruby/String|سلسلة نصية]] فارغة (<code>""</code>). | ||
− | في حال إعطاء الوسيط الاختياري <code>outbuf</code> (انظر فقرة البنية العامة)، فينبغي أن يشير إلى [[Ruby/String|سلسلة نصية]] | + | في حال إعطاء الوسيط الاختياري <code>outbuf</code> (انظر فقرة البنية العامة)، فينبغي أن يشير إلى [[Ruby/String|سلسلة نصية]]، والتي ستتلقى البيانات. لن يحتوي <code>outbuf</code> إلا البيانات المستلمة بعد استدعاء التابع حتى لو لم يكن فارغاً في البداية. |
− | عندما | + | عندما يُستدعى التابع <code>read</code> في نهاية الملف، فسيعيد إما <code>nil</code> أو <code>""</code>، بناءً على الطول <code>length</code>، مثلا، ستعيد التعبيرات <code>read</code> و <code>read(nil)</code> و <code>read(0)</code> القيمة <code>""</code>، فيما سيعيد التعبير <code>read( positive_integer )</code> القيمة <code>nil</code>. |
− | + | لاحظ أن هذا التابع يتصرف بطريقة مشابهة للدالة <code>fread()</code> في لغة C. وهذا يعني أنه سيحاول إجراء استدعاءات النظام <code>read(2)</code> لقراءة البيانات بالطول المحدد (أو حتى يصادف محرف نهاية الملف <code>EOF</code>). يستمر هذا السلوك حتى لو لم يكن [[Ruby/IO|مجرى د/خ]] في وضع عدم التعطيل (non-blocking mode). (هذا التابع غير حساس لراية عدم التعطيل كغيره من التوابع.) إذا كنت تريد سلوكا مشابها لاستدعاء النظام <code>read(2)</code>، فضع في اعتبارك استخدام التوابع <code>[[Ruby/IO/readpartial|readpartial]]</code> و <code>[[Ruby/IO/read_nonblock|read_nonblock]]</code> و <code>[[Ruby/IO/sysread|sysread]]</code>. | |
− | |||
− | لاحظ أن هذا التابع يتصرف بطريقة مشابهة للدالة fread() في لغة C. وهذا يعني أنه سيحاول إجراء استدعاءات النظام read(2) لقراءة البيانات بالطول المحدد (أو حتى يصادف محرف نهاية الملف EOF). | ||
==البنية العامة== | ==البنية العامة== | ||
<syntaxhighlight lang="ruby">read([length [, outbuf]]) → string, outbuf, or nil</syntaxhighlight> | <syntaxhighlight lang="ruby">read([length [, outbuf]]) → string, outbuf, or nil</syntaxhighlight> | ||
سطر 28: | سطر 26: | ||
سلسلة نصية تتلقى البيانات | سلسلة نصية تتلقى البيانات | ||
==القيمة المُعادة== | ==القيمة المُعادة== | ||
+ | يُعيد التابع <code>read</code> [[Ruby/String|السلسلة النصية]] المقروءة أو القيمة <code>nil</code> أو [[Ruby/String|سلسلة نصية]] فارغة (<code>""</code>) بناءً على قيمة الطول <code>length</code> | ||
+ | |||
==أمثلة== | ==أمثلة== | ||
مثال على استخدام التابع <code>read</code>: | مثال على استخدام التابع <code>read</code>: | ||
سطر 52: | سطر 52: | ||
end</syntaxhighlight> | end</syntaxhighlight> | ||
==انظر أيضا== | ==انظر أيضا== | ||
− | + | * التابع <code>[[Ruby/IO/read_nonblock|read_nonblock]]</code>: يقرأ على الأكثر <code>maxlen</code> بايتًا من [[Ruby/IO|مجرى د/خ]] | |
− | * التابع <code>[[Ruby/IO/read_nonblock|read_nonblock]]</code>: يقرأ على الأكثر <code>maxlen</code> | ||
==مصادر== | ==مصادر== | ||
*[http://ruby-doc.org/core-2.5.1/IO.html#method-i-read قسم التابع read في الصنف IO في توثيق روبي الرسمي.] | *[http://ruby-doc.org/core-2.5.1/IO.html#method-i-read قسم التابع read في الصنف IO في توثيق روبي الرسمي.] |
مراجعة 17:11، 13 نوفمبر 2018
يقرأ التابع read
من مجرى د/خ length
بايتًا (انظر فقرة البنية العامة). يجب أن يكون الوسيط length
عددًا صحيحًا غير سلبي أو يكون nil
.
إن كان length
عددًا صحيحًا موجبًا، سيحاول التابع read
قراءة length
بايت دون أي تحويل (الوضع الثنائي).
سيُعيد التابع read
القيمة nil
إذا تمت مصادفة محرف نهاية الملف (EOF
) قبل إيجاد أي شيء يمكن قراءته. كما سيعيد عددا من البايتات أقل من العددlength
إذا تمت مصادفة محرف نهاية الملف (EOF
) أثناء القراءة. في حالة كان length
عددا صحيحا، ستُرمّز السلسلة النصية الناتجة دائمًا بالترميز ASCII-8BIT
.
إذا تم حذف الوسيط length
، أو كان يساوي nil
، فسيقرأ التابع read
حتى يصادف محرف نهاية الملف EOF
، وسيتم تطبيق تحويل الترميز إن كان ذلك ممكنًا. ستُعاد سلسلة نصية حتى لو صودِف محرف نهاية الملف EOF قبل قراءة أي بيانات.
إن كان length
يساوي الصفر، فستُعاد سلسلة نصية فارغة (""
).
في حال إعطاء الوسيط الاختياري outbuf
(انظر فقرة البنية العامة)، فينبغي أن يشير إلى سلسلة نصية، والتي ستتلقى البيانات. لن يحتوي outbuf
إلا البيانات المستلمة بعد استدعاء التابع حتى لو لم يكن فارغاً في البداية.
عندما يُستدعى التابع read
في نهاية الملف، فسيعيد إما nil
أو ""
، بناءً على الطول length
، مثلا، ستعيد التعبيرات read
و read(nil)
و read(0)
القيمة ""
، فيما سيعيد التعبير read( positive_integer )
القيمة nil
.
لاحظ أن هذا التابع يتصرف بطريقة مشابهة للدالة fread()
في لغة C. وهذا يعني أنه سيحاول إجراء استدعاءات النظام read(2)
لقراءة البيانات بالطول المحدد (أو حتى يصادف محرف نهاية الملف EOF
). يستمر هذا السلوك حتى لو لم يكن مجرى د/خ في وضع عدم التعطيل (non-blocking mode). (هذا التابع غير حساس لراية عدم التعطيل كغيره من التوابع.) إذا كنت تريد سلوكا مشابها لاستدعاء النظام read(2)
، فضع في اعتبارك استخدام التوابع readpartial
و read_nonblock
و sysread
.
البنية العامة
read([length [, outbuf]]) → string, outbuf, or nil
المعاملات
length
عدد صحيح يمثل الطول
outbuf
سلسلة نصية تتلقى البيانات
القيمة المُعادة
يُعيد التابع read
السلسلة النصية المقروءة أو القيمة nil
أو سلسلة نصية فارغة (""
) بناءً على قيمة الطول length
أمثلة
مثال على استخدام التابع read
:
f = File.new("testfile")
f.read(16) #=> "This is line one"
# read whole file
open("file") do |f|
data = f.read # This returns a string even if the file is empty.
# ...
end
# iterate over fixed length records
open("fixed-record-file") do |f|
while record = f.read(256)
# ...
end
end
# iterate over variable length records,
# each record is prefixed by its 32-bit length
open("variable-record-file") do |f|
while len = f.read(4)
len = len.unpack("N")[0] # 32-bit length
record = f.read(len) # This returns a string even if len is 0.
end
end
انظر أيضا
- التابع
read_nonblock
: يقرأ على الأكثرmaxlen
بايتًا من مجرى د/خ