アプリ版:「スタンプのみでお礼する」機能のリリースについて

perlで異なる名前のファイルを複数保存する方法?
がわからなくて困っています。

やりたいことは、htmlファイルを開いて、文書の一部を置換して、別名で複数のファイルを作成することです。
下記の名前を変更するのところだけ、どうすればよいのかわかりませんでした。

for ( $i = 1; $i <= 10; $i++ ) {
  template.htmlをコピーして、edit.htmlを開く。
  edit.htmlを開く。
  文書内でif条件にマッチするものを置換する
  edit.htmlを保存して閉じる。
  rename ("edit.html", "edit$i.html"); #ここで$iがそのままで、edit$i.htmlが作成されてしまう。
}

説明不足の部分もあるかと思いますが、よろしくお願いします。

A 回答 (4件)

No3さんの言うとおりですね。


ドットは演算子機能があるので、使えませんね。
すみません修正します。
http://www.kent-web.com/perl/chap2.html

とりあえず、変数展開で変数名部を{}で囲むか、ドット演算子を使うかすればできるはずです。
    • good
    • 0
この回答へのお礼

皆様、お礼遅れて申し訳ありませんでした。
回答していただきありがとうございました。

お礼日時:2010/09/23 21:29

うん? いくらなんでも . が名前に使えるってことはないはず>#1. 「展開されていない」ことからして, 「実はスクリプト中ではダブルクオートではなくシングルクオートになっている」という可能性が考えられる.


自分だったら「perl 以外」を使うことも選択肢に入れるかな. 置換の仕方によるけど.
    • good
    • 0
この回答へのお礼

皆様、お礼遅れて申し訳ありませんでした。
回答していただきありがとうございました。

お礼日時:2010/09/23 21:29

renameせずに、openするときに名前を付けておいたのじゃまずいの


my $infile = "template.html";
my $out = "edited";
open IN,"template.html" or &error();
for ( $i = 1; $i <= 10; $i++ ) {
my $outFileName = $out.$i.'.html';
open OUT,">$outFileName";
while($line = <IN>){
#処理
print OUT $input;
}
close OUT;
}
close IN;
    • good
    • 0
この回答へのお礼

皆様、お礼遅れて申し訳ありませんでした。
回答していただきありがとうございました。

お礼日時:2010/09/23 21:30

>rename ("edit.html", "edit$i.html"); #ここで$iがそのままで、edit$i.htmlが作成されてしまう。


変数展開がされていないようですね(どうも"."は変数として使える文字なようです。使ったことありませんが)。
"edit${i}.html"としてみたらどうでしょうか?
http://www.perlplus.jp/perl/var/index9.html


ちなみに私なら

template.htmlを開く
全部読み込む
閉じる
for ($i = 1; $i <= 10; $i++) {
 読み込んだものをコピー
 置換なりの編集
 保存したい名前でファイルを開く(作成)。(この場合"edit".$1."html"か)
 書き込む
 閉じる
}

のようにしますね。
    • good
    • 0
この回答へのお礼

皆様、お礼遅れて申し訳ありませんでした。
回答していただきありがとうございました。

お礼日時:2010/09/23 21:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!