アプリ版:「スタンプのみでお礼する」機能のリリースについて

を紹介してください

< ファイルポインタ > = tell FILEHANDLE ;

ということですが
ファイルハンドルを使ったものは見つける事ができるのですがファイルポインタを使ったサンプルを見つける事ができません

A 回答 (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的に使うために、それぞれのアルバム位置を最初に読み出しておいて、その位置を記憶しておきます。
指定されたアルバム名でその位置からデータ区切りである空行までをプリントします。
全部のデータをメモリに読み込んでおくこともできますが、
このようにすることで、メモリの消費を少なくでき
大きいデータファイルに対しても、少ないメモリで動かすことができるというメリットがあります。<この場合の話。
これは、あくまでこういう使い方もできるという一例に過ぎないことに注意。
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/12/05 23:50

tell 関数が返すのは、ファイルポインタというより、


ファイルの中での現在の読み込み位置です。
例えば、現在のファイルの読み出し位置を記憶して置いて、ファイルを読み進んだ後、
seekにtell関数で記憶しておいた位置を指定することで、読み出し位置を巻き戻したりできます。

Perlでは、ファイルのアクセスには、一般にファイルハンドルを使います。

この回答への補足

ありがとうございます

ファイルポインタを使ってファイルの途中に読み書きするサンプルを紹介してください

補足日時:2004/12/05 18:56
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!