人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: Kenichi_S
●カテゴリ:インターネット ウェブ制作
✍キーワード:CGI Perl txt いもの サーバー
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● ootatmt
●300ポイント

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

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


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

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

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

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

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

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

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


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

わかりますか?

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

◎質問者からの返答

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

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

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

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


2 ● tezcello
●300ポイント

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

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


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

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


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

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

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


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

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

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

◎質問者からの返答

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

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


3 ● b-wind
●300ポイント ベストアンサー
$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

◎質問者からの返答

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

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ