App-DBBrowser
view release on metacpan or search on metacpan
lib/App/DBBrowser/GetContent/Parse.pm view on Meta::CPAN
next COL_WIDTHS;
}
push @values, $field_value;
}
$prompt = 'Remove leading spaces?';
my ( $no, $yes ) = ( '- NO', '- YES' );
$info = $sf->__print_template_info( \@rows, 8 );
# Choose
my $remove_leading_spaces = $tc->choose(
[ undef, $no, $yes ],
{ info => $info, prompt => $prompt, undef => $sf->{i}{_back}, layout => 2 }
);
$ax->print_sql_info( $info );
if ( ! defined $remove_leading_spaces ) {
next COL_WIDTHS;
}
my $template = join( 'x' x $col_sep_w, map { 'A' . $_ } @values );
my $rows_of_cols = [];
if ( ! eval {
seek $fh, 0, 0;
if ( $remove_leading_spaces eq $yes ) {
while ( my $row = <$fh> ) {
push @$rows_of_cols, [ map { s/^\s+//; $_ } unpack( $template, $row ) ];
}
}
else {
while ( my $row = <$fh> ) {
push @$rows_of_cols, [ unpack( $template, $row ) ];
}
}
1 }
) {
$ax->print_error_message( $@ );
@$fields = @$form;
next COL_WIDTHS;
}
$sql->{insert_args} = $rows_of_cols;
return 1;
}
}
}
}
sub parse_with_Spreadsheet_Read {
my ( $sf, $sql, $source, $file_fs ) = @_;
my $tc = Term::Choose->new( { %{$sf->{i}{tc_default}}, clear_screen => 1 } );
$sf->__print_waiting_str;
require Spreadsheet::Read;
my $book = delete $source->{saved_book};
if ( ! defined $book ) {
if ( ! eval {
$book = Spreadsheet::Read::ReadData( $file_fs, cells => 0, attr => 0, rc => 1, strip => 0 );
1 }
) {
die "Spreadsheet::Read: $@";
}
if ( ! defined $book ) {
$tc->choose(
[ 'Press ENTER' ],
{ prompt => 'No Book in ' . decode( 'locale_fs', $file_fs ) . '!' }
);
return;
}
}
my $sheet_count = @$book - 1; # first sheet in $book contains meta info
if ( $sheet_count == 0 ) {
$tc->choose(
[ 'Press ENTER' ],
{ prompt => 'No Sheets in ' . decode( 'locale_fs', $file_fs ) . '!' }
);
return;
}
my $sheet_idx;
if ( $sheet_count == 1 ) {
$sheet_idx = 1;
}
else {
$source->{saved_book} = $book; # save book if more than one sheet
my @sheets = map { '- ' . ( length $book->[$_]{label} ? $book->[$_]{label} : 'sheet_' . $_ ) } 1 .. $#$book;
my @pre = ( undef );
my $menu = [ @pre, @sheets ];
SHEET: while ( 1 ) {
# Choose
my $idx = $tc->choose(
$menu,
{ %{$sf->{i}{lyt_v}}, prompt => 'Choose a sheet', index => 1, default => $source->{old_idx_sheet},
undef => ' <=' }
);
if ( ! defined $idx || ! defined $menu->[$idx] ) {
return;
}
if ( $sf->{o}{G}{menu_memory} ) {
if ( $source->{old_idx_sheet} == $idx && ! $ENV{TC_RESET_AUTO_UP} ) {
$source->{old_idx_sheet} = 0;
next SHEET;
}
$source->{old_idx_sheet} = $idx;
}
$sheet_idx = $idx - @pre + 1;
last SHEET;
}
}
# if ( $book->[$sheet_idx]{maxrow} == 0 ) { # works for some file formats; catch empty sheets later ##
# my $sheet = length $book->[$sheet_idx]{label} ? $book->[$sheet_idx]{label} : 'sheet_' . $_;
# $tc->choose(
# [ 'Press ENTER' ],
# { prompt => $sheet . ': Empty Sheet!' }
# );
# return 1;
# }
$sql->{insert_args} = [ Spreadsheet::Read::rows( $book->[$sheet_idx] ) ];
if ( ! -T $file_fs && length $book->[$sheet_idx]{label} ) {
$source->{sheet_name} = $book->[$sheet_idx]{label};
}
return 1;
}
1;
__END__
( run in 0.583 second using v1.01-cache-2.11-cpan-ceb78f64989 )