|
Lines 218-224
sub format_title {
Link Here
|
| 218 |
|
218 |
|
| 219 |
=head3 read_file |
219 |
=head3 read_file |
| 220 |
|
220 |
|
| 221 |
Reads a file to provide report headers and lines to be processed |
221 |
Reads a file to provide report headers and lines to be processed. |
|
|
222 |
Automatically detects whether the file is TSV or CSV based on the first line |
| 222 |
|
223 |
|
| 223 |
=cut |
224 |
=cut |
| 224 |
|
225 |
|
|
Lines 226-239
sub read_file {
Link Here
|
| 226 |
my ($file) = @_; |
227 |
my ($file) = @_; |
| 227 |
|
228 |
|
| 228 |
my $file_content = defined( $file->{file_content} ) ? decode_base64( $file->{file_content} ) : ""; |
229 |
my $file_content = defined( $file->{file_content} ) ? decode_base64( $file->{file_content} ) : ""; |
| 229 |
my $delimiter = $file->{filename} =~ /\.tsv$/ ? "\t" : ","; |
230 |
my $delimiter = identify_delimiter($file); |
| 230 |
my $quote_char = $file->{filename} =~ /\.tsv$/ ? "\"" : "\""; |
231 |
|
|
|
232 |
return ( undef, undef, "unknown_delimiter" ) unless $delimiter; |
| 231 |
|
233 |
|
| 232 |
open my $fh, "<", \$file_content or die; |
234 |
open my $fh, "<", \$file_content or die; |
| 233 |
my $csv = Text::CSV_XS->new( |
235 |
my $csv = Text::CSV_XS->new( |
| 234 |
{ |
236 |
{ |
| 235 |
sep_char => $delimiter, |
237 |
sep_char => $delimiter, |
| 236 |
quote_char => $quote_char, |
238 |
quote_char => "\"", |
| 237 |
binary => 1, |
239 |
binary => 1, |
| 238 |
allow_loose_quotes => 1 |
240 |
allow_loose_quotes => 1 |
| 239 |
} |
241 |
} |
|
Lines 251-256
sub read_file {
Link Here
|
| 251 |
return ( $column_headers, $lines, $error ); |
253 |
return ( $column_headers, $lines, $error ); |
| 252 |
} |
254 |
} |
| 253 |
|
255 |
|
|
|
256 |
|
| 257 |
|
| 254 |
=head3 create_title_hash_from_line_data |
258 |
=head3 create_title_hash_from_line_data |
| 255 |
|
259 |
|
| 256 |
Takes a line and creates a hash of the values mapped to the column headings |
260 |
Takes a line and creates a hash of the values mapped to the column headings |
|
Lines 466-469
sub rescue_EBSCO_files {
Link Here
|
| 466 |
return $column_headers; |
470 |
return $column_headers; |
| 467 |
} |
471 |
} |
| 468 |
|
472 |
|
|
|
473 |
=head3 identify_delimiter |
| 474 |
|
| 475 |
Identifies the delimiter used in the KBART file. Checks first for a TSV file as this is what the KBART standard specifies. |
| 476 |
If the TSV file is not detected then it checks for a CSV file. |
| 477 |
Returns the delimiter required to parse the file correctly |
| 478 |
|
| 479 |
=cut |
| 480 |
|
| 481 |
sub identify_delimiter { |
| 482 |
my ($file) = @_; |
| 483 |
|
| 484 |
my $file_content = defined( $file->{file_content} ) ? decode_base64( $file->{file_content} ) : ""; |
| 485 |
open my $tsv_fh, "<", \$file_content or die; |
| 486 |
|
| 487 |
# Check for TSV |
| 488 |
my $tsv = Text::CSV_XS->new( |
| 489 |
{ |
| 490 |
sep_char => "\t", |
| 491 |
quote_char => "\"", |
| 492 |
binary => 1, |
| 493 |
allow_loose_quotes => 1 |
| 494 |
} |
| 495 |
); |
| 496 |
my $check_tsv = $tsv->getline($tsv_fh); |
| 497 |
close($tsv_fh); |
| 498 |
|
| 499 |
#If the sep_char is wrong then it will read the first row as one string |
| 500 |
return "\t" if scalar(@$check_tsv) > 1; |
| 501 |
|
| 502 |
open my $csv_fh, "<", \$file_content or die; |
| 503 |
|
| 504 |
# Check for CSV |
| 505 |
my $csv = Text::CSV_XS->new( |
| 506 |
{ |
| 507 |
sep_char => ",", |
| 508 |
quote_char => "\"", |
| 509 |
binary => 1, |
| 510 |
allow_loose_quotes => 1 |
| 511 |
} |
| 512 |
); |
| 513 |
my $check_csv = $csv->getline($csv_fh); |
| 514 |
close($csv_fh); |
| 515 |
|
| 516 |
return ',' if scalar(@$check_csv) > 1; |
| 517 |
return 0; |
| 518 |
} |
| 519 |
|
| 469 |
1; |
520 |
1; |
| 470 |
- |
|
|