libro
www.tuyano.com
初心者のためのPHPプログラミング入門

テキストファイルの利用 (2/7)

作成:2010-12-05 11:48
更新:2010-12-05 11:48

■ファイルのテキストを1行ずつ処理する

では、読み込んだテキストを処理するためにはどうすればよいのでしょうか。これには、「ファイルの中身をまるごと読み込み、1行ずつ配列にまとめて返す」という関数が用意されているので、これを利用するのがよいでしょう。これは「file」という関数です。
$変数 = file( ファイルの指定 );
このようにすると、引数に指定したファイルを読み込んで、1行ずつ分けてまとめた配列を返します。後は、この$変数から配列の要素を順に取り出して処理していけばいいわけです。

ただし、通常はこんなにシンプルな書き方をすることはあまりありません。なぜなら、これだと「ファイルの読み込みに失敗した場合」の処理ができないからです。もしファイルの読み込みに失敗すると、その時点でエラーになり、スクリプトの実行を中断してしまいます。すると、それ以降の処理や表示などもされず、ページが途中で切れてしまいます。

そこで、fileのように実行に失敗する可能性がある場合には、
$変数 = @file( ファイルの指定 ) or 失敗時の処理;
こんな具合に書くのが一般的です。関数名の前に「@」記号をつけると、実行に失敗してもスクリプトを中断しないで続けるようになります。また、関数の後に「or」を付けておくと、実行に失敗したときor以降の処理を実行することができます。

では、実際に簡単なサンプルを下に掲載しておきましょう。これは、data.txtを読み込み、1行ずつ行番号をつけて表示します。もちろん、各行ともきちんと改行されて表示されます。ここでは、
$lines = @file("data.txt") or $result = "ファイルが読めません。";
というようにしてファイルの読み込みを行っています。そして、読み込んだ$lines配列が空っぽでなければ、繰り返し処理をしています。「空っぽ」かどうかは、
if ($lines != null){……
このようにしてチェックをしています。「null」というのは、「空っぽ」を示す予約語です。変数に値が設定されていない(つまり空っぽ)の状態を示す言葉です。

無事、読み込まれたなら、for($i = 0;$i < count($lines);$i++)というようにして、$linesから1行ずつテキストを読み込んで処理をしています。「count($lines)」というのは、$linesの要素の数を指定するものです。「count」というのは、引数に指定した配列の要素数を返す関数です。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

<?php
	$result = "";
	$lines = @file("data.txt") or $result = "ファイルが読めません。";
	if ($lines != null){
		for($i = 0;$i < count($lines);$i++){
			$result .= ($i + 1) . ": " . $lines[$i] . "<br>";
		}
	}
?>
<!DOCTYPE html
	PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"
		xml:lang="ja" lang="ja"> 
	<head> 
		<meta http-equiv="Content-Type"
			content="text/html; charset=UTF-8" /> 
		<title>sample page</title>
	</head>
	<body>
		<h1>Hello PHP!</h1>
		<p><?php echo $result; ?></p>
	</body>
</html>

※関連コンテンツ

「初心者のためのPHPプログラミング入門」に戻る