0

Ruby の学習を始めたところ、厄介な問題に遭遇しました。プログラムにテキスト ファイルをインポートしました。その中の行を反復処理して画面に出力したいと考えています。

これを行うと、コンソールは最後に出力された行を上書きし、その上に新しい行を書き込みます。なぜこれが起こっているのですか、どうすれば解決できますか?

これが私のコードです:

passwords = File.open('C:\Users\Ryan\Desktop\pw.txt', 'r')
lines = passwords.gets

for line in lines
    puts line
end

更新: ループの動作が非常に奇妙です。私はそれにスリープステートメントを入れましたが、一度スリープしてから行を出力し続けるだけでした。各行を出力する前にスリープすることを期待していました。以下の例:

passwords.each do |line|
    sleep 1
    puts line.chomp
end

更新 2: 新しいテキスト ファイルを作成し、テスト用にランダムな内容を入力したところ、正常に動作しました。元のファイルには、コンソールへの印刷を台無しにする悪い文字/エンコーディングが含まれていたようです。

4

3 に答える 3

1

EOL (別名行末) の問題がありますか? これを試して:

passwords = File.open('C:\Users\Ryan\Desktop\pw.txt', 'r')
lines = passwords.gets
lines.each { |line| puts line.chomp }
passwords.close

この呼び出しは、 、、または行末chompを取り除き、ネイティブの EOL を追加します。\n\r\r\nputs

于 2011-04-13T00:16:51.953 に答える
0

最終的に、テキスト ファイルが問題の原因であることがわかりました。同じコンテンツで新しいものを作成したところ、意図したとおりに機能し始めました。

于 2011-04-14T16:43:11.803 に答える
0
File.open('C:\Users\Ryan\Desktop\pw.txt') do |line|
  while not line.eof?
    puts line.readline.chomp
  end
end

また

File.read("file").each { |line| puts line.chomp }
于 2011-04-12T23:52:27.453 に答える