perlの初歩的な質問になります。

$noに格納している値(とりえる値は1~99)があり、その値を元に、ある情報が記載されているファイル(info.txt)の行のある箇所の値を$addrという変数に格納したいのですが
具体的にどう書けばよいかご教授ください。$no = 1であればinfo.txtの1行目のある部分の値を抽出して$addrという変数に代入するという具合です。
よろしくお願いします。

回答の条件
  • 1人10回まで
  • 登録:
  • 終了:2011/12/22 19:35:03

回答4件)

id:TransFreeBSD No.1

回答回数668ベストアンサー獲得回数268

普通にopenして、forで$no回ループして読み捨てて、最後の行から値を抽出すれば良いのでは?
for、open、close、<>演算子あたりで十分と思うけど、これがまだ分からないなら、まずは入門テキストからで。
http://perldoc.jp/docs/perl/5.14.1/perlintro.pod#Files32and32I47O

id:uwao No.2

回答回数180ベストアンサー獲得回数39

#テキスト開く
open IN,"info.txt";
while(<IN>){
#@dataに格納
push @data,$_;
}
#閉じる
close IN;
#データ行を$cntに
$cnt = $no - 1;
#$addrに指定行を格納
$addr = $data[$cnt];
 
で良いと思います。

id:munyaX No.3

回答回数120ベストアンサー獲得回数24

データ量によって処理が変わってきます。

処理内容等によりますので一概には言えませんが、数百件程度であれば全て配列に入れてしまって良いと思います。ただ数万行やギガ単位の巨大なファイルを相手にするようであればもう少し頭を使う必要があります。


index関数などで改行の個数をカウントしていく方法や、
以下のページにあるようにインデックスを用いる方法などでしょうか。

■テキストファイルから指定した行を取り出すタスクについて
http://chalow.net/2010-08-10-1.html

■perl - テキストファイルで配列
http://blog.livedoor.jp/dankogai/archives/51500530.html

id:uwao No.4

回答回数180ベストアンサー獲得回数39

$noは1~99ということですが、info.txtのデータサイズが大きい場合もありますので、下記の方が良いと思います。

#格納行を整理
$gyou = $no - 1;
#行数の初期値
$count = 0;
#テキスト開く
open IN,"info.txt";
while(<IN>){
#行数が一致したら格納
$addr = $data if($count == $gyou);
$count++;
}
#閉じる
close IN;

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません