• 締切済み

CGIのソート処理、配列データの合計値計算と書き込み・・・

ご存知でしたら、お教えください。 現在、CGIを組み込んでいるんですが、以下の2つがうまく稼動しません。 マニュアルを色々読んでみても、はっきりとどこが悪いのかなどがよくわかりません。 現在、悩んでいるのは、 (1)ソート処理について データファイル内に以下のデータがあるとします。 名前($name)、所属($shozoku)、得点合計($goukei)、A得点($ten1)、B得点($ten2)、C得点($ten3)・・・ たなか<>さくら組<>32<>12<>15<>9・・・ やまだ<>もも組<>29<>13<>11<>10・・・ すずき<>さくら組<>33<>14<>10<>15・・・ ※<>は区切り文字です。 上記のデータをforeach文で読み込んで、得点合計順にWEBで表示させよう としているんですが、読み込む際に下記の通りでいいのでしょうか。 これでは駄目なんでしょうか?下記で実行すると、データが1件も表示されません。 @line=sort { $goukei{$b} <=> $goukei{$a} } keys %goukei; foreach(@line_sort){ ($num,$shozoku,$goukei,$ten1,$ten2,$ten3) = split(/<>/,$line) (2)合計点の集計 上記にも関係するんですが、WEBで指示した各点数(A得点、B得点・・・)を 集計した後、上記データファイルの得点合計に設定したいんですが、 unshift(@line,"$name<>$shozoku<>$goukei<>" . $v_ten . "<>\n"); 上記のようにA得点以降は、フォーム上で繰り返し項目にしてあります。($v_ten)がn個あり、それを全て合計した値を得点合計($goukei)に設定した後にデータファイルへの書き込みがしたいのですが、どうすればよいのでしょうか。 なにぶん、CGIのプログラミングは素人の私ゆえ、ご質問がこれでよいのか不安がありますが、よろしくお願いいたします。

  • CGI
  • 回答数1
  • ありがとう数0

みんなの回答

  • hazenoki
  • ベストアンサー率33% (21/62)
回答No.1

質問から適切な回答をするには、難しいような気がします。状況にわからない点が多いから。 言葉で説明できないなら、一通りの流れがわかる範囲のソースを描いておいた方がいいのでは? (あまり長いと誰も呼んでくれないと思いますが。) ちなみに、CGIとは仕組みの名前であって、プログラミング言語の名前では ありません。質問は、perl という言語についてのものと思います。 質問(1) データが1件も表示されないとのことですが、いろいろ可能性が考えられます。 print 文がない、 中カッコが閉じていない、perl 本体がない、などなど 質問(2) $v_ten が n個あるのなら、n回足せばいいのでは? と思ってしまいますが、質問の意図は、そういうことではないですよね。 「フォーム上で繰り返し項目にしてあります。」の意味もわかりません。

関連するQ&A

  • 配列同士の足し算のループ処理

    まず、初心者ですよろしくお願いします。 $data1=(3,2,4,0,2,3,5,4); $data2=(2,4,0,2,3,1,4,1); と配列が2つあって、合計した配列をあらたに作りたかったのですが、 $goukei=($data1[0]+$data2[0],........[7]) としたら出来たのですが、ループでやりたかったので for($i=0; $i<8; $i++) { $goukei[] = ($data1[i]+$data2[i]); } としましたができませんでした。 $i=0; foreach( $data1 as $v) { $goukei[] = ($v+$data2[i]); $i++; } もだめでした。 どうすればできますでしょうか?

    • ベストアンサー
    • PHP
  • 配列データのソートについて

    配列データのソートについて 配列データAAA(1000,10)があるとします。 このデータを5番目のデータにて降順にソートしたいと考えています。 現在、次の方法にて実施していますが、効率が悪いようなので、効率の良い方法を教えて下さい。 Sheets("荷捌場").Select Range(Cells(1, 1), Cells(1000, 10))="" For A=1 To 1000 For B=1 To 10 Cells(A,B)=AAA(A,B) Next B Next A Range(Cells(1, 1), Cells(1000, 10)).Select Selection.Sort Key1:=Range("E1"), Order1:=xlDescending For A=1 To 1000 For B=1 To 10 BBB(A,B)=Cells(A,B).Value Next B Next A Sheets("ソート後のデータ貼付場").Select For A=1 To 1000 For B=1 To 10 Cells(A,B)=BBB(A,B) Next B Next A

  • 配列の連想配列のソート

    お世話になります。mooTaihenです。 Perlで配列のソートが出来なくて困っております。 お忙しいところ、誠に申し訳けありませんが、ご教示をお願い致します。 【内容】  サンプルソースに示した様なデータ構成をソートしたいのですが、思惑通りに行きません。  期待しているソート結果は、 a1 b3 b4 c2  です。  <サンプルソース> my @data; $data[0]{name} = "b"; $data[0]{cnt} = 4; $data[1]{name} = "c"; $data[1]{cnt} = 2; $data[2]{name} = "b"; $data[2]{cnt} = 3; $data[3]{name} = "a"; $data[3]{cnt} = 1; @data2 = sort {chg($a,$b)} @data; foreach (@data2) { print $_->{name} . $_->{cnt} . "\n"; } sub chg { my(@s,@d)=@_; return $s[0]{name} cmp $d[0]{name} and $s[0]{cnt} <=> $d[0]{cnt}; }  <出力結果> a1 b3 c2 b4

    • ベストアンサー
    • Perl
  • 配列のソートについて

    配列をソートした時、もともとデータのあった配列番号を記憶しておきたいのですが いい方法はないでしょうか (31,55,84,20,96,14); //1 2 3 4 5 6 ↓ (14,20,31,55,84,96) //6 4 1 2 3 5    ※ソート前の配列番号 いくつかの行(配列A)の、違う列にあるデータを抜き出して配列Bにまとめた後、配列Bをソート その後、配列Bのもともとの順番の位置の行にあるデータを上からコピーしていく感じで行ごとのソートを考えています イメージはこんな感じです a[0]=[1,512,200]; a[1]=[3,100,1]; a[2]=[4,100,265]; a[3]=[8,300,1]; //ソート対象を抜き出す b[0]=a[0][1]; b[1]=a[1][2]; b[2]=a[2][0]; b[3]=a[3][1]; b.sort(); c[0]=a[b[0]のソート前の配列番号]; c[1]=a[b[1]のソート前の配列番号]; c[2]=a[b[2]のソート前の配列番号]; c[3]=a[b[3]のソート前の配列番号];

  • 多次元配列のソートについて

    名前とテストの点, クラスが格納されている 以下のような多次元配列があるとします。 $data[0][0] = 'yamada'; $data[0][1] = '20'; $data[0][2] = 'B'; $data[1][0] = 'katoh'; $data[1][1] = '45'; $data[1][2] = 'A'; $data[2][0] = 'honda'; $data[2][1] = '15'; $data[2][2] = 'E'; $data[3][0] = 'ooyama'; $data[3][1] = '100'; $data[3][2] = 'C'; 上記の配列を得点順にソートして表示したいのですが どのようにすればうまく(昇順、降順)で表示できるのでしょうか?

    • 締切済み
    • PHP
  • 配列のソートについて質問です。

    配列のソートについて質問です。 2つのキーで配列の中身をソートしたいのですが、スマートな書き方があれば教えてください。 そもそも間違っている、などのご指摘でもありがたいです。 @t1 = map {(split /,/)[1]} @data; @t2 = map {(split /,/)[2]} @data; @data = @data[sort {$t1[$a] <=> $t1[$b] or $t2[$a] <=> $t2[$b]} 0 .. $#t1]; @dataの内容 A,1,2 B,1,3 C,2,1 D,3,2 E,3,1 F,1,1 出力結果 F,1,1 A,1,2 B,1,3 C,2,1 E,3,1 D,3,2 よろしくお願いします。

    • ベストアンサー
    • Perl
  • エクセルで複数のデータからソートをかけて、合計金額を算出したいのですが

    エクセルで複数のデータからソートをかけて、合計金額を算出したいのですが、ソートではうまくいきません。 A列(文字)  B列(数値)  C列(金額) ABC 123 100 ABC 456 50 DEF 123 1,000 GHI 789 300 このような感じで、B列には同じ数値のものが複数あるデータです。 どなたかエクセルマスターの方、お教えいただけますか?

  • 多次元配列のソートについて

    始めまして。 多次元配列のソート方法について分からないことがある為教えていただけないでしょうか。 $a[0] = array('2007/3/1','あ100','その他'); $a[1] = array('2007/3/1','あ200','その他'); $a[2] = array('2007/3/2','あ200','その他'); $a[3] = array('2007/3/2','あ300','その他'); $a[4] = array('2007/3/3','あ50','その他'); 上記のような配列があった場合、usort関数でやると、日付かその後ろの数値の値を元にソートできますが、両者の関係を持たせたソートは可能でしょうか。 結果としては $b[0] = "2007/3/3 あ50"; $b[1] = "2007/3/2 あ200"; $b[2] = "2007/3/2 あ300"; $b[3] = "2007/3/1 あ100"; $b[4] = "2007/3/1 あ200"; というようにしたいのです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 2次元配列のソート

    2次元配列のデータをソートしたいのですが方法がわかりません。初歩的な質問ですが、ご存知の方、よろしくお願いいたします。 (例) 商品コード、商品名、金額、有効期限のデータを以下のように持っています。 $data[0] = ("001", "商品A", 5200, "2004/5"); $data[1] = ("002", "商品B", 350, "2005/1"); $data[2] = ("003", "商品C", 10800, "2004/3"); ・・・・ データの項目(商品コード、商品名など)数は固定ですが、データ数、内容は変化します。 2次元配列でデータがあり、商品コードで降順にソート、金額で昇順にソートなどのソートを行う方法はありますか? No.760468 で同じような質問があり、array_multisort が回答としてあがっていましたが、上記データの場合ソートできないようなので質問させていただきました。 なお、環境によりデータベースを使用することはできません。

    • ベストアンサー
    • PHP
  • 配列のソート

    下記のような形でデータを取得し結果を配列に格納し、 降順にソートしたいのですが、いい方法が見つかりません。いい方法はあるでしょうか。よろしくお願いします。 テーブル構造(test) ID|name |point|area| ==================== 1 |Aさん|56 | A | 2 |Bさん|12 | B | 3 |Cさん|24 | B | 4 |Dさん|34 | B | $sql = "select * from test"; $result = mysql_query($strSQL); while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { ここで配列に格納 } 配列への格納方法と、pointの降順にソートする 方法が知りたいです。 最終的に、Aさん、Dさん、Cさん、Bさんと なるようにしたいです。

    • ベストアンサー
    • PHP

専門家に質問してみよう