App-crosstable

 view release on metacpan or  search on metacpan

crosstable  view on Meta::CPAN

#!/usr/bin/perl
use 5.014 ; use strict ; use warnings ; 
use Scalar::Util qw/looks_like_number/; # 5.7 ~
use Getopt::Std; getopts '::^:~=+:,:@:0:1:R:d:i:qvm:' , \my %o ;
use Term::ANSIColor qw/:constants color/; $Term::ANSIColor::AUTORESET = 1 ;# v5.6 ~ 
#use utf8 ; 
my $isep = $o{i} // "\t" ; # 入力の区切り文字
my $oemp = $o{'0'} // 0 ; # 出力のセルが未定義値の場合に代わりに出力する文字列
my $sec = $o{'@'} // 10 ; # 何秒ごとに処理状態を出力するか。
my $optR0 = defined $o{R} && $o{R} eq 0 ; 
my $addC ; # ある列を加算する場合の列の指定
my $t00 ;  # 表の左上隅に載せる文字列
my %ax2 ; # キーは横軸の項目名となる。

crosstable  view on Meta::CPAN

		showMat( \%Ce , "empties" ) ; # 空文字列がいくつ出現したか
	}

	$SIG{INT} = $IntFirst

	# my %Cv ; for my$i(@a1){for my$j(@a2){$Cv{$i}{$j}=($Cc{$i}{$j}//0)-($Ce{$i}{$j}//0)}}
}


sub StrNumSort ( @ ) {
	+( sort { $a cmp $b } grep { ! looks_like_number ($_) } @_ ) ,
	 ( sort { $a <=> $b } grep {   looks_like_number ($_) } @_ ) ;
}

sub showMat ( $$ ) { 
	my ($C,$h11) = @_ ; # セル, 縦軸, 横軸, 出力表の左上の文字列
	my @a1 = StrNumSort ( keys %{$C} ) ; # 縦軸の各項目名
	my @a2 = StrNumSort ( keys %ax2 ) ; # 横軸の各項目名


    if ( defined $o{':'} ) { 
    	@a1 = () ; # リセット



( run in 0.408 second using v1.01-cache-2.11-cpan-64827b87656 )