[PHP] テキストファイルから特定の行を読み取る方法

2018年7月23日(更新: 2021年2月14日)

PHPでテキストファイルを開き、中身を読み込む方法はいくつかあります。

特定の一行のみ読み込む場合と、数行読み込む場合で効率の良い処理方法が異なります。

関数 fgets で特定の一行を読み込む

テキストファイルのうち、ある一行のみを読み込む方法です。読み込みたい行がファイルの開始位置に近いとき(2行目だけ、3行目だけなど)は効率が良くなります。

fopen で開いたテキストファイルを fgets で上から一行ずつ読み込んでいき、不要な行は破棄し、必要な行に到達したらその情報を保持します。

// ファイルから特定の一行のみを取得
function getSpecificLineFromFile($filename, $lineNum) {

  if ($lineNum < 1) {
    exit("無効な行の指定です。");
  }

  $fp = fopen($filename, 'r');
  for ($i = 0; $i < $lineNum; $i++) { 
    $targetLine = fgets($fp);
  }
  fclose($fp);

  return trim($targetLine);
}

この関数は、テキストファイル($filename)の指定行($lineNum)を読み込み、行末の改行などを除去して返します。

これによって、ファイル全体を読み込まずに効率よく指定行のみを取得できます。

関数 file で複数行を読み込む

関数 file は、ファイルの内容を一度に全て読み込みます。複数の行を同時に読み込んで処理する場合は、この関数を使用することがあります。

以下のように書くと、変数 $lines は、テキストの各行を配列として保持します。オプション FILE_IGNORE_NEW_LINES は、空行を無視する指定です。オプションは省略可能です。

$lines = file($filename, FILE_IGNORE_NEW_LINES);

したがって、配列のインデックスに行の番号(0から始まる)を指定すると、その行の情報を取り出すことができます。

echo $lines[0],'<br>'; // 1行目を出力
echo $lines[2],'<br>'; // 3行目を出力

file は、テキストファイルのサイズが大きすぎるとエラーとなります。テキストファイルの行数が膨大でなく、かつ複数行の情報が必要という場合に有効です。

以上、テキストファイルから特定の行を読み取る方法でした。

コメントを残す

メールアドレスが公開されることはありません。