#はじめに
アプリケーションを作成しているとcsvファイルを読み込み、書き込みする場面が多くあると思います。
今回はcsvファイルを読み込み、書き込みする方法を解説します。
##今回使用するcsvファイル 祝日のデータ
内閣府が出している祝日のファイルを使って解説します。
中身は下記のような形式です。
1955/1/1,元日
1955/1/15,成人の日
1955/3/21,春分の日
// :
// :
2021/10/11,スポーツの日
2021/11/3,文化の日
2021/11/23,勤労感謝の日
#csvファイルの読み込み
csvファイルを読み込む方法の大まかな流れは下記の通りです。
- csvファイルを開く
- csvファイルを読み込む
- csvファイルを閉じる
##1. csvファイルを開く
まず、csvファイルを読み込むためにファイルを開きます。
使用する関数はfopen
です。
この関数の処理に成功するとファイルポインタリソースが返ってきます。
ファイルポインタリソースとはファイルの読み書きに必要な情報(ファイル名、ファイル操作権限、csvファイルの何行目から読むのかなど)です
<?php
$filePath = "sample.csv";
$handle = fopen($filePath, "r");
$handle
の意味は$filePath
のファイルをr
モードで開くということです
###モードについて
ファイルを開くにも色々な種類があります。
書き込み専用で開く、読み込み専用で開く、書き込みと読み込みできるように開くなどです
4種類について説明します。これだけで基本的な操作はできます
r
:読み込みのみで開きます。処理の開始場所はファイルの先頭です。
r+
:読み込み/書き出し用に開きます。 処理の開始場所はファイルの先頭です。
a
:書き出し用のみで開きます。処理の開始場所はファイルの終端です。 ファイルが存在しない場合には、作成を試みます。
a+
:読み込み/書き出し用で開きます。 処理の開始場所はファイルの終端です。 ファイルが存在しない場合には、作成を試みます。
##2. csvファイルを読み込む
1で開いた結果を使ってcsvファイルの読み込みを行います
fgetcsv
関数を使用します。
下記のコードでcsvファイルを読み込みます。
$handleの情報を元に,
区切りのcsvファイルを1000項目まで読み込みます
1000は0にすると無制限に読み込んでくれます。しかし、処理が遅くなるようなので、設定しているのが無難です
<?php
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
echo $data[0];
echo $data[1] . "<br />\n";
}
##3. csvファイルを閉じる
読み込みが終わったら、ファイルを閉じます。
使用する関数はfclose
です
<?php
fclose($handle);
##文字コード
csvファイルはShift_JISで書かれていることが多いので、プログラムで扱うためには文字コードをUTF-8に変換する必要があることが多いです。
文字コードの変換方法は下記の通りです。
<?php
//Shift_JISからutf-8に変換
$data[1] = mb_convert_encoding($data[1],"utf-8","sjis");
以上です!!!
ここまで読んでいただきありがとうございました!!
疑問、気になるところがございましたら、質問、コメントよろしくお願いします!!!