foreach(path, rs = $/, chomp: false, **opts) {|line| ... } -> nil[permalink][rdoc][edit]foreach(path, rs = $/, chomp: false, **opts) -> Enumerator-
path で指定されたファイルの各行を引数としてブロックを繰り返し実行します。 path のオープンに成功すれば nil を返します。
ブロックが与えられなかった場合は、path で指定されたファイルの各行を繰り返す Enumerator オブジェクトを生成して返します。
テキスト読み込みメソッドとして動作します。
path が空ファイルの場合、何もせずに nil を返します。 Kernel.#open と同様 path の先頭が "|" ならば、"|" に続くコマンドの出力を読み取ります。なお、この "|" によるコマンド起動は Ruby 3.3 から deprecated であり、Ruby 4.0 で削除されました。IO.popen を使用してください。
- [PARAM]
path: - ファイル名を表す文字列か "|コマンド名" を指定します。
- [PARAM]
rs: - 行の区切りを文字列で指定します。rs に nil を指定すると行区切りなしとみなします。空文字列 "" を指定すると連続する改行を行の区切りとみなします(パラグラフモード)。
- [PARAM]
chomp: - true を指定すると各行の末尾から "\n", "\r", または "\r\n" を取り除きます。
- [PARAM]
opts: -
ファイル path を open する時に使われるオプションをキーワード引数で指定します。
:encodingで読み込んだ行のエンコーディングを、:modeで IO.open のモード文字列を指定できます。これらの他、IO.new のオプション引数(:external_encodingなど)が指定できます。 - [EXCEPTION]
Errno::EXXX: - path のオープンに失敗した場合、発生します。
例:カンマを行の区切りに指定( rs = "," )IO.write("testfile", "line1\nline2,\nline3\n") p IO.foreach("testfile") # => #<Enumerator: IO:foreach("testfile")> IO.foreach("testfile") { |x| print "GOT ", x } # => GOT line1 # GOT line2, # GOT line3
例: 各行の末尾から "\n", "\r", または "\r\n" を取り除く(chomp = true)IO.write("testfile", "line1,line2,line3") IO.foreach("testfile", ",") { |x| puts "GOT #{x}" } # => GOT line1, # GOT line2, # GOT line3
例: エンコーディングを指定IO.write("testfile", "line1\nline2,\nline3\n") IO.foreach("testfile", chomp: true) { |x| print "GOT ", x } # => GOT line1GOT line2,GOT line3IO.write("testfile", "line1\nline2,\nline3\n") IO.foreach("testfile", encoding: "UTF-8") { |x| p x.encoding } # => #<Encoding:UTF-8> # #<Encoding:UTF-8> # #<Encoding:UTF-8>[SEE_ALSO] $/
- [PARAM]