perlで書かれたcgiスクリプトがあります。

実行すると、サーバーにファイルを生成するものです。このファイルの名前の付け方ですが、「1.txt」から始まり、実行するたびに「2.txt」→「3.txt」という感じに数字が増えていくようにしたいと思っています。
どうしたらいいものかご存知でしたら、教えて頂きたく思います。ど素人の質問で恐縮ですが、何卒よろしくお願い致します。

回答の条件
  • URL必須
  • 1人5回まで
  • 登録:
  • 終了:2006/10/14 01:00:36
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:b-wind No.3

回答回数3344ベストアンサー獲得回数440

ポイント300pt
$i=1;
while($i++){
  unless ( -e "${i}.txt" ) {
    open NEWFILE "${$i}.txt";
    // ここで必要な処理をする。
     close NEWFILE;
    last;
  }
}

こんなところで。

http://flex.ee.uec.ac.jp/texi/perl/perl_22.html

http://flex.ee.uec.ac.jp/texi/perl/perl_86.html

id:Kenichi_S

ご回答ありがとうございます。

全くの素人でしたので、実際にスクリプトを書いて頂いて、大変参考になりました。

そのまま使用させて頂き、無事実行することができました。

誠にありがとうございました。

2006/10/14 00:59:24

その他の回答2件)

id:ootatmt No.1

回答回数1307ベストアンサー獲得回数65

ポイント300pt

ファイルの作成は問題ないのですよね?

そのファイル名に付ける数字をどのように決定するかということだと思いますが、


1. まず、その数字(ファイル名)を保存しておくファイルAを作成しておきます。そのファイルAの内容は"1"です。

2. ロック処理をします。

3. 新しいファイルの名前を付けるときに、1.で作成したファイルAの内容を読み出します。

4. その読み出した値に基づいてファイル名をつけます。

5. 3. で読み出した値をインクリメント(+1)します。

6. 5. で変更された値をファイルAに書き込みます。

7. ロックを解除します。


これで、新規のファイルが作成されるたびに数字が増えていく名前を付けることが出来ます。

わかりますか?

http://q.hatena.ne.jp/1160693725

id:Kenichi_S

早速の回答ありがとうございます。

ファイルの作成に関しては、問題なく実行できるようになりました。

さて、ファイル名についてですが、phpでですと、4行くらいのスクリプトを追加すると、質問内容のようなことが出来るのですが、cgiでは、結構手間が必要だということは分かりました。

出来るかどうかはまだ分かりませんが、チャレンジしてみます。お礼の返信までで、失礼しました。

2006/10/13 09:00:28
id:tezcello No.2

回答回数460ベストアンサー獲得回数69

ポイント300pt

さて、ファイル名についてですが、phpでですと、4行くらいのスクリプトを追加すると、質問内容のようなことが出来るのですが、cgiでは、結構手間が必要だということは分かりました。

多分、php でも perl でも必要な処理は同じですから、必要な手間は同じ位なのでは?


ファイルの名前=インクリメントしていく値なので、わざわざその値を覚えておくファイルを作らなくても良さそうです。

ただし、ファイルの数が多くなるとパフォーマンスは良くないです。


そのファイルを書き込みたいディレクトリのファイル名のリストを取り出し、

その中からファイル名が ¥d+¥.txt であるものの数値部分(¥d)を取り出して、

数値の最大値をインクリメントしたものを使って新しいファイル名をつくる。


perl は勝手に文字列と数値を読み替えてくれるのでこんな事が楽に出来ます。

最大値を見つけるのは sort を使ってもいいでしょうが、どうせ全部を調べるのだから、数値部分を取り出したときに比較すればいいでしょう。

http://q.hatena.ne.jp/

id:Kenichi_S

ご回答ありがとうございます。

言語ははじめたばかりで、いろいろ聞きながらやっているもので、誤認があったかもしれません。下記の方の内容も踏まえて、無事実行することができました。勉強になりました。誠にありがとうございました。

2006/10/14 00:58:23
id:b-wind No.3

回答回数3344ベストアンサー獲得回数440ここでベストアンサー

ポイント300pt
$i=1;
while($i++){
  unless ( -e "${i}.txt" ) {
    open NEWFILE "${$i}.txt";
    // ここで必要な処理をする。
     close NEWFILE;
    last;
  }
}

こんなところで。

http://flex.ee.uec.ac.jp/texi/perl/perl_22.html

http://flex.ee.uec.ac.jp/texi/perl/perl_86.html

id:Kenichi_S

ご回答ありがとうございます。

全くの素人でしたので、実際にスクリプトを書いて頂いて、大変参考になりました。

そのまま使用させて頂き、無事実行することができました。

誠にありがとうございました。

2006/10/14 00:59:24
  • id:ootatmt
    途中でファイルを削除したときとかに対応できなくなるけどいいのかなぁ?
    それとロック処理は必ず入れないとダメですよ。>Kenichi_Sさん
  • id:b-wind
    どの言語でも同じですが、同時実行に備えて lock 等の処理は必要です。
    自分のかいたスクリプトは説明のためにかなりの部分を省略してありますので、実際にはエラー処理を詳細に入れる必要があります。
    ご注意ください。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません