- ベストアンサー
正規表現に関して
指定のファイルがない、あるいは、指定ファイル内に「abc」という文字列が含まれていない場合には、そのファイルに「abcd」という文字列を保存したいのですが、(例えば下記のように)色々と試したのですが、上手く動作しませんでした。私の考え方か記述方法に間違いがあると思うのですが、正しい記述方法をご教授いただけないでしょうか。恐れ入りますが、よろしくお願いいたします。 ###ファイルからデータを取り出す $fileA="data.dat"; #ファイル名の指定。 open(FILEA, "$fileA"); #ファイルを開く @allbodyA = <FILEA>; #ファイル内のデータを配列に close(FILEA); #ファイルを閉じる $tmpA=@allbody; #配列のデータを変数に ###文字列検索による分岐 unless($tmpA=~ /abc/){ #「abc」が含まれているか確認してるつもりです $tmpA="abcd"; #(含まれてないときはファイルに「abcd」を保存したい。) @allbodyA=$tmpA; #print "作成成功"; ###ファイルにデータを保存 open(FILEA, ">$fileA"); #ファイルを開く print FILEA @allbodyA; #ファイルに配列「abc」を close(FILEA); #ファイルを閉じる } 申し訳ございませんが、何卒よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
$tmpA=@allbody; この文では、配列の数(ここではファイルの行数)を $allbodyA に保存することになってしまいます。 @allbodyA = <FILEA>; という文を、 $/ = ''; $tmpA = <FILEA>; $/ = "\n"; というふうに改造し、「$tmpA=@allbody;」の部分は削除してみてください。 それから、「@allbodyA=$tmpA;」の部分もおかしくなる可能性があるので、「@allbodyA=($tmpA);」にしてみてください。 これは $tmpA を一時的に配列とみなす処置です。
その他の回答 (1)
- mohao
- ベストアンサー率15% (10/63)
$fileA="data.dat"; open FILEA,"$fileA"; $data=""; while (<FILEA>) { $data.=$_; } close FILEA; if ($data!=~/abc/) { $tmpA="abcd"; open FILEA,">$fileA"; print FILEA $tmpA; close FILEA; }
お礼
ありがとうございました。具体的に、ソースを記述していただき、大変助かります。大変感謝しております。
お礼
大変丁寧にご説明いただき、ありがとうございました。修正の結果、無事動作いたしました。本当にありがとうございました。とても勉強になりました。