الصنف ARGF في روبي
الصنف ARGF
هو مجرى (stream) صُمِّم ليُستخدَم في الملفات البرمجية (scritps) التي تُعالج الملفات المُمرَّرة إليها على شكل وسائط في سطر الأوامر (command-line arguments)، أو المُمرَّرة عبر مجرى الدخل القياسي (STDIN
).
تُخزَّن الوسائط المُمرَّرة للملف البرمجي في المصفوفة ARGV، إذ يخزَّن وسيط واحد في كل عنصر. تفترض ARGF
أنّ الوسائط التي ليست أسماء ملفات (filenames) قد أزيلت من ARGV
. انظر الشيفرة التالية مثلًا:
$ ruby argf.rb --verbose file1 file2
ARGV #=> ["--verbose", "file1", "file2"]
option = ARGV.shift #=> "--verbose"
ARGV #=> ["file1", "file2"]
يمكنك الآن استخدام ARGF
للعمل مع سلسلة من كل هذه الملفات المسماة (named files). على سبيل المثال، ستعيد العبارة ARGF.read
محتويات الملف file1
متبوعةً بمحتويات الملف file2
.
بعد قراءة أحد الملفات الموجودة في ARGV
، تزيل ARGF
هذا الملف من المصفوفة. بناءً على ذلك، ستصبح ARGV
فارغةً بعد قراءة جميع الملفات.
يمكنك تعديل ARGV
بنفسك للتحكم في عملها. إن أزلت مثلًا ملفًا من ARGV
، فستتجاهله ARGF
؛ وإذا أضفت ملفات إلى ARGV
، فستُعامل كما لو أنها مُرِّرت في سطر الأوامر. تفحَّص مثلًا الشيفرة التالية:
ARGV.replace ["file1"]
ARGF.readlines # في مصفوفة file1 إعادة محتويات الملف
ARGV #=> []
ARGV.replace ["file2", "file3"]
ARGF.read # file3 والملف file2 إعادة محتويات الملف
إن كانت ARGV
فارغةً، فستتصرّف وكأنّها تحتوي مجرى الدخل القياسي (STDIN
)، أي البيانات المُرسلة عبر أنبوب (piped) إلى ملفك البرمجي (script). إليك مثلًا هذا المثال البسيط:
$ echo "glark" | ruby -e 'p ARGF.read'
"glark\n"
التوابع العامة (Public Instance Methods)
التابع argv
يعيد التابع argv
المصفوفة ARGV
التي تحوي الوسائط المُمرّرة إلى ملفك البرمجي (script
)، إذ يخزَّن في كلِّ عنصر من عناصرها وسيطٌ واحدٌ.
التابع binmode?
يتحقق التابع binmode
? إذا تمت قراءة المجرى ARGF
في الوضع الثنائي (binary
mode
).
إن أردت تفعيل الوضع الثنائي للمجرى ARGF
، فاستخدم التابع binmode
.
التابع binmode
يفعِّل التابع binmode
الوضع الثنائي (binary
mode
) للمجرى ARGF
؛ مجرد أن يصبح المجرى في الوضع الثنائي، لا يمكن إعادته إلى الوضع غير الثنائي. هذا الخيار له التأثيرات التالية:
- تصبح عملية تحويل السطر الجديد غير ممكنة.
- تصبح عملية تحويل الترميز غير ممكنة أيضًا.
- يُعامل المحتوى وكأنه كُتِب باستعمال الترميز
ASCII
-8BIT
.
التابع bytes
التابع ()bytes
هو اسم بديل مهمل (deprecated
) للتابع each_byte
.
التابع chars
التابع ()chars
هو اسم بديل مهمل (deprecated
) للتابع each_char
.
التابع close?
يتحقق التابع close
? إن أُغلِق الملف الحالي أم لا.
إن أردت إغلاق الملف الحالي، فاستعمل التابع ARGF
. close
.
التابع close
يغلق التابع close
الملف الحالي ويتخطاه إلى الملف التالي في ARGV
. إن لم تتبقَ ملفات أخرى لفتحها، فسيكتفي التابع بإغلاق الملف الحالي. انتبه إلى أنَّ مجرى الدخل القياسي (STDIN
) لن يُغلَق أبدًا.
التابع codepoints
التابع codepoints
هو اسم بديل مهمل (deprecated
) للتابع each_codepoints
.
التابع each
يعيد التابع each_line
مُعرِّفًا ثابتًا (enumerator
) يتكرر (iterates
) عبر كل سطر (الذي يُفصَل بالفاصلة الممرَّرة) من كل ملف من الملفات الموجودة في ARGV
. في حال تمرير كتلة برمجية للتابع each_line
، فسيُمرّر كل سطر بدوره إلى تلك الكتلة، وإلا فسيعاد مُعرِّف ثابت (enumerator
).
يسمح لك هذا التابع بمعالجة الملفات المُمرَّرة من سطر الأوامر كما لو كانت ملفًا واحدًا مكونًا من سلسلة من هذه الملفات المسماة. بعد إعادة السطر الأخير من الملف الأول، سيُعاد السطر الأول من الملف الثاني. يمكن استخدام التابعيْن ARGF
. filename
و ARGF
. lineno
لمعرفة اسم الملف ورقم السطر، على التوالي، للسطر الحالي.
التابع each_line
يعيد التابع each_line
قيمة قابلة للعد (enumerator
) تتكرر (iterates
) عبر كل سطر (الذي يفصل بالفاصلة الممرَّرة) من كل ملف من الملفات الموجودة في ARGV
. في حال تمرير كتلة برمجية للتابع each_line
، فسيُمرّر كل سطر بدوره إلى تلك الكتلة، وإلا فستعاد قيمة قابلة للعد (enumerator
).
يسمح لك هذا التابع بمعالجة الملفات المُمرَّرة من سطر الأوامر كما لو كانت ملفًا واحدًا مكونًا من سلسلة من هذه الملفات المسماة. بعد إعادة السطر الأخير من الملف الأول، سيُعاد السطر الأول من الملف الثاني. يمكن استخدام التابعيْن ARGF
. filename
و ARGF
. lineno
لمعرفة اسم الملف ورقم السطر، على التوالي، للسطر الحالي.
التابع eof?
يتحقق التابع eof
? إذا بلغ الملف الحالي نهايته في ARGF
؛ أي أنّه لم تعد هناك أي بيانات لقراءتها.
ينبغي أن يكون المجرى مفتوحًا من قبل للقراءة، وإلا فسيُطلق الخطأ IOError
.
التابع external_encoding
يعيد التابع external_encoding
الترميز الخارجي (external
encoding
) للملفات المقروءة من ARGF
على شكل كائن من النوع Encoding
.
الترميز الخارجي هو الترميز الذي كُتِب به النص وخُزِّن في الملف. إن وازنَّا هذا التابع مع التابع ARGF
. internal_encoding
، نجد أنَّ الأخير يعيد الترميز المستخدم لتمثيل هذا النص ضمن Ruby
.
لضبط الترميز الخارجي، استخدم التابع ARGF
. set_encoding
.
التابع file
يعيد التابع file
الملف الحالي على شكل كائن من النوع IO
أو File
.
التابع filename
يعيد التابع filename
اسم الملف الحالي.
التابع fileno
يعيد التابع fileno
عددًا صحيحًا يمثل واصف الملف العددي (numeric
file
descriptor
) للملف الحالي. إن لم يكن هنالك ملف، فسيُطلَق الخطأ ArgumentError
.
التابع getbyte
يجلب التابع getbyte
بايتًا واحدًا (8 بتّات) من المجرى ARGF
.
التابع getc
يجلب التابع getc
المحرف التالي من المجرى ARGF
.
يعامل المجرى ARGF
الملفات المُمرَّرة في سطر الأوامر كما لو كانت ملفًا واحدًا يتألَّف من جميع تلك الملفات؛ أي يتعاقب بعضها خلف بعض. بناءً على ذلك، يؤدي استدعاء التابع getc
مرة أخرى بعد جلب المحرف الأخير من الملف الأول مثلًا إلى جلب المحرف الأول من الملف الثاني، وهلم جرًّا.
التابع gets
يجلب التابع gets
السطر التالي من الملف الحالي في المجرى ARGF
.
التابع inplace_mode
= ext
يضبط التابع inplace_mode
عند استدعائه بالشكل inplace_mode
= ext
امتداد اسم الملف بوضعية التعديل الموضعي (in
-place
editing
mode
) إلى السلسلة النصية ext
المعطاة. تضاف هذه القيمة المعطاة إلى أسماء كل الملفات التي يتم تعديلها، ويُحفَظ الملف المُعدَّل تحت هذا الاسم الجديد.
التابع inplace_mode
يعيد التابع inplace_mode
امتداد الملف المضاف إلى أسماء الملفات المُعدَّلة وفق وضع التعديل الموضعي (in
-place
edit
mode
).
يمكن تعيين هذه القيمة التي يعيدها التابع inplace_mode
عبر استدعائه بالشكل inplace_mode
= ext
أو بتمرير الخيار i
- إلى الملف التنفيذي لمفسِّر روبي..
التابع inspect
يعد التابع inspect
() اسمًا بديلًا للتابع to_s
.
التابع internal_encoding
يعيد التابع internal_encoding
الترميز الداخلي (internal
encoding
) للسلاسل النصية المقروءة من المجرى ARGF
على شكل كائن من النوع Encoding
.
التابع lineno
= integer
يعيِّن التابع lineno
عند استدعائه بالشكل lineno
= integer
رقم السطر الحالي للمجرى ARGF
ككُل.
يضبط المجرى ARGF
رقم السطر تلقائيًا أثناء قراءة البيانات، لذلك لن تحتاج إلى تعيينه بنفسك إلا ما ندر.
لمعرفة رقم السطر الحالي، استخدم التابع lineno
.
التابع lineno
يجلب التابع lineno
رقم السطر الحالي للمجرى ARGF
ككُل.
يمكن تعيين هذه القيمة يدويًا عبر استدعاء هذا التابع بالشكل lineno
= integer
.
التابع lines
يعدُّ التابع lines
اسمًا بديلًا مهملًا (deprecated
) للتابع each_line
.
التابع path
يعيد التابع path
اسم الملف الحالي.
التابع pos
= position
ينقل التابع pos
عند استدعائه بالشكل pos
= position
المؤشِّر إلى المكان position
(المعطى بالبايت) في المجرى ARGF
.
التابع pos
يعيد التابع pos
موضع المؤشِّر الحالي في الملف الحالي في المجرى ARGF
.
التابع print
يطبع التابع print
الكائن أو الكائنات المُمرَّرة إليه على المجرى ios
(اختصارًا للعبارة Input
Output
Stream
).
يجب أن يكون المجرى مفتوحًا وفي وضعية الكتابة. إن لم يكن الكائن المعطى سلسلةً نصيةً، فسيُحوَل إلى سلسلة نصية باستدعاء التابع to_s
تلقائيًّا. عند استدعاء التابع print
دون تمرير أي وسائط، سيُطبَع محتويات المعامل $_
.
إذا لم يكن فاصل حقل المخرجات (,$) يساوي القيمة nil
، فسيُدرج بين الكائنات المُمررة. وإذا لم يكن فاصل سجل المخرجات (\$) يساوي القيمة nil
، فسيُضاف إلى المُخرج النهائي.
التابع printf
يطبع التابع printf
الكائن أو الكائنات الممرَّرة إليه على المجرى ios
(اختصارًا للعبارة Input
Output
Stream
) بعد تنسيقها بشكل معين. للمزيد من المعلومات حول المعاملات المستعملة في عملية التنسيق (أي المستعملة مع الوسيط format_string
)، ارجع إلى صفحة التابع Kernel
.sprintf
.
التابع putc
يكتب التابع putc
محرفًا واحدًا على المجرى ios
(اختصارًا للعبارة Input
Output
Stream
).
التابع puts
يكتب التابع puts
الكائن أو الكائنات المُمرَّرة إليه على المجرى ios
(اختصارًا للعبارة Input
Output
Stream
) ثمَّ يضيف سطرًا جديدًا في النهاية إن لم تحتوِ تلك الكائنات المعطاة على محرف سطرٍ جديدٍ.
يجب أن يكون المجرى مفتوحًا وفي وضعية الكتابة. إن مرِّرت مصفوفةٌ إلى التابع puts
كوسيط، فسيطبع كلَّ عنصر في سطر جديد. إن لم يكن الكائن المعطى سلسلةً نصيةً أو مصفوفة، فسيُحوَل إلى سلسلة نصية باستدعاء التابع to_s
تلقائيًّا. عند استدعاء التابع puts
دون تمرير وسائط، سيطبع سطرًا جديدًا فارغًا.
لاحظ أنّ التابع puts
يستخدم دائمًا محارف الأسطر الجديدة ولا يتأثر بفاصل سجل المخرجات (\$).
التابع read
يقرأ التابع read
عددًا محددًا من البايتات من المجرى ARGF
.
التابع readbyte
يقرأ التابع readbyte
البايت التالي من المجرى ARGF
ثمَّ يعيده على شكل عدد صحيح (Integer
).
يطلق التابع الخطأ EOFError
بعد قراءة البايت الأخير من الملف الأخير.
التابع readchar
يقرأ التابع readchar
المحرف التالي من المجرى ARGF
ثم يعيده على شكل سلسلة نصية.
يُطلِق التابع الخطأ EOFError
بعد قراءة المحرف الأخير من الملف الأخير.
التابع readline
يقرأ التابع readline
السطر التالي من الملف الحالي في المجرى ARGF
.
يُفترَض أنَّ الفاصل المستعمل لفصل الأسطر هو المحرف /$؛ لاستخدام فاصل سطري مغاير، يمكن تمرير المحرف المراد استعماله كفاصل إلى التابع readline
.
يُطلَق الخطأ EOFError
عند الوصول إلى نهاية الملف.
التابع readlines
يقرأ التابع readlines
الملف الحالي في المجرى ARGF
بشكل كامل.
التابع readpartial
يقرأ التابع readpartial
عددًا من البايتات لا يتجاوز قيمةً حديةً عليا من المجرى ARGF
.
سيطلق التابع readpartial
الخطأ EOFError
عند الوصول إلى نهاية المجرى ARGF
؛ لما كان المجرى ARGF
يتألف من سلسلة من عدة ملفات، فسيوجد محرف نهاية الملف (EOF
) في نهاية كل ملف.
التابع read_nonblock
يقرأ التابع read_nonblock
عددًا من البايتات لا يتجاوز قيمةً حديَّةً عليا من المجرى ARGF
في وضع عدم الحجز (non
-blocking
mode
).
التابع rewind
يُرجِع التابع rewind
المؤشر إلى بداية الملف الحالي عند بداية المدخلات (input
) ويعيد تعيين رقم السطر ARGF
. lineno
إلى القيمة 0.
التابع seek
يحرِّك التابع seek
المؤشِّر الحالي في المجرى ARGF
إلى موقع محدد.
التابع set_encoding
يضبط التابع set_encoding
الترميز الداخلي والخارجي المستعمل مع السلاسل النصية المقروءة من المجرى ARGF
.
التابع skip
يتخطى التابع skip
الملف الحالي إلى الملف التالي ويجعله هو الملفَّ الحالي في المجرى ARGF
. وفي حال لم يكن هنالك أية ملفات متبقية، فلن يكون لهذا التابع أي تأثير.
التابع tell
يعيد التابع tell
موضع المؤشِّر الحالي في الملف الحالي في ARGF
.
التابع to_a
يقرأ التابع to_a
الملف الحالي في المجرى ARGF
بشكل كامل ثم يضع محتوياته في مصفوفة.
التابع to_i
يعيد التابع to_i
عددًا صحيحًا يمثل واصف الملف العددي (numeric
file
descriptor
) للملف الحالي. إن لم يكن هنالك ملف، فسيُطلَق الخطأ ArgumentError
.
التابع to_io
يعيد التابع to_io
الملف الحالي على شكل كائن من النوع IO
.
التابع to_s
يعيد التابع to_s
القيمة ""ARGF"
".
التابع to_write_io
يعيد التابع to_write_io
نسخةً من الصنف IO
مرتبطةً بالمجرى ARGF
للكتابة عليها في حال كان الوضع inplace
مفعَّلًا.
التابع write
يكتب التابع write
السلسلة النصية الممرَّرة إليها على المجرى ARGF
[a
] في حال كان الوضع inplace
مفعَّلًا.