私設SoS2オーナー応援BBS

新規発言一覧最新記事過去一覧検索ダウンロードページHOME

No.1805  Re[8]:ログインボーナスとタイムボスに購入ランキング
発言者: YOUME
発言日: 2014 10/21 11:49
ありがとうございます!
無事にできました!
しばらく動作確認しながら様子を見ています。


次に商品を買った数のカウントについて少し考え始めたのですが、
現状のsub buy_afterは以下のような感じになっています。

# Sub Buy After #
sub buy_after {
    @rcdlines = &get_user("$Fm{'id'}");
    @prclines = &get_partner("$Fm{'pd'}");
    @psaying = split(/△/,$psaying);
@opa = split(/□/,$psaying[26]);
$op = int(rand(@opa));
$psaying[26] = $opa[$op];
    return if $fg ne 'BB';
    &splititem('iI');
    if($psp =~ /Pb/ && $pvu_hm){&buypv_after; return}
    push (@msg,"$pnm「$psaying[26]」") if $psaying[26];
    if($psp !~ /Pb/)
    {
        &sales_make;
        @salesplay = &opendat("$saldir$datedata\sp.dat");
        @salesitem = &opendat("$saldir$datedata\si.dat");
    }

    $space = $xi - $#items - 1;
    foreach (0 .. $#pitems)
    {
        ($item,$sts,$price,$imaxs,$iimg,$yoya) = split(/△/,$pitems[$_]);
        $returnbag = 1;
        if ($Fm{"$_"})
        {
            if ($Fm{"check$_"} ne "$item($price\G)")
            {
                push (@msg,$Fm{"check$_"}."の配列が変わりました。もう1度買ってください。");
            }
            elsif ($price eq "")
            {
                push (@msg,"$itemは価格設定されていません。");
            }
            elsif ($mn >= $price)
            {
                if ($space)
                {
                    $mn -= $price; $pmn += $price; $pbuyfig += $price; $pbuymon++;
                    &sales_data($item,$price) if $psp !~ /Pb/;
                    push (@msg,"$itemを買いました");
            $words .= "<br><FONT color=#6B8E23>[$id] $nmに<b>$item</b>を$price\Gで売りました。</FONT>";
                    push(@items,"$item△$sts△0△1△$iimg△"); $space--; $returnbag = 0;
                }else{
                    push (@msg,"<FONT color=#eead73>$itemを持ちきれません。</FONT>");
                }
            }
            else
            {
                push (@msg,"<FONT color=#eead73>お金が足りません</FONT>");
            }
        }
        if ($returnbag) { push(@newitems,$pitems[$_]) }
    }
    @pitems = @newitems; &joinitem('iI');

    if($psp !~ /Pb/)
    {
        &writedat("$saldir$datedata\sp.dat",@salesplay);
        &writedat("$saldir$datedata\si.dat",@salesitem);
    }
    $fg = '';
    if ($psp !~ /Ng/) {$WORDS = 1;$fg = 'WB'}
    &userout; &add_record($words);
}

新しいパラメーターを「$buybuy」にしようと思っているのですが、
買った時に「買った個数」と「買った値段」を集計して反映したいと考えた時、どうすればいいのか、正直分かりませんでした…。

そして組み込みたいと考えている販売リストも、もともとあるリストが独自な感じになっており、

salesitrank.plとsalesprrank.plで構成されていると認識しており、ここに買った個数と買った値段の、購入者ランキングを追加しようと考えた時、どのようにすればいいのか、分からず…
こちらに追加するのは、難しいでしょうか?

▼salesitrank.pl内
&header;
    &sales_make;
    opendir(DIR,"$saldir") || &error("セールス読みこみエラー");
    @salefile = sort grep /si.dat/,readdir(DIR);
    closedir(DIR);
    
    $canweek = &sales_check;
    
    if($Fm{rtype} eq "daily")
    {
        @salesitem = &opendat("$saldir$Fm{day}\si.dat");
        ($sl_y,$sl_m,$sl_d,$sl_w,$other) = split(/\t/, $salesitem[0]); splice(@salesitem,0,1);
        $pr_t = "デイリー";
        $pr_d = "$sl_y" . "." . sprintf("%02d",$sl_m) . "." . sprintf("%02d",$sl_d);
        @salesitem = sort({$b cmp $a} @salesitem);
    }
    elsif($Fm{rtype} eq "weekly")
    {
        ($bef,$aft) = split(/to/,$Fm{day2});
        foreach(0 .. $#salefile)
        {
            $bingo = 1 if $salefile[$_] eq "$bef\si.dat";
            if($bingo)
            {
                @salesitemday = &opendat("$saldir$salefile[$_]");
                splice(@salesitemday,0,1);
                push(@salesitem,@salesitemday);
            }
            last if $salefile[$_] eq "$aft\si.dat";
        }
        @salesitem = sort({$b cmp $a} @salesitem);
        $c2 = $c3 = $c4 = $c5 = 0; @new=();
        foreach(0 .. $#salesitem-1)
        {
            ($a1,$a2,$a3,$a4,$a5,$other) = split(/\t/, $salesitem[$_]);
            ($b1,$b2,$b3,$b4,$b5,$other) = split(/\t/, $salesitem[$_+1]);
            if($a1 eq $b1)
            {
                $c2 += $a2; $c3 += $a3;
                $c4 = $a4 if ((!$c4 || $c4<$a4)&&$a4);
                $c5 = $a5 if ((!$c5 || $c5>$a5)&&$a5);
            }
            else
            {
                $a2 += $c2; $c2 = 0;
                $a3 += $c3; $c3 = 0;
                $c4 = $a4 if ((!$c4 || $c4<$a4)&&$a4);
                $c5 = $a5 if ((!$c5 || $c5>$a5)&&$a5);
                push(@new,"$a1\t$a2\t$a3\t$c4\t$c5\t$other");
                $c4=0; $c5=0;
            }
        }
        ($a1,$a2,$a3,$a4,$a5,$other) = split(/\t/, $salesitem[$#salesitem]);
        $a2 += $c2; $c2 = 0;
        $a3 += $c3; $c3 = 0;
        $c4 = $a4 if ((!$c4 || $c4<$a4)&&$a4);
        $c5 = $a5 if ((!$c5 || $c5>$a5)&&$a5);
        push(@new,"$a1\t$a2\t$a3\t$c4\t$c5\t$other");
        $c4=0; $c5=0;
        @salesitem = @new;
        $pr_t = "ウィークリー";
        $pr_d = substr($bef,0,4) . "." . substr($bef,4,2) . "." . substr($bef,6,2) . "〜";
        $pr_d .= substr($aft,0,4) . "." . substr($aft,4,2) . "." . substr($aft,6,2);
    }
    &unlock;
    
    foreach(0 .. $#salesitem)
    {
        ($slitnm,$slitmax,$slitpr,$other) = split(/\t/, $salesitem[$_]);
        $salesitem[$_] = "$slitmax\t$salesitem[$_]" if $Fm{order} eq "fig";
        $salesitem[$_] = "$slitpr\t$salesitem[$_]" if $Fm{order} eq "pri";
    }
    
@salesitem = sort({$b<=>$a} @salesitem);
print qq|<table align=center border=0 bgcolor=$tblbdc cellspacing=1 cellpadding=$tblcpd>\n|;
print qq|<tr><td colspan=7 bgcolor=$tblbdc align=center><b><font color=$scdclr>$pr_tセールスランキング(商品部門):$pr_d</b></font></td></tr>\n|;
print qq|<tr bgcolor=$nmclr><td><font color=$scdclr>順位</font></td><td><font color=$scdclr>商品名</font></td><td><font color=$scdclr>売上数量</font></td><td><font color=$scdclr>総売上価格</font></td><td><font color=$scdclr>平均売上価格</font></td><td><font color=$scdclr>最大単販売額</font></td><td><font color=$scdclr>最低単販売額</font></td></tr>\n|;
foreach (0 .. $#salesitem) {
    ($order,$slitnm,$slitmax,$slitpr,$slitmaxp,$slitminp,$other) = split(/\t/, $salesitem[$_]);
    $avepr = int($slitpr/$slitmax); $rank = $_ + 1 if $order != $bef; $bef = $order;
print qq|<tr bgcolor=#FFFFFF><td>$rank</td><td>$slitnm</td><td>$slitmax\個</td><td>$slitpr\G</td><td>$avepr\G</td><td>$slitmaxp\G</td><td>$slitminp\G</td></tr>\n|;
}
    &form('start');
    print qq|<TR><TD colspan=7>\n|;
    
    print qq|<TABLE width=100%><TR><TD>\n|;
    print"<SELECT name=mode>\n";
    print"<OPTION value=salesitrank SELECTED>商品部門\n";
    print"<OPTION value=salesprrank>販売者部門\n";
    print"</SELECT>\n";
    print"<SELECT name=order>\n";
    if($Fm{order} eq "fig")
    {
        print"<OPTION value=fig SELECTED>売上数量順\n";
        print"<OPTION value=pri>売上総額順\n";
    }
    else
    {
        print"<OPTION value=fig>売上数量順\n";
        print"<OPTION value=pri SELECTED>売上総額順\n";
    }
    print"</SELECT>\n";
    print"</TD><TD>";
    if($Fm{rtype} eq "daily")
    {
        &input('radio','rtype','daily',' checked',"<font color=$scdclr><b>DAILY</b></font><BR>");
        &input('radio','rtype','weekly','',"<font color=$scdclr><b>WEEKLY</b></font><BR>") if $canweek;
    }
    elsif($Fm{rtype} eq "weekly")
    {
        &input('radio','rtype','daily','',"<font color=$scdclr><b>DAILY</b></font><BR>");
        &input('radio','rtype','weekly',' checked',"<font color=$scdclr><b>WEEKLY</b></font><BR>") if $canweek;
    }
    print"</TD><TD>";
    print"<SELECT name=day>\n";
    foreach(0 .. $#salefile)
    {
        $writea = substr($salefile[$_],0,4) . '.' . substr($salefile[$_],4,2) . '.' . substr($salefile[$_],6,2);
        $writeb = substr($salefile[$_],0,8);
        if($Fm{day} eq $writeb){print"<OPTION value=\"$writeb\" SELECTED>$writea\n";}
        else{print"<OPTION value=\"$writeb\">$writea\n";}
    }
    print"</SELECT><BR>\n";
    $writea = $writeb = "";
    
    if($canweek)
    {
        print"<SELECT name=day2>\n";
        foreach(0 .. $#salefile)
        {
            @salesitem = &opendat("$saldir$salefile[$_]");
            $salesitem[0] =~ s/[\n\r]//g;
            ($sl_y,$sl_m,$sl_d,$sl_w,$other) = split(/\t/, $salesitem[0]);
            if(!$sl_w)
            {
                $writea = substr($salefile[$_],0,4) . '.' . substr($salefile[$_],4,2) . '.' . substr($salefile[$_],6,2);
                $writeb = substr($salefile[$_],0,8);
            }
            if($sl_w == 6 && $writea)
            {
                $writea .= "〜" . substr($salefile[$_],0,4) . '.' . substr($salefile[$_],4,2) . '.' . substr($salefile[$_],6,2);
                $writeb .= "to" . substr($salefile[$_],0,8);
                if($Fm{day2} eq $writeb){print"<OPTION value=\"$writeb\" SELECTED>$writea\n";}
                else{print"<OPTION value=\"$writeb\">$writea\n";}
            }
        }
        print"</SELECT>\n";
    }
    
    print"</TD><TD>";
    print"<input type=submit value=\"表\示\"><BR>\n";
    print qq|</TD></TR></table>\n|;
    
    print qq|</TD></TR></table>\n|;
1;


▼salesprrank.pl内
    &sales_make;
    opendir(DIR,"$saldir") || &error("セールス読みこみエラー");
    @salefile = sort grep /sp.dat/,readdir(DIR);
    closedir(DIR);
    
    $canweek = &sales_check;
    
    if($Fm{rtype} eq "daily")
    {
        @salesitem = &opendat("$saldir$Fm{day}\sp.dat");
        ($sl_y,$sl_m,$sl_d,$sl_w,$other) = split(/\t/, $salesitem[0]); splice(@salesitem,0,1);
        $pr_t = "デイリー";
        $pr_d = "$sl_y" . "." . sprintf("%02d",$sl_m) . "." . sprintf("%02d",$sl_d);
        @salesitem = sort({$b cmp $a} @salesitem);
    }
    elsif($Fm{rtype} eq "weekly")
    {
        ($bef,$aft) = split(/to/,$Fm{day2});
        foreach(0 .. $#salefile)
        {
            $bingo = 1 if $salefile[$_] eq "$bef\sp.dat";
            if($bingo)
            {
                @salesitemday = &opendat("$saldir$salefile[$_]");
                splice(@salesitemday,0,1);
                push(@salesitem,@salesitemday);
            }
            last if $salefile[$_] eq "$aft\sp.dat";
        }
        @salesitem = sort({$b cmp $a} @salesitem);
        $c2 = $c3 = 0; @new=();
        foreach(0 .. $#salesitem-1)
        {
            ($a1,$a2,$a3,$other) = split(/\t/, $salesitem[$_]);
            ($b1,$b2,$b3,$other) = split(/\t/, $salesitem[$_+1]);
            if($a1 eq $b1)
            {
                $c2 += $a2; $c3 += $a3;
            }
            else
            {
                $a2 += $c2; $c2 = 0;
                $a3 += $c3; $c3 = 0;
                push(@new,"$a1\t$a2\t$a3\t$other");
            }
        }
        ($a1,$a2,$a3,$other) = split(/\t/, $salesitem[$#salesitem]);
        $a2 += $c2; $c2 = 0;
        $a3 += $c3; $c3 = 0;
        push(@new,"$a1\t$a2\t$a3\t$other");
        @salesitem = @new;
        $pr_t = "ウィークリー";
        $pr_d = substr($bef,0,4) . "." . substr($bef,4,2) . "." . substr($bef,6,2) . "〜";
        $pr_d .= substr($aft,0,4) . "." . substr($aft,4,2) . "." . substr($aft,6,2);
    }
    
    &unlock;
    
    foreach(0 .. $#salesitem)
    {
        ($slitnm,$slitmax,$slitpr,$other) = split(/\t/, $salesitem[$_]);
        $salesitem[$_] = "$slitmax\t$salesitem[$_]" if $Fm{order} eq "fig";
        $salesitem[$_] = "$slitpr\t$salesitem[$_]" if $Fm{order} eq "pri";
    }
    
@salesitem = sort({$b<=>$a} @salesitem);
&header;
print qq|<table align=center border=0 bgcolor=$tblbdc cellspacing=1 cellpadding=$tblcpd>\n|;
print qq|<tr><td colspan=4 bgcolor=$tblbdc align=center><b><font color=$scdclr>$pr_tセールスランキング(販売者部門):$pr_d</font></b></td></tr>\n|;
print qq|<tr bgcolor=$nmclr><td><font color=$scdclr>順位</font></td><td><font color=$scdclr>[ID]販売者名</font></td><td><font color=$scdclr>売上数量</font></td><td><font color=$scdclr>総売上価格</font></td></tr>\n|;
foreach (0 .. $#salesitem) {
    ($order,$slitnm,$slitmax,$slitpr,$other) = split(/\t/, $salesitem[$_]);
    $rank = $_ + 1 if $order != $bef; $bef = $order;
print qq|<tr bgcolor=$ltclr><td>$rank</td><td>$slitnm</td><td>$slitmax\個</td><td>$slitpr\G</td></tr>\n|;
}
    &form('start');
    print qq|<TR><TD colspan=4>\n|;
    
    print qq|<TABLE width=100%><TR><TD>\n|;
    print"<SELECT name=mode>\n";
    print"<OPTION value=salesitrank>商品部門\n";
    print"<OPTION value=salesprrank SELECTED>販売者部門\n";
    print"</SELECT>\n";
    print"<SELECT name=order>\n";
    if($Fm{order} eq "fig")
    {
        print"<OPTION value=fig SELECTED>売上数量順\n";
        print"<OPTION value=pri>売上総額順\n";
    }
    else
    {
        print"<OPTION value=fig>売上数量順\n";
        print"<OPTION value=pri SELECTED>売上総額順\n";
    }
    print"</SELECT>\n";
    print"</TD><TD>";
    if($Fm{rtype} eq "daily")
    {
        &input('radio','rtype','daily',' checked',"<b><font color=$scdclr>DAILY</font></b><BR>");
        &input('radio','rtype','weekly','',"<b><font color=$scdclr>WEEKLY</font></b><BR>") if $canweek;
    }
    elsif($Fm{rtype} eq "weekly")
    {
        &input('radio','rtype','daily','',"<b><font color=$scdclr>DAILY</font></b><BR>");
        &input('radio','rtype','weekly',' checked',"<b><font color=$scdclr>WEEKLY</font></b><BR>") if $canweek;
    }
    print"</TD><TD>";
    print"<SELECT name=day>\n";
    foreach(0 .. $#salefile)
    {
        $writea = substr($salefile[$_],0,4) . '.' . substr($salefile[$_],4,2) . '.' . substr($salefile[$_],6,2);
        $writeb = substr($salefile[$_],0,8);
        if($Fm{day} eq $writeb){print"<OPTION value=\"$writeb\" SELECTED>$writea\n";}
        else{print"<OPTION value=\"$writeb\">$writea\n";}
    }
    print"</SELECT><BR>\n";
    $writea = $writeb = "";
    
    if($canweek)
    {
        print"<SELECT name=day2>\n";
        foreach(0 .. $#salefile)
        {
            @salesitem = &opendat("$saldir$salefile[$_]");
            $salesitem[0] =~ s/[\n\r]//g;
            ($sl_y,$sl_m,$sl_d,$sl_w,$other) = split(/\t/, $salesitem[0]);
            if(!$sl_w)
            {
                $writea = substr($salefile[$_],0,4) . '.' . substr($salefile[$_],4,2) . '.' . substr($salefile[$_],6,2);
                $writeb = substr($salefile[$_],0,8);
            }
            if($sl_w == 6 && $writea)
            {
                $writea .= "〜" . substr($salefile[$_],0,4) . '.' . substr($salefile[$_],4,2) . '.' . substr($salefile[$_],6,2);
                $writeb .= "to" . substr($salefile[$_],0,8);
                if($Fm{day2} eq $writeb){print"<OPTION value=\"$writeb\" SELECTED>$writea\n";}
                else{print"<OPTION value=\"$writeb\">$writea\n";}
            }
        }
        print"</SELECT>\n";
    }

    print"</TD><TD>";
    print"<input type=submit value=\"表\示\"><BR>\n";
    print qq|</TD></TR></table>\n|;
    
    print qq|</TD></TR></table>\n|;
1;

▼関連発言

1797:ログインボーナスとタイムボスに購入ランキング [YOUME] 10/15 14:53
 ├1798:Re:ログインボーナスとタイムボスに購入ランキング [moon] 10/15 21:43
 │└1799:Re[2]:ログインボーナスとタイムボスに購入ランキ.. [YOUME] 10/16 09:06
 │ └1800:Re[3]:ログインボーナスとタイムボスに購入ラン.. [moon] 10/16 18:42
 │  └1801:Re[4]:ログインボーナスとタイムボスに購入ラ.. [YOUME] 10/17 16:42
 │   └1802:Re[5]:ログインボーナスとタイムボスに購入.. [moon] 10/17 20:14
 │    └1803:Re[6]:ログインボーナスとタイムボスに購.. [YOUME] 10/20 12:00
 │     └1804:Re[7]:ログインボーナスとタイムボスに.. [moon] 10/20 19:13
 │      └1805:Re[8]:ログインボーナスとタイムボス.. [YOUME] 10/21 11:49
 │       └1806:Re[9]:ログインボーナスとタイムボ.. [moon] 10/21 19:37
 │        └1807:Re[10]:ログインボーナスとタイ... [YOUME] 10/22 09:49
 │         └1808:Re[11]:ログインボーナスとタ... [moon] 10/22 19:01
 │          └1809:Re[12]:ログインボーナスと... [YOUME] 10/23 09:42
 │           └1810:Re[13]:ログインボーナス... [moon] 10/23 19:34
 │            └1811:Re[14]:ログインボーナ... [YOUME] 10/24 11:47
 └1812:Re:ログインボーナスとタイムボスに購入ランキング [moon] 10/24 20:46
  └1813:Re[2]:ログインボーナスとタイムボスに購入ランキ.. [YOUME] 10/25 11:12
   └1814:Re[3]:ログインボーナスとタイムボスに購入ラン.. [moon] 10/25 13:58
    └1815:Re[4]:ログインボーナスとタイムボスに購入ラ.. [moon] 10/25 14:21
     └1816:Re[5]:ログインボーナスとタイムボスに購入.. [YOUME] 10/26 18:49<-last

  返信フォーム [引用]
名 前 保存
題 名
発 言
PASSWORD
投稿確認必ずチェックを入れてください。こちらにはチェックを入れないでください。
書き込む
◇題名は、短くわかりやすく書いてください。
◇過去に同じ内容が投稿されていないか検索してから書き込んで下さい。
◇管理人の判断により相応しくない投稿は削除します。

Pass 保存


CGIROOM