はじめに
こんにちは。
気分転換したくて全然業務と関係ないし、需要も無さそうな記事を書きました。
5分で読めます。
ところでcsvファイルって何
恥ずかしながらIT業界に入るまでcsvというファイル形式を知らずに生きてきました。
CSVファイルとは、Comma Separated Valuesの略で、各項目がカンマ(,)で区切られたテキストデータのことです。
データの容量が軽く、読み書きや編集が容易であるという特徴があります。
こちらの記事が大変分かりやすいです。感謝。
本題
案件でcsvファイルを使ってのデータのインポート機能を作ったのですが、csvファイルはダブルクォーテーションで囲まれている必要がありました。
ただ、インポートするためのcsvファイルをExcelで開いて編集するとダブルクォーテーションが消えてしまうということを経験しました。
(常識なのかもしれません。ポンコツですみません)
テキストエディタで置換する方法は結構あったのですが、だるすぎたのでPHPでやってみたいなと思い作ってみました。
quote_double.php
<?php
$inputFile = $argv[1]; // 読み込みたいCSVファイル名
$outputFile = 'output_' . $argv[1]; // 出力するCSVファイル名
// 入力ファイルを開く
if (($inputHandle = fopen($inputFile, 'r')) !== FALSE) {
// 出力ファイルを開く
if (($outputHandle = fopen($outputFile, 'w')) !== FALSE) {
// 入力ファイルの各行を読み込む
while (($row = fgetcsv($inputHandle)) !== FALSE) {
// 各フィールドを強制的にダブルクォーテーションで囲む
$quotedRow = array_map(function($field) {
return '"' . str_replace('"', '""', $field) . '"';
}, $row);
// 行全体をCSVフォーマットとして出力
fwrite($outputHandle, implode(',', $quotedRow) . "\n");
}
// 出力ファイルを閉じる
fclose($outputHandle);
}
// 入力ファイルを閉じる
fclose($inputHandle);
}
echo "完了したよ!\n";
以下コマンドで実行します。
php quote_double.php <ダブルクオーテーションをつけたいcsvファイルのパス>
// 例
php quote_double.php sample.csv
結果
変換前
sample.csv
1,2,3,4,5,6
ゲンガー,ミミッキュ,ムウマージ,ヨノワール,ユキメノコ
変換後
output_sample.csv
"1","2","3","4","5","6"
"ゲンガー","ミミッキュ","ムウマージ","ソウブレイズ","ユキメノコ","コレクレー"
output_sample.csvが作成され、すべての値がダブルクォーテーションで囲まれました!
やったね!