Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision e95294b5

Von Bernd Bleßmann vor etwa 11 Jahren hinzugefügt

  • ID e95294b56b3e6b51c96f35add267b4dc58fe47d7
  • Vorgänger 01a4e61c
  • Nachfolger 3250ebcf

Csv-Helper lässt header als einfaches Arrayref bei Nicht-Multiplex-Daten zu.

Unterschiede anzeigen:

SL/Controller/CsvImport/Base.pm
return if ( !$self->csv->header || $self->csv->errors );
my $headers = { headers => [ grep { $profile->{$_} } @{ $self->csv->header->[0] } ] };
my $headers = { headers => [ grep { $profile->{$_} } @{ $self->csv->header } ] };
$headers->{methods} = [ map { $profile->{$_} } @{ $headers->{headers} } ];
$headers->{used} = { map { ($_ => 1) } @{ $headers->{headers} } };
$self->controller->headers($headers);
SL/Helper/Csv.pm
0,
]) unless $h;
push @{ $header }, $h;
if ($self->is_multiplexed) {
push @{ $header }, $h;
} else {
$header = $h;
}
}
}
......
# data with a discouraged but valid byte order mark
# if not removed, the first header field will not be recognized
if ($header) {
my $h = $header->[0];
my $h = ($self->is_multiplexed)? $header->[0] : $header;
if ($h && $h->[0] && $self->encoding =~ /utf-?8/i) {
$h->[0] =~ s/^\x{FEFF}//;
}
}
# check, if all header fields are parsed well
return unless $header && all { $_ } @$header;
if ($self->is_multiplexed) {
return unless $header && all { $_ } @$header;
} else {
return unless $header;
}
# Special case: human stupidity
# people insist that case sensitivity doesn't exist and try to enter all
......
if ($self->case_insensitive_header) {
die 'case_insensitive_header is only possible with profile' unless $self->profile;
if ($header) {
my $p_num = 0;
foreach my $h (@{ $header }) {
my $h_aref = ($self->is_multiplexed)? $header : [ $header ];
my $p_num = 0;
foreach my $h (@{ $h_aref }) {
my @names = (
keys %{ $self->profile->[$p_num]->{profile} || {} },
);
......
if ($self->is_multiplexed) {
return $self->_row_header->{$row->[0]}
} else {
return $self->header->[0];
return $self->header;
}
}
......
sep_char => ',', # default ';'
quote_char => '\'', # default '"'
escape_char => '"', # default '"'
header => [ [qw(id text sellprice word)] ], # see later
header => [ qw(id text sellprice word) ], # see later
profile => [ { profile => { sellprice => 'sellprice_as_number'},
class => 'SL::DB::Part' } ],
);
......
=item C<header> \@HEADERS
If given, it contains an ARRAYREF for each different class type (i.e. one
ARRAYREF if the data is only of one class type). These ARRAYREFS are the header
fields which are an array of columns. In this case the first lines are not used
as a header. Empty header fields will be ignored in objects.
If given, it contains an ARRAY of the header fields for not multiplexed data.
Or an ARRAYREF for each different class type for multiplexed data. These
ARRAYREFS are the header fields which are an array of columns. In this case
the first lines are not used as a header. Empty header fields will be ignored
in objects.
If not given, headers are taken from the first n lines of data, where n is the
number of different class types.
......
Examples:
classic data of one type:
[ [ 'name', 'street', 'zipcode', 'city' ] ]
[ 'name', 'street', 'zipcode', 'city' ]
multiplexed data with two different types
[ [ 'ordernumber', 'customer', 'transdate' ], [ 'partnumber', 'qty', 'sellprice' ] ]
SL/Helper/Csv/Dispatcher.pm
my @specs;
my $csv_profile = $self->_csv->profile;
my $h_aref = ($self->_csv->is_multiplexed)? $self->_csv->header : [ $self->_csv->header ];
my $i = 0;
foreach my $header (@{ $self->_csv->header }) {
foreach my $header (@{ $h_aref }) {
my $spec = $self->_parse_profile(profile => $csv_profile->[$i]->{profile},
class => $csv_profile->[$i]->{class},
header => $header);
t/helper/csv.t
my $csv = SL::Helper::Csv->new(
file => \"Kaffee\n", # " # make emacs happy
header => [[ 'description' ]],
header => [ 'description' ],
profile => [{ class => 'SL::DB::Part', }],
);
......
$csv = SL::Helper::Csv->new(
file => \"Kaffee;0.12;12,2;1,5234\n", # " # make emacs happy
header => [[ 'description', 'sellprice', 'lastcost_as_number', 'listprice' ]],
header => [ 'description', 'sellprice', 'lastcost_as_number', 'listprice' ],
profile => [{profile => { listprice => 'listprice_as_number' },
class => 'SL::DB::Part',}],
);
......
$csv = SL::Helper::Csv->new(
file => \"Kaffee", # " # make emacs happy
header => [[ 'description' ]],
header => [ 'description' ],
profile => [{class => 'SL::DB::Part'}],
);
$csv->parse;
......
$csv = SL::Helper::Csv->new(
file => \"Kaffee", # " # make emacs happy
header => [[ 'Description' ]],
header => [ 'Description' ],
case_insensitive_header => 1,
profile => [{
profile => { description => 'description' },
......
$csv = SL::Helper::Csv->new(
file => \"Kaffee", # " # make emacs happy
header => [[ 'Description' ]],
header => [ 'Description' ],
profile => [{class => 'SL::DB::Part'}],
);
$csv->parse;
......
$csv = SL::Helper::Csv->new(
file => \"Kaffee", # " # make emacs happy
header => [[ 'foo' ]],
header => [ 'foo' ],
profile => [{
profile => { foo => '' },
class => 'SL::DB::Part',
......
$csv = SL::Helper::Csv->new(
file => \"Kaffee", # " # make emacs happy
header => [[ 'foo' ]],
header => [ 'foo' ],
strict_profile => 1,
profile => [{
profile => { foo => '' },
......
$csv = SL::Helper::Csv->new(
file => \"Phil", # " # make emacs happy
header => [[ 'CVAR_grOUnDHog' ]],
header => [ 'CVAR_grOUnDHog' ],
strict_profile => 1,
case_insensitive_header => 1,
profile => [{

Auch abrufbar als: Unified diff