【PHP】ファイルから一文字分のデータを取得する関数「fgetc()」
今回はPHPで使用できる、メモ帳などのファイルから一文字分のデータを取得できる「fgetc()」を使用してみます。
目次
ファイルから一文字分のデータを取得する関数「fgetc()」
|
1 |
fgetc(読み込みたいファイル名); |
EOF(End Of File)の場合、「false」を返します。
諸注意として、「fgets()」でデータを取得する前に「fopen()」のモード「”r”」でファイルを開いて置く必要があります。
「fopen()」についてはこちらから。
それではテストとして、以下のファイルデータを一文字ずつ取得し、出力してみます。
・サンプルデータ「”test.txt”」
aあ
今回は英数字の「a」と日本語の「あ」をファイルから取得し、出力してみます。
ファイルのデータを二文字分だけ取得し、出力する
|
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php //fgetc(読み込みたいファイル名); $file = fopen("test.txt" , "r"); //モード「"r"」でファイルをオープン $test = fgetc($file); //ファイルの一文字を取得 echo $test; $test = fgetc($file); //ファイルの一文字を取得 echo $test; fclose($file); //ファイルを閉じる ?> |
「fgetc()」で「ファイルから一文字取得 ⇒ 出力」を二回繰り返した時の動作です。「a」は正常に出力できていますが、二文字目の「あ」が文字化けしてしまっていますね。これは「fgetc()」が正確には、「一文字を取得する」関数ではなく、「1バイト分のデータを取得する」関数ということが原因しています。日本語は約「長さ3(3バイト)」で一文字として表示されるのです。
つまり先程のサンプルで考えると「ファイルから一文字取得 ⇒ 出力」を4回繰り返せば「aあ」と表示することができるはずですね。上記のサンプルコードを以下のように変更して実行してみます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php //fgetc(読み込みたいファイル名); $file = fopen("test.txt" , "r"); //モード「"r"」でファイルをオープン $test = fgetc($file); //ファイルの一文字を取得 echo $test; $test = fgetc($file); //ファイルの一文字を取得 echo $test; $test = fgetc($file); //ファイルの一文字を取得 echo $test; $test = fgetc($file); //ファイルの一文字を取得 echo $test; fclose($file); //ファイルを閉じる ?> |
実行結果は以下の通りです。
無事英数字と日本語を表示することができました。
すべての文字を取得し出力する方法今回は以下のファイルから全ての文字を取得してみます。
この文章はテストです。<br>
今回は「fgetc()」を使用します。
繰り返し処理「while()」を使用することで、ファイル内のデータを全て出力することができます。以下サンプルコードです。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php //fgetc(読み込みたいファイル名); $file = fopen("test.txt" , "r"); //モード「"r"」でファイルをオープン $test = fgetc($file); //ファイルの一文字を取得 while($test){ //「$test」がtrueの限り繰り返す echo $test; $test = fgetc($file); //ファイルから一文字取得する。文字が取得できなくなった場合「false」が返る } fclose($file); //ファイルを閉じる ?> |
実行結果です。
「while()」の引数に、データを取得した変数を記述し、繰り返し文の最後に「fgetc()」でデータを取得することで、ファイルからデータが空になるまで出力が繰り返される仕組みです。
今回は「while()」を使用しましたが「for()」などの繰り返し文を使用することで、指定した回数分データを取得することも可能なので、状況に応じて繰り返し文を併用していきたいですね。
