9
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PHPでcsvファイルのすべての値にダブルクォーテーションをつける

Last updated at Posted at 2024-10-17

はじめに

こんにちは。
気分転換したくて全然業務と関係ないし、需要も無さそうな記事を書きました。
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が作成され、すべての値がダブルクォーテーションで囲まれました!
やったね!

9
4
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
9
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?