openで指定したファイルデータに制限を持たせるには?

[上に] [前に] [次に]
がんま [E-Mail] 1999/03/01(月) 21:32:48
Perlですが、ちょっと質問させていただきます。

open(IN, './name.dat');
while (<IN>) {
chop;
push(@data,$_);
}

上記のように、openでname.datを開いているのですが
例えば、このname.datのデータが

111
222
333

と言うように、一行ずつデータが入っていたとして
この行数を「10行」や「20行以上のデータは削除」されるように
指定することは可能でしょうか?

開いた時点で、これを行いたいのですが
私の知識では皆目見当つかず、この数日足踏み状態…。

すみませんが、方法がありましたら、教えて下さい。
お願いします。

Tiot 1999/03/01(月) 23:45:48
> 開いた時点で、これを行いたいのですが
ということでしたら、削除するのではなく10行や、20行までしか
読み込まないという風にしては駄目ですか?
もとの文を活かすなら、

open(IN, './name.dat');
$count = 0;
while (<IN>) {
  chop;
  push(@data,$_);
  $count++;
  if($count ==  10) {last;}
}

for文とか使った方が奇麗だけど。

Tiot 1999/03/01(月) 23:48:37
それとも削除する、ってファイルから削除するんでしょうか。
もしそうだったら、見当違いですのですいません。

がんま [E-Mail] 1999/03/02(火) 00:40:13
>それとも削除する、ってファイルから削除するんでしょうか。

都合上、削除出来ないと困ってしまうのです。

Tiotさん、ご親切にありがとうございます。

B-Cus 1999/03/02(火) 00:46:40
open(IN, './name.dat');
$count = 0;
while (<IN>) {
 chop;
 push(@data,$_);
 $count++;
 if($count == 10) {last;}
}
open(OUT, '>./name.dat');
foreach (@data){
 print OUT "$_\n";
}
close(OUT);

がんま [E-Mail] 1999/03/02(火) 01:40:48
[[解決]]
Tiotさん、B-Cusさん、大変ご迷惑をお掛けしました。

私があまりに寝ぼけていました!
折角、Tiotさんが教えてくれた方法を、私が入力ミスを犯してしまい

> 都合上、削除出来ないと困ってしまうのです。

などと、すっ呆けたことを言ってしまいました。
本当にすみませんでした。

B-Cusさんに対しても、度々失礼なことをしてしまいました。
こんな私に返答をしていただき、本当に感謝しています。


本当にありがとうございます!

#しかし、どうして「last」を「list」と入力したんだ?
#しかも1時間以上、そのことに気が付かないし…最低最悪;_;

[上に] [前に] [次に]