• ベストアンサー

最後の行だけを取り出す

fopen関数でテキストファイルを開き、 テキストファイルの最後の行だけを利用する効率のいい方法はないでしょうか。 どなたか詳しい方教えてください。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • TAI_0824
  • ベストアンサー率54% (6/11)
回答No.2

シェルコマンドでファイルのリバースソートをして、それをfopen。最初に読んだレコードが最後の行、というのはだめでしょうか?先の回答にもありますが、ファイルサイズが絶対に小さければfile()コマンドで配列をリバースして[0]を取得するか、確か配列の最後の要素値を取得する関数(array_popで大丈夫?)があったかと思います。

samot
質問者

お礼

ご回答ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

ほとんどの言語では「テキストファイル」は先頭からまとめて処理する以外の適切なハンドリング方法は用意されていません。ファイルサイズ次第ではfile()で全部読み込んでしまうなどといったこともします。 #それが負荷になるようならいっそDBに放り込む方がいいように思います。

samot
質問者

お礼

なるほど。 ご回答ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • fopen()関数を使用し、最後から二行目に保存する

    こんにちは。 PHPで、データをfopen()関数を使用し、 <?php ・ ・(途中略) ・ ?> のうちの、?>の一つ上の行にデータを保存したいのですが、 可能ですか? 要は、ここです。 <?php ・ ・ ・ $data = "●●"; // ←ここ ?> 今のところ、最後の行に保存する方法しか知らないので・・・。 $dataopen = fopen ("./data.php", "a"); fwrite ($dataopen, "$data = $_POST["data"];"); fwrite ($dataopen, "\n"); fclose ($dataopen); どうか、ご教授くだされば幸いです。

    • 締切済み
    • PHP
  • EXCELで最後の行を固定

    すいません、ログを検索したのですが見つからなかったので質問させてください。 表を作って数値計算をさせるときに、最下行を合計にしたいのですが(その上までがデータです)、 最下行とデータの間に行を挿入していくことになります。 しかしその方法だと効率が悪いので、Webページのフレーム機能のように 最下行だけを固定して表示したいのですが、そのような方法はあるでしょうか? 最下部の合計値などは関数計算です。 よろしくお願いします。

  • エクセルで最後の行までを選択

    エクセルで1万行位あるものの1行目から最後の行までを一気に選択する方法はあるでしょうか?また、同じようにA列とB列のみを最後の行まで選択する方法もあるでしょうか?よろしくお願いします。

  • ExcelVBAでテキスト出力で最後の行に追記

    エクセルVBAで、すでに色々と書き込まれているテキストファイルがあり 一番最後の行に追記したいです。 具体的に下記のようなテキストにzzzzzzと追記して aaaaa bbbbb ccccc ddddd 下記のようにしたいです。 どのようにしたらよいのでしょうか? aaaaa bbbbb ccccc ddddd zzzzzz

  • Linuxの並び替えで特定の行を一番最後の行に配置

    Linux において sort などを使ったテキストファイルの中身の並び替えにおいて 特定の(なるべく複数の)行、ここでは仮に target line 1 target line 2 という内容の行だとします(ご覧の通り空白が入っています)。 これを一番最後の行に配置されるようにしたい、などということは可能でしょうか? また、 sort -u と組み合わせるには sort -u input.txt | sort > output.txt の後半部分をこのケースのコマンドに書き換えるだけで問題ないでしょうか? どうぞよろしくお願いいたします。

  • phpで作成したファイルをシェルで読み込むと最後の行を読み込めない

    phpでリストを取得し、ファイルに書き込んでいます。 リストはスペース区切りで帰ってくるので、改行コードに変換しています。 $str = "a b c"; $str =str_replace(" ","\n",$str); //リストファイルへ書き込み $pointer=fopen("aaa.txt","w"); flock($pointer, LOCK_EX); fputs($pointer, $str); flock($pointer, LOCK_UN); fclose($pointer); これをviで開いてみると a b c と予定通り書き込まれています。 このリストをシェルスクリプトでループして読み込んでいるのですが 最後の行を読み込んでくれません。 while read line do echo "$line" done < aaa.txt とやると 最後の行が読み込まれないんです!(aとbしか表示されない) ちなみに、aaa.txtをviで開いて何もせずに保存終了すると 正常に最後の行が表示されることから、aaa.txtの終了コードがうまく 書き込まれていないのでは?と予想していますが、よくわかっていません。 どうしたら最後の行を読んでくれるのでしょうか。 ※最後の行に改行コードをつけると次の空白行を読みにいってエラーになるのでそれ以外でお願いします。

    • 締切済み
    • PHP
  • C言語でファイル内の一致検索

    やりたい事は、ファイル(テキストに限らず画像等も含めて)をfopen関数で読み込んであらかじめ用意したバッファーに格納されているデータと一致する箇所をすべて検索して検索されたところをすべて列挙することです。 効率の良い(検索速度)方法で行いたいのですが、 fgetc関数を使って検索していくのとfread関数を使って一度すべてをメモリー内に読み込んで検索するのではどちらが効率がよいでしょうか? 他にも良い方法があったら教えてください。 私はFILE * ストリームポインタの仕組みがよくわかっていません。fopenをすると何が内部で行われるのでしょうか?ファイルの内容がメモリーに読み込まれるわけではないですよね?ファイル内にアクセスする時どのようにアクセスしているのかなど教えていただきたいです。そうすればどうするのが良いのかわかる気がするので。 あとこれとは別の話ですが 標準関数にあるmemmoveとstrstr関数ですが、これと同様な機能を持つstrmoveとmemmemといった関数がなかったのですが、この機能を持つ関数は用意されているのでしょうか?一般的に使われないので自分で作れということなのでしょうか?その場合どの様に実装すればよいか時間があれば参考にプログラムを書いていただけないでしょうか? よろしくお願いします。

  • 秀丸(数万行の切り取り)

    テキストファイルで50万行のファイルがあります。 例えばこのファイルの10万行目~20万行目を選択してコピーしたいのですが方法はあるのでしょうか? もしあるならば教えて頂きたいです。

  • テキストファイルの最終行の削除

    C++Builder6です。 テキストファイルの最終行だけを削除する方法を 探しています。 詳しく言えば、ファイルを開けないで、最後にある 改行コード?のみを削除したいです。 よろしくお願いします。

  • PHPで外部ファイルを読み込むときの行の最後の改行の消し方について

    PHPについての質問です。 初歩的な質問ですがどうかお付き合いいただけたらと思います。 PHPで外部ファイルを読み込む際、csvファイルなどを1行ずつ読み込んだ場合、行の最後の改行まで代入されます。 例えば ////test.php/////////////// <?php $filename = list.csv; $fp = @fopen($filename,"r"); $data = @file($filename); @fclose($fp); ?> //////////////////////////// ////list.csv//////////////// 1,2,3,4,5 6,7,8,9,10 //////////////////////////// とする場合 $data[0]には 1,2,3,4,5 プラス改行のデータ $data[1]には 6,7,8,9,10 プラス改行のデータ が代入されます。 この改行のデータを除くためにはどのようにすればよいですか? 初歩的な質問で申し訳ないのですが、よろしくお願いします。

    • 締切済み
    • PHP