- ベストアンサー
一行だけ読込
Perlでのファイルの読込なんですが、 open(IN,"A.txt"); while ($xx = <IN>) { print $xx;} close(IN) とするとA.txtファイルの読込をするんですよね? A.txtの中の一行だけを読込むというのはできるんでしょうか? (10行あったら5行目を読込み、という感じです。)
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
$. という変数に、「ファイルから読み込んだ行数(最後に読み込んだ行番号)」が自動的にセットされるので、これを利用してもよいかも。 open(IN,"A.txt"); while ($xx = <IN>) { if ($. == 5) { print $xx; } } close(IN); ご参考までに、while の () の中で <IN> を単体で使う(値を変数で受け取らない)と、その値は $_ に入ってくれます。 なので、先のプログラムは次のようにも書けます。 open(IN,"A.txt"); while (<IN>) { if ($. == 5) { print $_; } } close(IN); 5行目以降のデータが必要ない場合、if文の中で last とかしてください。
その他の回答 (4)
seek と read は純粋に読み込むだけのための関数なので、表示は別途してあげなければいけません。 どのみち、これらはバイナリデータを扱う際に便利なように出来ているので、行単位での読み込みには向いてないんですけどね(^_^;
- beatkun
- ベストアンサー率46% (7/15)
初めまして。 結論から言いますと期待した結果を得る様にコードを書けば何でも不可能では無いです。:-) 以下、例です。 ーーーここからーーー #! /usrlocal/bin/perl $count = 0; $viewline = 5; open(IN,"A.txt"); while(<IN>){ if($count == ( $viewline - 1)){ $line = $_; last; } $count++; } close(IN); print "LINE = $line\n"; ーーーここまでーーー で出来ます。 $viewlineの変数を表示したい行番号を入れれば該当した行番号が表示されますし、while文内のif文の$viewlineの箇所に直接表示したい行番号を入れてもOKです。 参考まで…
- ha8ka8
- ベストアンサー率50% (1/2)
読み込まない訳ではないですが open(IN,"A.txt"); @file = <IN>; close IN; print "$file[4]\n"; というのは如何でしょう? 但し、A.txt のサイズが大きいとメモリを大量に消費してしまいますが。
その5行目が始まる位置と文字数(共にバイト単位)が判明していれば読めます。seek 関数と read 関数を使うんです。 でも面倒くさいので、4行目までを無駄に読み込みした方が早いですよ(^_^; 処理速度としても、ファイルを開いて読み込んで、を何千回も繰り返すというのでないかぎり、それほど苦にはならないと思いますし。
補足
ありがとうございます。 読込んで、表示もさせたいのですがseek関数とread 関数というのでできますか? ちなみにそれは難しいのでしょうか(^_^; ?
お礼
ここにみなさんへのお礼を書かせてもらいます。 色々な方法を教えて頂き、本当にありがとうございました。あまり詳しくわからない為、勉強しながらなんとかやってみようと思っていたのですが、みなさんのおかげでとても助かりました。また何かつまずきましたら、その時はよろしくお願いします_(._.)_