• ベストアンサー

ファイルポインタを使ったサンプル

を紹介してください < ファイルポインタ > = tell FILEHANDLE ; ということですが ファイルハンドルを使ったものは見つける事ができるのですがファイルポインタを使ったサンプルを見つける事ができません

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

>ファイルポインタを使ってファイルの途中に読み書きするサンプルを紹介してください だから、ファイルポインタじゃね~っていってんのに!まあ、いいけど。 次のサンプルは、テキストファイルで、CDのタイトルとそのあとトラック番号、曲名、時間が入っているものから、アルバム名を指定して、そのアルバムのデータを一覧するようなものと思って下さい。 data.txt ---------------------------------- title:album1 1:kyokumei1,1:55 2:kyokumei2,2:20 title:album2 1:セーブミー,3:33 2:リードミー,1:09 title:album3 1:フラッシュ,0:10 2:パールの指輪,2:22 ------------------------------ sample.pl ----------------------------- open(DATAFILE,"<data.txt"); while(<DATAFILE>){ if(/title:(.*)/){ $datapos{$1}=tell DATAFILE; } } close(DATAFILE); while(1){ print "アルバム名を入力して下さい>"; $name = <STDIN>; chomp $name; last unless($name); #入力無し(リターンのみの時終了) open(DATAFILE,"<data.txt"); seek(DATAFILE,$datapos{$name},0); while(<DATAFILE>){ last if /^\n$/; print; } close(DATAFILE); } ----------------------------------------- 実行結果 ----------------------------------------- E:\>sample.pl アルバム名を入力して下さい>album2 1:セーブミー,3:33 2:リードミー,1:09 アルバム名を入力して下さい>album1 1:kyokumei1,1:55 2:kyokumei2,2:20 アルバム名を入力して下さい>album3 1:フラッシュ,0:10 2:パールの指輪,2:22 アルバム名を入力して下さい>album1 1:kyokumei1,1:55 2:kyokumei2,2:20 アルバム名を入力して下さい> E:\> ----------------------------------------- 解説: テキストファイルをDB的に使うために、それぞれのアルバム位置を最初に読み出しておいて、その位置を記憶しておきます。 指定されたアルバム名でその位置からデータ区切りである空行までをプリントします。 全部のデータをメモリに読み込んでおくこともできますが、 このようにすることで、メモリの消費を少なくでき 大きいデータファイルに対しても、少ないメモリで動かすことができるというメリットがあります。<この場合の話。 これは、あくまでこういう使い方もできるという一例に過ぎないことに注意。

keyguy
質問者

お礼

ありがとうございます ファイルポインタの使い方が分かりました

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

tell 関数が返すのは、ファイルポインタというより、 ファイルの中での現在の読み込み位置です。 例えば、現在のファイルの読み出し位置を記憶して置いて、ファイルを読み進んだ後、 seekにtell関数で記憶しておいた位置を指定することで、読み出し位置を巻き戻したりできます。 Perlでは、ファイルのアクセスには、一般にファイルハンドルを使います。

keyguy
質問者

補足

ありがとうございます ファイルポインタを使ってファイルの途中に読み書きするサンプルを紹介してください

関連するQ&A