App-Bin4TSV
view release on metacpan or search on metacpan
scripts/csv2tsv view on Meta::CPAN
my @escape ; # ã¨ã¹ã±ã¼ãå¯¾è±¡ã®æåå
unless ($o{Q}) {
push @warnstr , $o{t} if defined $o{t} ;
push @warnstr , $o{n} if defined $o{n} ;
@warnstr = grep { $_ ne '' } @warnstr ;
@escape = map { quotemeta $_ } @warnstr ; # ãã®æç¹ã§ -vã®ãã®ã¯ã¯ãã£ã¦ããªã
push @warnstr , "\t" if $o{v} || ! defined $o{t} ;
push @warnstr , "\n" if $o{v} || ! defined $o{n} ;
}
# å
¥åãèªåããå¦çãã¦åºåã
my $posV = 0 ; # åºåä¸ã®ç¸¦æ¹åã®ä½ç½®ã表ã
while ( my $x = $csv -> getline( *ARGV ) ) { # 次è¡ä»¥ä¸ãèªããã¨â
# *ARGVã¯Old(er) support 㨠perldoc Text::CSV_XSã«è¨è¼ãããå°æ¥ãµãã¼ããããªãããã
# geline ã§ããã¨ã©ã¼ãèµ·ããããªãã ? <--- - -
do { $alarmF = 0 ; alarm 0 } if $alarmF ;
$posV ++ ;
$cols{ @$x } ++ ; # ãã®è¡ã¯ãåãä½åæã£ã¦ãããã®æ°ããï¼å¾ã§ï¼ä½åã®è¡ãä½åã®åãæã£ã¦ãããæ
å ±è¡¨ç¤ºãããããã«ããã
my $posH = 0 ; # åºåä¸ã®ã»ã«ã®æ°´å¹³ä½ç½®ã表ãã
for my $cell ( @$x ) {
$posH ++ ;
warnprint ( $cell , \@warnstr, [ $linepos , $posV , $posH ] ) unless $o{Q} ; # è¦æ³¨ææååã«å¯¾ãã¦ãè¦åã表示ããã
$cell =~ s/(?=$_)/$o{e}/g for @escape ; # ã¨ã¹ã±ã¼ããã /
$cell =~ s/$trans[$_]->[0]/$trans[$_]->[1]/g for 0 .. $#trans ; # -tã¨-nã®å¦çãå ããã
}
# åºåå¦ç
print join ( "\t", @$x ) . "\n" ;
print "\n" if $o{2} ; # # åºååè¡ã®éã«ç©ºè¡ãæ¿å
¥ããå ´åã®å¦ç
$linepos = $. + 1 ; # <- å
¥åã®ä½è¡ç®ãæ¹è¡åºåãã§æ°ãã $. ã« +1 ãã¦ãããtricky!
}
$csv->eof; # <-- - å¿
è¦ã?
& info ( $. , \%cols ) unless $o{Q} ;
return 1 ;
sub info {
my $out1 = qq[[$Script] "$ARGV": $_[0] lines] ;
my $out2 = keys %{ $_[1] } ? "=> columns x rows: " . join " + " , map { "${_} x ${$_[1]}{$_}"} sort {$a<=>$b} keys %{ $_[1] } : '' ;
print STDERR CYAN qq[$out1 $out2 \n] ;
}
sub warnprint {
my $cell = $_[0] ;
my ( $linepos , $posV , $posH ) = @{ $_[2] } ;
for my $seek ( @{ $_[1] } ) {
next unless $cell =~ m/\Q$seek\E/ ;
my $S = do { local $_ = $seek ; s/\n/\\n/g ; s/\t/\\t/g ; $_ } ; #quotemeta $seek ;
my $L = ($linepos == $.) ? $linepos : "$linepos-$." ;
my $C = do { local $_ = $cell ; s/\n/\e[44m\\n\e[40m/gs ; s/\t/\e[44m\\t\e[40m/gs ; "\e[0m\e[4m$_" } ; # èæ¯ãéãããã
my $sout = qq[[$Script] Warning: "$S" detected at "$ARGV": input line $L; output cell (Row: $posV, Col: $posH): ${C}\n] ;
print STDERR BRIGHT_RED $sout ;
}
}
# ã¨ã©ã¼å¦ç (Text::CSV_XS ã®ã¨ã©ã¼å¦ç) , ãã®ããã°ã©ã ã®å¤æ°ã®ä½¿ãæ¹ãçç±ã§ããã®ä½ç½®ã«ENDãç½®ããã
END {
#exit if $o{'~'} ;
exit if ! defined $csv ;
my @tmp = $csv -> error_diag () ; # ($cde, $str, $pos, $rec, $fld) = $csv->error_diag ();
if ( $tmp[0] != 2012 ) { # perldoc Text::CSV_XS ã§ 2012Â ãåç
§ãEOFãæå³ããã
print STDERR BRIGHT_RED join (":",@tmp),"\n" ;
print STDERR ON_BRIGHT_RED BLACK "_ERROR_INPUT at line $.: " ;
#use Data::Dumper ; #print STDERR UNDERLINE Dumper $csv ;
print STDERR UNDERLINE BRIGHT_RED $csv ->{_ERROR_INPUT} ;
exit 1 ;
}
}
}
## ãã«ãã¨ãã¼ã¸ã§ã³æ
å ±
BEGIN {
our $VERSION = 0.56 ;
$Getopt::Std::STANDARD_HELP_VERSION = 1 ;
grep { m/--help/} @ARGV and *VERSION_MESSAGE = sub {} ;
# æå㯠0.21 ãç®å®ã¨ããã
# 1.00 以ä¸ã¨ããå¿
è¦æ¡ä»¶ã¯è±èªçã®ãã«ãããã¡ãã¨åºããã¨ã
# 2.00 以ä¸ã¨ããå¿
è¦æ¡ä»¶ã¯ãã¹ãã³ã¼ããå«ããã¨ã
# 0.51 : è±æããã¥ã¢ã«ãPODå½¢å¼ã«ããã
# 0.52 : revã®æ©è½ãããã°
# 0.53 : ã¨ã¹ã±ã¼ãæåãä½åã«ç¾ãããã°ãè¨æ£ãæ´ã«ãªãã¡ã¯ã¿ãæ´ã«ã·ã§ãã³ã°ã«-Tãå ããã
# 0.54 : revã§2次æ
å ±ãåºãããã«ãããSTDERRã§éASCIIã«å¯¾å¿ã
# 0.55 : CSVã®ãã£ã¼ã«ãã®åºåæåã夿´å¯è½ã¨ãããText::CSV_XSã§ã¨ã©ã¼ãèµ·ããã¨ãã«ãå
¥åè¡ã®å
容ã表示ããããã«ãããããã« -Tã-tã«ãã(perldocãèµ·åã§ããªãã£ããã)ã
# 0.56 : ããã¥ã¢ã«ã®è±èªã®é¨åã2ç®æè¨æ£ã
}
sub HELP_MESSAGE {
use FindBin qw[ $Script $Bin ] ;
sub EnvJ ( ) { $ENV{LANG} =~ m/^ja_JP/ ? 1 : 0 } ; # # ja_JP.UTF-8
sub en( ) { grep ( /^en(g(i(sh?)?)?)?/i , @ARGV ) ? 1 : 0 } # English ã¨ããæååãå
é ãã2æå以ä¸ãå«ãã
sub ja( ) { grep ( /^jp$|^ja(p(a(n?)?)?)?/i , @ARGV ) ? 1 : 0 } # jp ã¾ã㯠japan ã¨ããæååãå
é ãã2æå以ä¸ãå«ãã
sub opt( ) { grep (/^opt(i(o(ns?)?)?)?$/i, @ARGV ) ? 1 : 0 } # options ã¨ããæååãå
é ãã3æå以ä¸å«ããã
sub noPOD ( ) { grep (/^no-?p(od?)?\b/i, @ARGV) ? 1 : 0 } # POD ã使ããªãã¨è¨ãæå®ãããã¦ãããã©ãã
my $jd = "JapaneseManual" ;
my $flagE = ! ja && ( en || ! EnvJ ) ; # è±èªã«ãããã©ããã®ãã©ã°
exec "perldoc $0" if $flagE && ! opt ; #&& ! noPOD ;
$ARGV[1] //= '' ;
open my $FH , '<' , $0 ;
while(<$FH>){
s/\Q'=script='\E/$Script/gi ;
s/\Q'=bin='\E/$Bin/gi ;
if ( s/^=head1\b\s*// .. s/^=cut\b\s*// ) {
if ( s/^=begin\s+$jd\b\s*// .. s/^=end\s+$jd\b\s*// xor $flagE ) {
print $_ if ! opt || m/^\s+\-/ ;
}
}
}
close $FH ;
exit 0 ;
}
=encoding utf8
=head1 NAME
csv2tsv
=head1 VERSION
0.55 (2018-07-09 Mon)
=head1 SYNOPSIS
csv2tsv [B<-t> str] [B<-n> str] [-v] [-Q] [-2] [B<-~>] file
( run in 2.124 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )