App-Bin4TSV

 view release on metacpan or  search on metacpan

scripts/csel  view on Meta::CPAN

my $split_limit = $isep eq '' ? 0 : -1 ; # split で使う。split//はLIMIT=0にしないと、結果に空文字列の値が最後に生じる
my $osep = $isep eq '' && $o{n} ? ' ' : $isep ; # 出力の区切り子


& init ; # オプションについての処理 
& main ;  # メインの処理  printColsMain
exit 0 ;

#  初期化処理の為の展開の処理

sub expand ( $ ) { # まず コンマで分割, # 次に .. を展開する。 # 最後に正の数は 1を引く。
  #print BRIGHT_BLUE Dumper ["cNP=",%colNamePos] ; 
  return () if ! defined $_[0] ;
  my @gr = split /,/ , $_[0]  ; # grain 穀物の粒のつもり。expandedも考えたが、スペル長過ぎ。
  my $l = scalar @gr ; 
  for ( reverse 0 .. $#gr ) { 
    if ( $gr [ $_ ] =~ m|(.+)\.\.(.+)| ) {  # *末尾* から数字を展開する。
      my ($c1,$c2) = ($1,$2) ; 
      if ( $o{'='} ) { $c1 = $colNamePos { $c1 } ; $c2 = $colNamePos { $c2 } } #; print "\$c1=$c1, \$c2=$c2\n" } ;
      splice @gr , $_ , 1 , ( $c1 <= $c2 ? $c1 .. $c2 : reverse $c2 .. $c1 ) ;  
    } else  { 
      $gr[ $_ ] = $colNamePos { $gr[ $_ ] } if $o{'='} ;
    }
  }

scripts/csel  view on Meta::CPAN

# main 
sub main { 

  binmode STDOUT ,":utf8" if $isep eq ''  ; # 文字単位で処理する場合、utf8としての扱いをする。
  # 一行目かつ -= が指定された場合の処理
  if ( $o{'='} ) { 
      $_ = <> ; 
      chomp ;  
      my $c = 0 ;
      $colNamePos { $_ } = ++ $c  for split /$isep/ , $_ , $split_limit ; # <-- 分割文字列に気をつけたい
      $cream{ $_ } = [ expand $o{$_} ] for qw/p d h t/ ;    
      line ;  # <-- - 
  }
  else { 
    $cream{ $_ } = [ expand $o{$_} ] for qw/p d h t/ ;    
  }
  
  #print BRIGHT_GREEN Dumper [%colNamePos] ; 
  # 引き続く処理。-=が無い場合には、ここらか始まる。
  while ( <> ) {
    line 
  } ;

}



( run in 1.594 second using v1.01-cache-2.11-cpan-97f6503c9c8 )