• 締切済み

ランキングデータの扱い

FLASHで作製したゲームから送られてくる変数(お金、名前)をお金の多い順にソートして、多いほうから10人表示するというプログラムを作っています。 同じ名前を登録しようとした場合、その人の前回のと比較して、今回のほうが高い場合は上書きするようにして、同じ名前が10位内に2つ以上入らないようにしたいのですが、どうしていいかわからないです。 スコアと名前は、datファイル内に お金、名前 お金、名前 と入っています。 わかりにくい質問かと思いますが、よろしくお願いします。

noname#14153
noname#14153
  • CGI
  • 回答数1
  • ありがとう数1

みんなの回答

回答No.1

$filename = "datfilename"; $name = "お名前"; $money = "お金"; $name .= "\n"; open(IN,$filename); %data = map{(split(/,/))[1] => (split(/,/))[0]} <IN>; close(IN); if(!$data{"$name"} || $data{"$name"} < $money){ $data{"$name"} = $money; } $i = 0; map{$out[$i++] = "$data{$_},$_"} sort{$data{$b} <=> $data{$a}} keys %data; open(OUT,"> $filename"); print OUT splice(@out,0,10); close(OUT); こんな感じでどうでしょう。

関連するQ&A

  • ソートとフォームデータの格納について

    perlを勉強して恥を承知で困っています。 先日、こちらで質問し大いに助けてもらったのですが 不甲斐ないながらどうすれば良いのか分からず、アドバイスを求めています。 ・使用言語:perl ・目的:htmlから「名前」「スコア」を入力し、 スコアが降順(高い順)に名前とスコアを表示する ランキングcgiの作成 ・現状の進行度 score.html #名前とスコアを入力するhtml ranking.cgi #ソートし、入力されたスコアをランキングに組み込む cgi-lib.plをDL ・分からない事 ソートする時、スコアを降順にするにしても、 名前をどうやってスコアと一緒に連れてソートするのか、 cgi-lib.plは(ranking.)cgiに設置すればいいのでしょうか? どうかご教授賜りたく候。 score.html --------------------- <html> <head> <title>テスト</title> </head> <body> <form action="request/ranking.cgi " METHOD="post"> 名前 : <input type="text" name="NewName"><br> スコア: <input type="text" name="NewScore"><BR> <input type="submit" value="送信"> </form> </body> </html> ranking.cgi --------------------- #!/url/local/bin/perl #データの格納 my %input; &ReadParse(\input); $nn = $input{'NewName'}; $ns = $input{'NewScore'}; #ソート my @v = {100,200,300}; my @k = sort{$b <=> $a;} @v; #受け取ったスコアとランキングとの比較 if($ns > @k[1]){ @k[3] = @k[2]; @k[2] = @k[1]; @k[1] = $ns; }elsif($ns =< @k[1] && $ns > @k[2]){ @k[3] = @k[2]; @k[2] = $ns; }else($ns =< @k[2] && $ns > @k[3]){ @k[3] = $ns; } #出力 print "結果\n" for(my $i=0;$i<@k;$i++){ print "$i位: $k[$i]<BR>\n"; }

  • エクセルデータの所属分け

    質問失礼します。 とある大会のスコアデータ100人分に関して 個人スコア順にソートしたものを持っているのですが 個々人の所属団体でまとめてしまいたいのです。 (団体の合計点を算出するために) 横列のデータは個人名、スコア、所属団体で分かれているため 名前が同じ物を一括してくくる方法があると一瞬でまとめられるので そういった方法があれば教えて下さい! もしかしたら日本語が下手で意図が伝わりづらいかもしれません申し訳ありません…

  • ヒープソートは2重ソートできない?

     ソートに関して詳しい方、相談にのっていただけたらと思います。  CGIを使ってヒープソートするロジックを組みました。  そのルーチンはただ単項データをソートするだけでなく、たとえば、配列変数 n1 と 配列変数 n2 にそれぞれデータが入っていたとき、n1 をソートすると、それに連動して n2 の中身も一緒にソートされます。  言うならば、バラバラに並んだビデオテープを番号順に並べ替えると、一緒にタイトルも並べ変わる感じです。  ところが、配列 n1 をソートしていてたまに同じ数字が入っていることがあります。そういうときは n2 の順にしたいのです。  そこで、先に n2 をソートしてから n1 をソートするといいのではと考え、そのようにプログラムを組んでみました。  ところが実際には、n1 をソートした瞬間に、せっかく並べ替えた n2 の内容がバラバラになってしまうのです。  「n1 の内容が同じ場合は n2 を昇順に並べる」という処理を記述していても、実際には n2 の内容はバラバラです。  これはヒープソートを使用している限り仕方のないことなのでしょうか。あるいは何らかの解決方法を知っている方、よろしくお願いします。

  • perl/cgiでのランキングについて

    perlを(数日前から)勉強中の身ながら恥を承知で書きます。 元々プログラミングが苦手な事もあり 手をつけようにもつけられおらず、エラーがどうの、ではなく 情けながら…はじめからわからない…分野でして、 使用言語:perl 本題は HTMLのtextboxから「名前」「スコア」を入力し、 それをスコアが降順(高い順)に 1位から3位まで名前と共に表示させるCGIを目的としています。 例 順位・名前・スコア 1位・kenes・2007 2位・keiko・2000 …… 書いてある事が簡単なperl/CGIなのも分かっているのですが 先日までC言語の方をメインに勉強しPerlを触る時 C言語とのギャップに妙な混乱が発生し、なかなか理解出来なっており そもそもCGI自体、あまり触った事が無く、更に当人自身、 応用する事が不得意であるのですが今、非常に困っています。 どうか参考になる本、プログラムなどをご教授賜りたく候。

    • ベストアンサー
    • Perl
  • FLASHとCGIでスコアランキング作成

    何度か質問させて頂いてます><; すみませんが今回もよろしくお願いします! 現在 なんとか自宅サーバでCGIが動くようになり、 自作のswfファイルからCGIへ、入力した名前とスコアがデータとして送信され、 そのままCGIページでその2つが表示されるようになっています 次の段階としては、 (1)CGIへ送信されたデータを、テキストファイルに保存。(スコアランキング用の保存場所なので、上書きではなく追記?でどんどん格納していきたいです) (2)テキストファイル内のデータを、ランキングなので降順にソートして、swfファイルで表示 この2つをやりたいです。 まず(1)は、 http://1art.jp/flash/le/lesson44/lesson44.htm こちらを参考にさせていただき、テキストファイルに保存するところまでは理解できたのですが、 データを区切って、文字がくっつかないように追記するやり方がわかりません・・・。 また、これはHTMLからCGIにデータを送信しているので、SWFからCGIに送りたい場合は やり方が違うのでしょうか。 (2)は この降順ソートをCGI側でやるべきなのかFLASH側でやるべきなのかがよくわかりません。 それともどちらでもいいのでしょうか? というか(2)は多分(1)を理解して作ってからじゃないとできないと思いますが・・・; とりあえず今はこんなところです・・・よろしければご助言お願いいたします!

    • ベストアンサー
    • CGI
  • GROUP BYで集約されるときのソートを変えたい

    GROUP BYで集約されるときのソートを変えたい MySQLの5.1を使用しています。 テーブル"tbl"には、"no","id","score"の3つのフィールドがあり、 "no"は主キーです。 +---+----+-------+ | no | id | score | +---+----+-------+ | 1 | 10 | 10002 | | 2 | 10 | 10000 | | 3 | 10 | 10008 | | 4 | 11 | 10004 | | 5 | 12 | 10006 | +---+----+-------+ 上記の表から、 scoreの値が高い順にグループ化してソートしたいのですが、 以下のSQL文ではscoreが最初に登録されたものに集約されてからグループ化されてソートしてしまうため、 思い通りの結果が得られずに困っています。 ↓具体例 SELECT no, id, score FROM tbl ORDER BY score DESC GROUP BY id; +---+----+-------+ | no | id | score | +---+----+-------+ | 5 | 12 | 10006 | | 4 | 11 | 10004 | | 1 | 10 | 10002 | +---+----+-------+ ↓欲しいソート順 +---+----+-------+ | no | id | score | +---+----+-------+ | 3 | 10 | 10008 | | 5 | 12 | 10006 | | 4 | 11 | 10004 | +---+----+-------+ テンポラリテーブルはなるべく使用せずソートしたいのですが、 このような事は可能なのでしょうか? ご存知の方がいらっしゃいましたら教えていただけると助かります。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • Flash lite1.1 でソートをかける方法

    Flash lite1.1でソート(小さい順)に並び替えをしたいと思っているのですがうまく思い浮かばず困っております。 //変数 k1 = 5; k2 = 1; k3 = 3; k4 = 2; k5 = 4; //並び替え q1 = "k2";//中身が1 q2 = "k4";//中身が2 q3 = "k3";//中身が3 q4 = "k5";//中身が4 q5 = "k1";//中身が5 と変数中の数値が小さい変数名順に並び替えをしたいのですが どのような処理をしたらよいでしょうか? よろしくお願いします。

    • ベストアンサー
    • Flash
  • サーバにデータを送る時の変数名はわかるの?

    FLASH初心者です。 ゲームのハイスコアのランキングを作成しています。 ゲーム終了後に、FLASHからサーバ上に LoadVars の POST でスコアと名前を送って、PHP で保存する、というところまではできました。 この時、ユーザーは、サーバ上のPHPのファイル名や送信時の変数名を知ることができるのでしょうか? もしできるならいたずらなどの対策が必要かと思った次第です。 以上よろしくお願いします。

    • ベストアンサー
    • Flash
  • EXCEL ランキング推移について

    こんにちは!質問の件ですが、毎月のランキングをもとに 前回との比較値を算出したいです。 例:2月の比較値を出す場合 ----------------------------------------------------------- 順位  1月   2月   結果 1位 Aさん  Bさん  +1 2位 Bさん  Aさん   -1 3位 Cさん  Cさん  → ----------------------------------------------------------- 結果は、2月は、1月からみてどうなのか? ということになりますが、結果をだすのは どのような式を入れたら宜しいでしょうか? 列の項目順や数は問いません。 よろしくお願いいたします。

  • swfからswfへ変数を渡す

    こんにちは。 今回、質問させていただくのはFlashに出てくる変数についてなのですが、 swfからswfに変数を渡すということがしたいのですが、どうも上手くいきません・・・ やろうとしていることは、まずシューティングゲームのFlashをつくり、 そのスコア(何体敵を倒したか)を別のswfファイルに表示したいのですが・・・ そもそもあまり変数とかに詳しくないので詳しい方がおられましたら是非ご回答お願いします。

専門家に質問してみよう