$noに格納している値(とりえる値は1~99)があり、その値を元に、ある情報が記載されているファイル(info.txt)の行のある箇所の値を$addrという変数に格納したいのですが
具体的にどう書けばよいかご教授ください。$no = 1であればinfo.txtの1行目のある部分の値を抽出して$addrという変数に代入するという具合です。
よろしくお願いします。
普通にopenして、forで$no回ループして読み捨てて、最後の行から値を抽出すれば良いのでは?
for、open、close、<>演算子あたりで十分と思うけど、これがまだ分からないなら、まずは入門テキストからで。
http://perldoc.jp/docs/perl/5.14.1/perlintro.pod#Files32and32I47O
#テキスト開く
open IN,"info.txt";
while(<IN>){
#@dataに格納
push @data,$_;
}
#閉じる
close IN;
#データ行を$cntに
$cnt = $no - 1;
#$addrに指定行を格納
$addr = $data[$cnt];
で良いと思います。
データ量によって処理が変わってきます。
処理内容等によりますので一概には言えませんが、数百件程度であれば全て配列に入れてしまって良いと思います。ただ数万行やギガ単位の巨大なファイルを相手にするようであればもう少し頭を使う必要があります。
index関数などで改行の個数をカウントしていく方法や、
以下のページにあるようにインデックスを用いる方法などでしょうか。
■テキストファイルから指定した行を取り出すタスクについて
http://chalow.net/2010-08-10-1.html
■perl - テキストファイルで配列
http://blog.livedoor.jp/dankogai/archives/51500530.html
$noは1~99ということですが、info.txtのデータサイズが大きい場合もありますので、下記の方が良いと思います。
#格納行を整理
$gyou = $no - 1;
#行数の初期値
$count = 0;
#テキスト開く
open IN,"info.txt";
while(<IN>){
#行数が一致したら格納
$addr = $data if($count == $gyou);
$count++;
}
#閉じる
close IN;
コメント(0件)