• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:perlでファイルのデータの一部を削除したい)

Perlでファイルのデータの一部を削除する方法とは?

このQ&Aのポイント
  • 久しぶりにPerlを操作してファイルのデータの一部を削除したいのですが、うまくできません。
  • 具体的には、「めがね」というデータを削除したいのですが、正しい動作が確認できません。
  • 指導をお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Gotthold
  • ベストアンサー率47% (396/832)
回答No.1

ファイルを書き換えたいのであれば、 読み書き両用モードでオープンしてください。 そうしないと排他制御もうまくできません。 (読み込みモードopen→close→書き出しモードopen→closeでもできますが、排他制御が不完全になります。) 以下サンプル。 ============================================== use utf8; #ソースコードはUTF-8で記述 use strict; #厳しい文法チェック # ファイルオープン、文字コードUTF-8 # ファイルの文字コードがUTF-8以外の時は open(my $fp, "+<:encoding(cp932)", "data.txt" ) の様に指定 my $st = open(my $fp, "+<:utf8", "data.txt" ) or die "File open error"; flock($fp, 2); # 読み込み my @data = <$fp> ; # 編集 @data = grep { my @temp = split("<>"); $temp[0] ne "5" } @data; # 書き出し seek($fp, 0, 0); #書き込む場所をファイルの先頭に truncate($fp, 0); #ファイルサイズを0byteに print $fp @data; close($fp); ============================================== 2引数openや、ベアワードをファイルハンドルに使う書き方は ものすごく古い書き方なので、 上記サンプルでは使っていません。 なお、提示のソースですが、 @DELや$tmpnumが説明無しに出現しているのが気になります。 特に$tmpnumほうは記述ミスでは?

hihin2003
質問者

お礼

回答ありがとうございます。 >特に$tmpnumほうは記述ミスでは? 申し訳ございません。その通りでした。 サンプルにならって修正いたしましたら、無事削除出来ました。 ありがとうございます。 プログラムの記述についても勉強になります。 本当に助かりました。