سؤال

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

123\n
456\n
789

أريد تشغيل البرنامج النصي الخاص بي مثل ذلك: Script.rb <Input وجعله يقوم بتحويل محتويات ملف الإدخال إلى صفيف، والتقسيم على حرف السطر الجديد. لذلك، سأواجه شيئا مثل Myarray = [123،456،789]. إليك ما حاولت القيام به ولا حظ كثيرا:

myArray = STDIN.to_s
myArray.split(/\n/)
puts field.size

أتوقع أن أطبع هذا 3، لكنني أحصل على 15. أنا مرتبك حقا هنا. أي مؤشرات؟

هل كانت مفيدة؟

المحلول

انت تريد

myArray = $stdin.readlines

التي سوف تحصل على جميع Stdin $ في صفيف مع إدخال صفيف واحد لكل خط من المدخلات.

لاحظ أن هذا غير فعال بشكل مذهل (الذاكرة الحكيمة) مع ملفات إدخال كبيرة، لذلك أنت أفضل بكثير من استخدام شيء مثل:

$stdin.each_line do |l|
  ...
end

بدلا من

a = $stdin.readlines
a.each do |l|
  ...
end

لأن السابق لا يخصص الذاكرة لكل شيء مقدما. حاول معالجة ملف سجل Gigabyte متعدد البدء الطريقة الثانية لرؤية مدى جودة أداء مبادلة النظام الخاص بك هو ...u003Cgrin>

نصائح أخرى

ما هي بعد هو استخدام $stdin بدلا من $ stdin.to_s

ruby -e 'p $stdin.readlines.size' < INPUT
3

ruby -e 'p $stdin.to_s'
"#<IO:0x7fc7cc578af0>"

Stdin.lines كسول، لكنه يمنحك بنية تشبه الصفيف لتمرير وتكرار.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top