68940


基本的なことかもしれませんが、おしえてください。  
同一ファイル内での同じ文言をチェックするスクリプトを作成したいです。  
↓のように作ってみたのですが、想定通り動作しません。

lineを出力してみたところ1行目のデータのみ出力され、2行目以降が出力されない状態です。

すいませんが、ご教授下さい。

[code]

    file_name = 'check.txt'
    r = File.open(file_name)
    
    File.foreach(file_name) do |line|
      r.each do |line2|
        puts line # → 一行目がrの行数分出力されるのみ
      end
    end
    
    r.close
    
[/code]


CC BY-SA 3.0
2018-03-31T06:48:43.373
42827
2020-07-25T07:23:58.743
27957
question
ruby
Rubyで二重ループを使ったファイル読み込み時に想定通り動作しない


`r.each`を(途中で`berak`することなく)最後まで実行すると、`r`は最後まで読み込んだことになります(読み込み位置がEOFに達している)。その後、`r.each`が再び実行されても、既に最後まで読み込んでいるため、一行も読み込まれず、処理全体がスキップされます。

再度、最初から読み直したい場合は、@metropolis さんの書いているとおり、`r.rewind`で読み込み位置を先頭に戻してください。


CC BY-SA 4.0
2020-07-25T07:23:58.743
68940
2020-07-25T07:23:58.743
7347
42827
answer