人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: ipodlife
●カテゴリ:コンピュータ インターネット
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● TransFreeBSD

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


2 ● uwao

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

で良いと思います。


3 ● munyaX

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

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


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

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

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


4 ● uwao

$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.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ