# ReadData ($filename) returns ar_data sub ReadData ($$) { my ($self, $filename) = @_; my $ar_returnvalue = []; if (!-e "$filename") { Carp::carp("File [$filename] does not exist"); return undef; } open (FLATFILE, '<', $filename) or Carp::croak("Cannot open file [$filename]"); while () { chomp; push (@{$ar_returnvalue}, Interfaces::FlatFile::ReadRecord($self, $_)); } close (FLATFILE); return $ar_returnvalue; } ## end sub ReadData ($$) sub ReadRecord ($$) { my ($self, $textinput) = @_; my $hr_returnvalue = {}; my $CurrentColumnName; for (0 .. $#{$self->columns}) { $CurrentColumnName = $self->columns->[$_]; if (!(defined $self->flatfield_start->[$_] and defined $self->flatfield_length->[$_])) { # Field is missing interface_start, interface_length or both, skip it. next; } $hr_returnvalue->{$CurrentColumnName} = substr ($textinput, $self->flatfield_start->[$_], $self->flatfield_length->[$_]); $hr_returnvalue->{$CurrentColumnName} =~ s/^\s*(.*?)\s*$/$1/; # Trim whitespace # Fill empty fields with that field's default value, if such a value is defined. if ($hr_returnvalue->{$CurrentColumnName} eq "") { if (defined $self->standaard->[$_]) { if ($self->datatype->[$_] =~ /^(?:CHAR|VARCHAR|DATE|TIME|DATETIME)$/) { $hr_returnvalue->{$CurrentColumnName} = sprintf ("%s", $self->standaard->[$_]); } else { $hr_returnvalue->{$CurrentColumnName} = $self->standaard->[$_]; } } else { # Remove empty field delete $hr_returnvalue->{$CurrentColumnName}; } } if ($self->datatype->[$_] =~ /^(?:TINYINT|MEDIUMINT|SMALLINT|INT|INTEGER|BIGINT|FLOAT|DOUBLE)$/) { $hr_returnvalue->{$CurrentColumnName} *= 1;# Multiply by 1 to create a numeric value. } # Decimal-correction if ($self->decimals->[$_] > 0 and defined $hr_returnvalue->{$CurrentColumnName}) { $hr_returnvalue->{$CurrentColumnName} /= 10**$self->decimals->[$_]; } } ## end for (0 .. $#{$self->columns... return $hr_returnvalue; } ## end sub ReadRecord ($$) #### has 'columns' => (is => 'rw', isa => 'ArrayRef[Str]', lazy_build => 1,); has 'datatype' => (is => 'rw', isa => 'ArrayRef[Str]', lazy_build => 1,); has 'decimals' => (is => 'rw', isa => 'ArrayRef[Maybe[Int]]', lazy_build => 1,); has 'default' => (is => 'rw', isa => 'ArrayRef[Maybe[Value]]', lazy_build => 1,); has 'flatfield_start' => (is => 'rw', isa => 'ArrayRef[Maybe[Int]]', lazy_build => 1,); has 'flatfield_length' => (is => 'rw', isa => 'ArrayRef[Maybe[Int]]', lazy_build => 1,);