実行すると、サーバーにファイルを生成するものです。このファイルの名前の付け方ですが、「1.txt」から始まり、実行するたびに「2.txt」→「3.txt」という感じに数字が増えていくようにしたいと思っています。
どうしたらいいものかご存知でしたら、教えて頂きたく思います。ど素人の質問で恐縮ですが、何卒よろしくお願い致します。
$i=1; while($i++){ unless ( -e "${i}.txt" ) { open NEWFILE "${$i}.txt"; // ここで必要な処理をする。 close NEWFILE; last; } }
こんなところで。
ファイルの作成は問題ないのですよね?
そのファイル名に付ける数字をどのように決定するかということだと思いますが、
1. まず、その数字(ファイル名)を保存しておくファイルAを作成しておきます。そのファイルAの内容は"1"です。
2. ロック処理をします。
3. 新しいファイルの名前を付けるときに、1.で作成したファイルAの内容を読み出します。
4. その読み出した値に基づいてファイル名をつけます。
5. 3. で読み出した値をインクリメント(+1)します。
6. 5. で変更された値をファイルAに書き込みます。
7. ロックを解除します。
これで、新規のファイルが作成されるたびに数字が増えていく名前を付けることが出来ます。
わかりますか?
早速の回答ありがとうございます。
ファイルの作成に関しては、問題なく実行できるようになりました。
さて、ファイル名についてですが、phpでですと、4行くらいのスクリプトを追加すると、質問内容のようなことが出来るのですが、cgiでは、結構手間が必要だということは分かりました。
出来るかどうかはまだ分かりませんが、チャレンジしてみます。お礼の返信までで、失礼しました。
さて、ファイル名についてですが、phpでですと、4行くらいのスクリプトを追加すると、質問内容のようなことが出来るのですが、cgiでは、結構手間が必要だということは分かりました。
多分、php でも perl でも必要な処理は同じですから、必要な手間は同じ位なのでは?
ファイルの名前=インクリメントしていく値なので、わざわざその値を覚えておくファイルを作らなくても良さそうです。
ただし、ファイルの数が多くなるとパフォーマンスは良くないです。
そのファイルを書き込みたいディレクトリのファイル名のリストを取り出し、
その中からファイル名が ¥d+¥.txt であるものの数値部分(¥d)を取り出して、
数値の最大値をインクリメントしたものを使って新しいファイル名をつくる。
perl は勝手に文字列と数値を読み替えてくれるのでこんな事が楽に出来ます。
最大値を見つけるのは sort を使ってもいいでしょうが、どうせ全部を調べるのだから、数値部分を取り出したときに比較すればいいでしょう。
ご回答ありがとうございます。
言語ははじめたばかりで、いろいろ聞きながらやっているもので、誤認があったかもしれません。下記の方の内容も踏まえて、無事実行することができました。勉強になりました。誠にありがとうございました。
$i=1; while($i++){ unless ( -e "${i}.txt" ) { open NEWFILE "${$i}.txt"; // ここで必要な処理をする。 close NEWFILE; last; } }
こんなところで。
ご回答ありがとうございます。
全くの素人でしたので、実際にスクリプトを書いて頂いて、大変参考になりました。
そのまま使用させて頂き、無事実行することができました。
誠にありがとうございました。
ご回答ありがとうございます。
全くの素人でしたので、実際にスクリプトを書いて頂いて、大変参考になりました。
そのまま使用させて頂き、無事実行することができました。
誠にありがとうございました。