2011-05-13 2 views
1

file.each_lineの直後にfile.each_charを実行しようとしていますが、このようなときは決して呼び出されません。 file.each_lineを取り除くと、file.each_charコールは完全に機能します。ruby​​のfile.each_lineの直後にfile.each_charが動作しない

は、ここに参照のために私のコードです:

file.each_line do |line| 
    if line =~ /^\s*$/ 
    next 
    end 
    lines += 1 
end 

file.each_char do |char| 
    if char =~ /\s/ 
    next 
    end 
    chars += 1 
end 

私は右file.each_linefile.each_charコールを管理するにはどうすればよいですか?

+0

あなたは 'file.each_line'を実行した後でファイルの最後にいるので、 – Mischa

+0

'lines + = 1'と' chars + = 1'は何ですか? –

+0

@AndrewGrimm:文字数と行数を記録しているカウンタをインクリメントするだけです。 –

答えて

6

あなたがeach_lineを実行すると、それはあなたのIOストリームの終わり(この場合はファイル)を指し、それを残します。もう一度ファイル全体を反復処理するには、ストリームの先頭をポイントするようにリセットする必要があります。 IO#rewindあなたのためにこれを行います:

file.each_line do |line| 
    if line =~ /^\s*$/ 
    next 
    end 

    lines += 1 
end 

file.rewind 

file.each_char do |char| 
    if char =~ /\s/ 
    next 
    end 

    chars += 1 
end 
+0

完璧、ありがとう! –

関連する問題