LoginSignup
7
6

More than 5 years have passed since last update.

CSV形式で成果物納品する場合の、テスト項目例 [備忘用メモ]

Last updated at Posted at 2016-03-31

要件:文字コードUTF-8、カラム内改行削除、カラムはダブルクオートで囲む

受け取り側もシステムで受け取るようなケース

対応方法(Ruby)

to_csv.rb
class Item < ActiveRecord::Base; end

CSV.open(outfile + "/output.csv", "w", force_quotes: true) do | writer |
  header = Item.attribute_names.dup

  writer << header

  Item.find_each(:batch_size=>1) do |item|
      row = item.attributes.values      
      writer << row.map{ |e| e.to_s.gsub(/(\r\n|\r|\n)/, "") }
  end
end

実施テスト項目

vimでutf-8形式のまま開いて、以下を確認。

  • \r\nが存在しない
    • 正規表現 /\r\n/ の検索結果が0個であることを確認
  • \r改行が存在しない
    • 正規表現 /\r/ の検索結果が0個であることを確認
  • \n改行は、各行の末尾以外に存在しない
    • 正規表現 /[^\"]\n/("の直後以外の改行)の検索結果が0個であることを確認
      (/\"\n/("の直後の改行)であれば全行末尾にマッチする)
    • 文章中の改行を含むcsvでは /[^\"]\n/("の直後以外の改行)で、不正改行を検出できる。
  • 文章内の"(ダブルクォート)はエスケープ「""」されている
    • 正規表現 /[^\,\"]\"[^\,\"]/ (「,」or「”」に隣接しない孤立した「"」)の検索結果が0個であることを確認
    • 正規表現/[^\,]\"[^\,]/ (「,」に隣接しない「"」)でエスケープされたダブルクオート「""」にマッチすることも確認

※ UTF-8版だけだとExcelなどで最終データの確認ができないため、できれば下記のShift_JIS版も作成して出力データの確認を行うほうがよい。

要件:文字コードShift_JIS、カラム内改行削除、カラムはダブルクオートで囲む

受け取り側がWindows(Excel)で閲覧するようなケースはShift_JISで出力する。
もしくはUTF-16LEのタブ区切りファイルでもExcelで閲覧可能。

対応方法(Ruby)

to_csv.rb
class Item < ActiveRecord::Base; end

CSV.open("/output.csv", "w", :encoding => "Windows-31J", :row_sep => "\r\n", force_quotes: true) do |writer|

  header = Item.attribute_names.dup

  writer << header

  Item.find_each(:batch_size=>1) do |item|
      row = item.attributes.values      
      writer << row.map{|e| e.to_s.sjisable }.map{|e| e.gsub(/(\r\n|\r|\n|\f)/,"") }
  end
end

String.sjisable メソッドはコチラを参照

実施テスト項目

  • 上記、UTF-8版の確認と同様の項目を確認
  • nkf -guess で文字コードがshift-jisであること
$ nkf --guess rentalcars_new.csv
Shift_JIS (CRLF)

SJISに変換し、Excel上でカラムずれが発生していないことを確認。

  • 目視で左右、上下の末端行に凸凹がないことを確認
  • 全カラム選択し、行の境をダブルクリック(セルの高さを改行にあわせて表示)し、
    高さが広がった行(改行を含む行)が存在しないことを目視確認

ファイルのデータに問題が無いかExcelで確認

  • カラムヘッダ(見出し)とデータがズレていないか、数点サンプリングして、CSVデータとデータ取得元(Webサイトなど)を目視で比較して最終確認。
    • ここで、同一値が多いレコード(データが「1」の列だらけなど)をサンプルに選ぶと、見出しがズレていても数値が元データと同一になり間違いを見落とす。
      (1と1は入れ替わっても気づけない)
    • カラムヘッダのズレに気づくために、各カラムの数値がバラけたレコードをサンプルとして選択する。
      • 1 or 0 のセルがずらりと並ぶようなデータ項目の場合、入れ替わりによる見逃しの確立が高まるので、各カラム単位で1と0両方のレコードをサンプリングし、元データとの比較を行う。
        (ただし、カラム数 x 2回の確認が必要になるので、工数は増える)
  • オートフィルタを使用し、データに空白・nilが無いか?異常値が含まれていないか確認
  • いくつかの項目を&で文字連結しユニークなidを作成し、idの重複が無いか確認
    • ブランド「uniqro」、商品名「ストライプシャツ」、カラー「ホワイト」、サイズ「M」などの項目を文字連結して、「uniqroストライプシャツホワイトM」という文字列の新規カラム列をエクセル内に作成する。
    • この列で重複するセルが無いか、countif関数などを利用して確認する。重複行があれば、データの二重登録が起きていないかなどを確認する。
    • 多くの場合、元データを見ると、重複行を分ける新規のデータ項目があることが多い。
      (「会員価格」「非会員価格」の価格の異なる「uniqroストライプシャツホワイトM」、など)
7
6
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
7
6