Rubyによるデータ処理

TSVファイル

タブ区切り(TSV,Tab-Separated Values)テキストを読んでCSV(Comma-Separated Values)にして出力する。

#! /usr/bin/env ruby -w

while line = gets
  puts line.split("\t").join(",")
end

CSVファイル

上と逆に,CSVを読んでTSVを出力するには,上と同様にして "\t""," を逆にすればいいが,CSVはデータ作法にも書いたように少しややこしいルールがあり,それに従って読み書きするために,ここではRubyのCSVクラスを使う。例えばCSVファイルをタブ区切りテキスト(TSV)に直すには次のようにする:

#! /usr/bin/env ruby -w

require "csv"
CSV.foreach("filename.csv") do |row|
  puts row.join("\t")
end

Excelファイル(spreadsheetライブラリ)

spreadsheetはExcelの *.xls 形式のファイルを読み書きするライブラリである。*.xlsx は扱えない。

インストールは sudo gem install spreadsheet でできる。

#! /usr/bin/env ruby -w

require 'csv'
require 'spreadsheet'

# Spreadsheet.client_encoding = 'UTF-8' # or 'cp932'

while file = ARGV.shift
  puts file # ファイル名
  book = Spreadsheet.open(file, 'rb')
  sheetnum = 0
  while sheet = book.worksheet(sheetnum)
    puts sheet.name
    sheet.each 0 do |row| # 0を略せば最初の空でない行から
      # puts row.join(",")
      puts CSV.generate_line(row)
    end
    sheetnum += 1
  end
end

上のように sheet.each の直後に数値を書けば,その行数だけスキップしたところから読み始める。数値を省略すれば,最初の空でない行から読み始める。

Excelファイル(rooライブラリ)

roo-rb/roo はExcelの *.xlsx を読む。

インストールは sudo gem install roo でできる。

指定したファイルをCSVにするには次のようにする:

#! /usr/bin/env ruby

require 'roo'

while file = ARGV.shift
  puts file
  s = Roo::Excelx.new(file)
  puts s.to_csv
  # または
  # s.each do |row|
  #   puts row.join(",")
  # end
end

その他の方法(要更新)