App-colsummary

 view release on metacpan or  search on metacpan

colsummary  view on Meta::CPAN

6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
use 5.014 ;
use strict ;
use warnings ; # also confirmed on 5.011 5.014 5.018 
use autodie qw [ open ] ;
use Encode qw[ decode_utf8 encode_utf8 ] ;
use FindBin qw [ $Script ] ;
use Getopt::Std ; getopts 'R:c:g:i:jm:r:su:v:z=!@:#:0:2:' => \my %o ;
use List::Util qw/max min maxstr minstr/ ;
use POSIX qw/strtod/ ; # # 平均値の計算に用いる str to double.
use Scalar::Util qw/looks_like_number/;
use Term::ANSIColor qw/:constants color/ ; $Term::ANSIColor::AUTORESET = 1 ;
use Time::HiRes qw [ gettimeofday tv_interval ] ; my ${ dt_start } = [ gettimeofday ] ;
 
my $sdt = sprintf '%04d-%02d-%02d %02d:%02d:%02d', do{my @t= @{[localtime]}[5,4,3,2,1,0]; $t[0]+=1900; $t[1]++; @t } ;
eval "use PerlIO::gzip;1" or die "PerlIO::gzip cannot be loaded, so -z does not work. ($Script, $sdt)\n" if $o{z} ;
 
sub AlignOut ( @ ) ; # 出力 ; eachFileでもColstatでも使う。
sub ColStat ( $$ ) ; # $colvals->[列番] と 列名を 渡す。そして、その中身が表示される。; eachFileでもColstatでも使う。
sub d3 ($) { $_[0] =~ s/(?<=\d)(?=(\d\d\d)+($|\D))/,/gr } ; # 数を3桁区切りに変換する。
sub eachFile ( $ ) ;

colsummary  view on Meta::CPAN

214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
    last if ( $c >= $o{g} ) ;
  }
  return @ostr ;
} ;
 
# 配列参照から、最小値最大値を取り出す
sub minmaxstr ( $ ) {
  * uniq = sub (@) {my %hh ;map { $hh{$_}++ != 0 ? () : $_ } @_ } ;
  sub part ( &@ ) ;
  sub RangeStr ( $$ ) ;
  my @gps = part {/^0*$/ ? 0 : looks_like_number $_ ? 1 : 2}  @{ $_[0] } ;
  my @ostr ;
  push @ostr, join $o{r}, sort  & uniq ( @{$gps[0]} ) if $gps[0] ;  # 空文字列があるときの処理 
  push @ostr, RangeStr( min(@{$gps[1]}), max(@{$gps[1]}) ) if $gps[1] ;  # 数に見える値があるときの処理
  push @ostr, RangeStr( minstr(@{$gps[2]}), maxstr(@{$gps[2]}) ) if $gps[2] ; # 数に見えない値があるときの処理
  return @ostr;
} ;
sub part ( &@ ) { my ($cd, @l) = @_ ; my @p ; push @{ $p[ $cd->($_) ] } , $_ for @l ; @p } ;  # この関数は List::MoreUtils
sub RangeStr ( $$ ) { $_[0] eq $_[1] ? "$_[0]" : "$_[0]$o{r}$_[1]" } # 2個の数or文字列から 1..2のような文字列を生成



( run in 0.310 second using v1.01-cache-2.11-cpan-4e96b696675 )