Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【Ruby3.x】CSV::Table::by_row!()メソッドの使い方

by_row!メソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

by_row!メソッドは、CSVデータを表形式で扱うCSV::Tableオブジェクトが保持する各データ行に対し、指定された処理を実行するメソッドです。このメソッドは、CSV::Tableオブジェクトの中からヘッダ行を除くデータ行を一つずつ取り出し、それらを操作する際に利用されます。

このメソッドは、通常、ブロックと呼ばれる処理の固まりとともに使用されます。ブロックが渡された場合、CSV::Tableオブジェクト内のそれぞれのデータ行は、CSV::Rowオブジェクトとしてブロックに渡されます。ブロック内で行われた処理の結果、例えば行の値を変更したり、特定の条件に基づいて行を加工したりすることが可能です。そして、ブロックの評価結果が新しい行として、元のCSV::Tableオブジェクト内の既存の行と置き換えられます。

メソッド名に付いている!(エクスクラメーションマーク)は、このメソッドが破壊的メソッドであることを示しています。つまり、by_row!メソッドを実行すると、レシーバである元のCSV::Tableオブジェクトの内容が直接変更され、永続的に上書きされます。そのため、元のデータを保持しておきたい場合は、事前に複製を作成するなど注意が必要です。

もしブロックが与えられなかった場合、by_row!メソッドはEnumeratorオブジェクトを返します。これにより、各行に対する処理を遅延させたり、チェーンして複数の処理を組み合わせたりすることが可能になります。このメソッドは、CSVデータを行単位で効率的に加工・変換したい場合に非常に役立ちます。

構文(syntax)

1require 'csv'
2
3csv_table = CSV::Table.new([
4  CSV::Row.new([:id, :name], [1, "Alice"]),
5  CSV::Row.new([:id, :name], [2, "Bob"])
6])
7csv_table.by_row!

引数(parameters)

row_class = CSV::Row

  • row_class = CSV::Row: 生成される行オブジェクトのクラスを指定します。デフォルトは CSV::Row です。

戻り値(return)

Enumerator または CSV::Table

CSV::Table オブジェクトを、各行を要素とする CSV::Row オブジェクトの列挙子として返します。元の CSV::Table オブジェクトは変更されません。

関連コンテンツ