プロが教える店舗&オフィスのセキュリティ対策術

作った方が早いと言われるかも知れませんが。最初から有る物をわざわ
ざと作りたくは有りませんので。

若しも、モジュールが有るのでしたらお知えてください。宜しくお願い
します。

質問者からの補足コメント

  • うーん・・・

    質問の通りにここではコードを例示して下さいと書いているので、その
    様に回答願います。ヒントだとか、こうすれば、ああすればとかでは無
    くて実際のコードだけがより回答としては積極的で親切です。

    ヒントがたとえ有ったとしても、それで動かなければ結局は同じ事で
    す。知っている人だったらそれで良いのかも知れませんが。知らないか
    ら質問をしているので会って。余り、回りくどいヒントの様な回答より
    かは単刀直入のコードを例示して貰えばそれですっきりとします。

    それで分からないのがおかしい様な回答の様にも見受けします。最初か
    ら知っているのであればそもそも質問はしません。

    ここではあくまでもコードの例示のみを私は求めています。その辺を宜
    しくお願いします。それ以外の回答はこの場合は論外だと思います。そ
    こを宜しくお願いします。

      補足日時:2016/08/06 16:56

A 回答 (3件)

for $aref (@newtable){


print @{$aref} ;
}



とだけ書いて、参考になるなら、それでいいんですけど。




$aref=$newtable[0] ;
とすれば
http://perldoc.jp/docs/perl/5.22.1/perlreftut.po …
にある方法で、1行目のデータを配列として扱えます。

for $aref (@newtable){
ここで$arefを使って各行の処理をする;
}
とすれば、全行に対して処理できます。

よって「各行をデリファレンスして出力」なら
for $aref (@newtable){
print @{$aref} ;
}
です。

ただし、全てが1行に連結されて出力されます。
ですが、それはデリファレンスとはまったく関係無い話なので、今回の回答として不適切になります。
    • good
    • 0
この回答へのお礼

分かりやすい説明、有難う御座います。
print @{$aref} <--これだけで十分です。百聞は一見に如かずです。

これで、配列のリファレンスとデリファレンスの使い方は分かりました
が。肝心のクロス集計に関してはどうやら作者の舌足らずな所が有って
これでは上手く動作はしない様です。

説明ではこれ以上の記述は無い様なので。矢張りここでは自作が良い様
です。問題は、ヘッディングでの最後の部分が欠落しています。また、
ここでは集計の方法が無条件に合計となっているのも問題です。

この辺も柔軟性が欲しい所ですが。取り逢えず出来ない事が分かっただ
けでも良いです。矢張り、最初考えていた様に自作するしか無いみたい
です。

有難う御座いました。

お礼日時:2016/08/06 20:30

> 最後のprint文の出カ結果は下記となりエラーです。



エラーではありません。
書いた通りの正しい動作です。


ARRAY(0x6d2f88)ARRAY(0x6d2b50) は リストをそのままprintしたために各要素「ARRAY(0x6d2f88)」 と「 ARRAY(0x6d2b50) 」が連結されて出力されてしまったものです。
@newtable=(
 ARRAYへのリファレンス(0x6d2f88) ,
 ARRAYへのリファレンス(0x6d2b50)
);

これは、 @table と同じ構造です。

$newtable[0] 等と個々の要素を取り出せば、それはリファレンスになっています。
その中身が必要なら、デリファレンスします。

http://perldoc.jp/docs/perl/5.20.1/perlref.pod
http://perldoc.jp/docs/perl/5.22.1/perlreftut.pod
    • good
    • 0
この回答へのお礼

有難う御座います。

ここではこの場合の正しく動くコードを例示願います。
言われている事はその通りだと思いますが。
具体的に実際に動くコードを例示して貰わないと
私の理解も出来ません。

宜しく、お願いします。

お礼日時:2016/08/06 16:26

CPANで調べると


http://search.cpan.org/search?query=cross+tabula …
と出ます。いずれも使ったことないので詳細はわかりません。
    • good
    • 0
この回答へのお礼

検索するとdata::pivotと言うモジュールが有ったのでサンプルを動か
そうとしたのですが。上手く行きません。多分にこれは出カはリファレ
ンスだと思いますが。

私はこのperlのリファレンスとでリファレンスとの関係が良く理解をし
ていません。サンプルのソースは下記です。

use Data::Pivot;
@table = ( [ 'aaa', 'bbb', 'ccc', '01', 12.2, 1.4, 5.9 ],
[ 'aaa', 'bbb', 'ccc', '02', 134.5, 12, 12.3 ],
[ 'aaa', 'bbb', 'ccc', '03', 1.25, 30, 123.45 ],
[ 'xxx', 'yyy', 'zzz', '02', 22.22, 7.8, 8.88 ],
[ 'xxx', 'yyy', 'zzz', '03', 111.11, 100, 42 ]
);

@headings = ('Some', 'Fix', 'Columns', 'Pivot_Col', 'Num_Val_1', 'Num_Val_2', 'Num_Val_3');

$pivot_col_no=3;

@newtable = pivot(table => \@table,
headings => \@headings,
pivot_column => $pivot_col_no,
layout => 'vertical',
row_sum => 'Sum',
row_titles => 1,
format => '%5.2f',
);

print @newtable;

ここで最後のprint文を除いてperl -cw 01.plでは問題は有りません。
但し、最後のprint文の出カ結果は下記となりエラーです。

ARRAY(0x6d2f88)ARRAY(0x6d2b50)

最後のprint文をでリファレンスをして出カをしたいのですが分かりま
せん。その部分の正しいコーディングを宜しくお願いします。

お礼日時:2016/08/06 13:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!