App-Bin4TSV
view release on metacpan or search on metacpan
scripts/colchop view on Meta::CPAN
#!/usr/bin/perl
use 5.014 ; use warnings ;
use Getopt::Std ; getopts ':.:/:!bg:h:uvwy:' => \my%o ; # 5.014 ã§ä½åº¦ãå®è¡æ¸ã¿
use Encode qw[ decode_utf8 ] ;
use List::Util qw [ any ] ;
eval 'use Text::VisualWidth::UTF8 qw[trim width]; 1' or die 'Be Text::VisualWidth::UTF8 installed.' if $o{v} ;
* trim = * Text::VisualWidth::UTF8::trim if $o{v} ; # åã«è¦åãåé¿ããããã«ã次è¡ä»¥å¤ã«ãã®è¡ãæ¿å
¥ã
* trim = $o{v} ? * Text::VisualWidth::UTF8::trim : sub { substr ( $_[0], 0 , $_[1] ) } ;
$| = 1 if $o{'!'} ; # ãªã¼ããã©ãã·ã¥ã®è¨å®ã<- -- å¿
è¦ã?
$o{h} //= 0 ; # å·¦ããä½åã¯æãå ããªãããæ´ããã
# åºåããæååã®é·ãã®æå¤§å¤ã¨æãè¿ãæ°ã®æå¤§å¤
my ($tlen, $tmax) = do { ($o{g}//='') =~ m/(\d*)\D?(\d*)/ ; ( $1 || 6 , $2 // 2 || "Inf") } ;
#say STDERR $tlen,' ', $tmax;
my $existNext = $o{'.'} // '.' ; # ã¾ã表示ãè¶³ããªãæã«ãã»ã«æ«ã«æ¿å
¥ããæåå
my $iosep = $o{'/'} // "\t" ; # å
¥åºåã®åºåãæå
binmode STDIN, ":encoding(utf8)" if ! $o{w} && $o{u} ; # binmode ã®æå®ã¯ã substr颿°ã«å½±é¿ããã
binmode STDIN, ":encoding(cp932)" if $o{w} ; # <-- - SJIS <<? "cp932" çµµæåãèããã
binmode STDOUT,":encoding(utf8)" if $o{u} || $o{w} ; #$/ = "\r\n" if $o{W} ;
& main ;
exit ;
sub aLinOut ( @ ) {
my @cells ;
for ( 1 .. $#_ ) { # åãã¹ã®æååã«ã¤ãã¦.. ( $_ ã¯1å§ã¾ãã§å·¦ããä½çªç®ãã表ã )
push @cells , undef and next if ! defined $_[$_] ; # æªå®ç¾©ãªãæªå®ç¾©ã¨ãã¦
my $str = $_ <= $o{h} ? $_[$_] : trim ( $_[$_] , $tlen ) ; # -h ã§å·¦ããããã¤ãã®åã¯ä¿è·ããæå®ãããã°ããã®ããã«ã㦠..
$_[$_] =~ s/^\Q$str\E// ;
$_[$_] = undef if $_[$_] =~ m/^$/ ;
push @cells , $str . ( defined $_[$_] ? $existNext : '' ) ;
}
unshift @cells , "$_[0]" if defined $_[0] ;
say join $iosep , map { $_ // '' } @cells ;
}
sub main ( ) {
while ( <> ) {
chomp ;
my $lc = "$.:" if $o{':'} ; # -: æå®ã§ãè¡çªå·ã1åã ã表示 LineCount
my @F = split /$iosep/o , $_ , -1 ;
#for ( my $t=0 ; ++$t <= $tmax ; ) { aLinOut ($lc, @F) ; $lc = '' ; last if ! any { defined $_ } @F }
for ( my $t=0 ; ++$t <= $tmax ; ) { aLinOut $lc, @F ; last if ! any { defined $_ } @F }
}
}
## ãã«ãã®æ±ã
sub VERSION_MESSAGE {}
sub HELP_MESSAGE {
use FindBin qw[ $Script ] ;
$ARGV[1] //= '' ;
open my $FH , '<' , $0 ;
while(<$FH>){
s/\$0/$Script/g ;
print $_ if s/^=head1// .. s/^=cut// and $ARGV[1] =~ /^o(p(t(i(o(ns?)?)?)?)?)?$/i ? m/^\s+\-/ : 1;
}
close $FH ;
exit 0 ;
}
=encoding utf8
=head1
$0 -bg (ãã¤ãæ°)(,æãè¿ãã®æå¤§å¤)
$0 -ug (UTF-8ã®æåæ°)(,æãè¿ãã®æå¤§å¤)
$0 -vg (åè§æåå¹
)(,æãè¿ãã®æå¤§å¤)
ã¿ãæåãªã©ã§åºåãããåãã£ã¼ã«ãããæå®ãããå¹
ã®ã¿è¡¨ç¤ºããã
Unix/Linux ã®ãtabs ã³ãã³ãã§è¡¨ç¤ºè¨å®ãå¤ããªããè¦ãã®ãè¯ãã
ãã¥ã¼ã¢less ãèµ·åä¸ã« -x N(æ°) ã¨å
¥åãã¦Enter ãããã®è¯ãã
ãªãã·ã§ã³ :
-b : ãã¤ãæ°ã§è¨ç®ããã
-u : utf-8 ã¨ã¿ãªãã¦ãé·ããè¨ç®ãããããã§ãªããã°ãåç´ãªãã¤ãé·ã«ãªãã
-v : utf-8 ã®æåå¹
ã§é·ããè¨ç®ãã(åè§ã¯1ãå
¨è§ã¯2)ã(visual-width)
( run in 1.080 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )