sub csv2txt {
my $sep = shift;
my $noheader = shift;
- my @len = ();
my @lines = ();
my $l;
my @F = split($sep,$_);
for (my $i=0;$i<@F;$i++) {
- #$F[$i] = '' unless defined $F[$i];
$F[$i] = Encode::decode_utf8($F[$i]);
-
- #$len[$i] = $l if @len and ( $l = length($F[$i]) ) >= $len[$i];
- $len[$i] = length($F[$i]) unless defined $len[$i];
- $len[$i] = $l if ( $l = length($F[$i]) ) >= $len[$i];
- #$len[$i] = (@len>0 and ( $l = length($F[$i]) ) >= $len[$i]) ? $l : length($F[$i]);
}
push @lines, [@F];
#
binmode( STDOUT, "utf8:" );
+ csv2txt_next:
+
+ my @len = ();
+ for (@lines) {
+ my @F = @$_;
+ for (my $i=0;$i<@F;$i++) {
+ $len[$i] = length($F[$i]) unless defined $len[$i];
+ $len[$i] = $l if ( $l = length($F[$i]) ) >= $len[$i];
+ }
+ }
+#die map { join(' | ',@$_)."\n" } @lines;
my $i = 0;
my $t = -1;
my $format = "| ".join(" | ",map {$t+=$_+3; "\%-".$_."s"} @len)." |".chr(10);
print $sep_line;
+ sub csv_end {
+ print $sep_line if $tot;
+ print "$tot Records\n";
+ }
+
while ($_ = shift @lines) {
- #warn $format,scalar(@$_);
- #warn ">>$format: ".$_->[0];
- #warn "<<$format>>";
- #next unless @$_;
+ if ($_->[0] =~ s/^\r// and $i) {
+ csv_end();
+ print "\n";
+ push @lines,$_;
+ goto csv2txt_next;
+ }
printf $format,@$_;
- #printf("%s\n",join(' ',@$_));
print $sep_line if !$noheader and !$i++;
}
- print $sep_line if $tot;
- print "$tot Records\n";
- #close STDOUT; close STDERR;
- #close STDIN;
+ csv_end();
exit;
}