フォームから入力されたデータの比較をCGIで行うには?

[上に] [前に] [次に]
がんま [E-Mail] 1998/08/28(金) 00:59:44
お久しぶりです、とほほさん。 がんまです。

しばらくCGIから遠ざかっていましたが、今週から
再び組みはじめました。

で、早速と言うか、どうにもうまく行かないので
ここに質問をさせていただきます。

まず、フォームで入力したデータを
「名前」「性別」「時間」としてCGIで処理をして
指定したファイルに保存します。

それが、仮に以下の

GAMMA,MEN,10,20,50,
OMEGA,MEN,9,50,33,

と、このようになってます。

目的としているのは
この保存ファイルに保存してあるデータと、新しく書込まれたデータ

例えば上記の2行に追加する形で

RAY,WOMEN,9,58,20,

と、フォームで入力して、登録ボタンを押した後に
先に書いた、これまでの保存データと、新しく書込まれたデータを
比較して、時間の速い順、もし同時間であった場合を考えて、
名前の順に変更して、保存ファイルにデータを保存をしたいのです。

今の私がやると、ベタなものであれですが

GAMMA,MEN,10,20,50,
OMEGA,MEN,9,50,33,
RAY,WOMEN,9,58,20,

と、単に下に追加することしか出来ません(;_;
理想としているのは、上記のデータを

OMEGA,MEN,9,50,33,
RAY,WOMEN,9,58,20,
GAMMA,MEN,10,20,50,

このように並び替えて、保存ファイルに再び保存したいのです。

お忙しいところ、すみませんが、ご教授をお願いします。

B-Cus 1998/08/28(金) 01:19:34
とりあえず、データ形式を固定長にしてはどうですか?
 1998/01/05 21:06:05 GAMMA MEN
とかね。これなら文字列でソートすればご希望の時間順、
名前順になると思います。例えばこんな感じ。

open(IN,"file");
while (<IN>){
 chop;
 push(@datas,$_);
}
close(IN);

push(@datas,"1998/08/08 00:11:22 RAY WOMEN"); # 追加したいデータ

open(OUT,">data");
foreach ( sort @data ){
 print OUT "$_\n";
}
close(OUT);


データ変更が必要なら、名前をキーとしたhashを使うときれいに
書けるかと思います。

# もしかして、こういうのってDBMを使うと簡単に書けたりするのかな。
# 使った事ないからよくわかんないんだけど。

がんま [E-Mail] 1998/08/28(金) 18:59:09
[[解決]]
B-Cusさん、はじめまして(^^

ご丁寧にリストまで組んでいただき、ありがとうございます!
お蔭様で、理想とした形に表示することが出来ました。

これから、問題点などを探りながら組んでみます。

もし、息詰まったら、質問させていただくことになると思いますが
その時は、よろしくお願いします。

[上に] [前に] [次に]