0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

CSVファイルのフィルタリング及びそのCSVファイルの出力

Posted at

RubyでCSVファイルをフィルタリングして新しいCSVファイルに出力する方法

この記事では、RubyでCSVファイルを読み込み、特定の条件に一致する行を抽出し、新しいCSVファイルに出力する方法を初学者向けに解説します。

準備

まず、RubyでCSVファイルを操作するためには、標準ライブラリであるcsvを読み込む必要があります。

Ruby
require 'csv'

入力ファイルと出力ファイルの設定

次に、入力ファイル名、出力ファイル名、およびフィルタリング条件として部署名を指定します。

Ruby
input_filename = 'employees.csv'
output_filename = 'filtered_employees.csv'
target_department = 'Engineering'

CSVファイルの読み込みとデータの抽出

csv_headersfiltered_dataという2つの配列を用意します。csv_headersはヘッダー行を格納し、filtered_dataはフィルタリングされたデータを格納します。

Ruby
csv_headers = []
filtered_data = []
  1. CSV.foreachメソッドを使って、入力ファイルを読み込みます。headers: trueオプションを指定することで、ヘッダー行を扱いやすくします。
  2. headers: trueオプションを指定することで、CSV.foreachがヘッダー行(最初の行)を特別に扱い、カラム名をキーとして値にアクセスできるようになります。これにより、カラムの位置に依存せずに、カラム名でデータにアクセスできるため、コードの可読性と保守性が向上します。
  3. row.headersheadersはメソッドで、現在処理している行が持っているカラムに格納されているデータを返します。このメソッドはCSVライブラリのCSV::Rowオブジェクトに対して呼び出されます(つまり、行に対してのみ使用可能)。
  4. csv_headers = row.headers if csv_headers.empty?の部分はcsv_headersがnilの場合に現在読み込んでいる行のカラムに格納されているデータをヘッダーとして使用させるための記述です。
CSV.foreach(input_filename, headers: true) do |row|
  csv_headers = row.headers if csv_headers.empty?

  # 特定の部署に所属する従業員を抽出
  if row['department'] == target_department
    filtered_data << row
  end
end

抽出したデータを新しいCSVファイルに出力

最後に、CSV.openメソッドを使って新しいCSVファイルを作成し、抽出したデータを出力します。

  1. CSV.openメソッドは、RubyのCSVライブラリに含まれるメソッドで、CSVファイルを開いて読み書きするために使用されます。
  2. CSV.open(output_filename, 'w') do |csv| wは、ファイルを書き込みモードで開くことを意味します。このモードでファイルを開くと、新しいファイルが作成され、既存のファイルがある場合は内容が上書きされます。このモードで開いたファイルに対して、データを書き込むことができます。
CSV.open(output_filename, 'w') do |csv|
  csv << csv_headers
  filtered_data.each do |row|
    csv << row
  end
end

これで、特定の条件に一致する行を抽出し、新しいCSVファイルに出力するRubyプログラムが完成しました。このコードをカスタマイズして、さまざまな条件でデータをフィルタリングすることができます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?