[Koha-patches] [PATCH] [SIGNED-OFF] Bug 6727 - Change on exporting and importing csv to deal with spurious CR/LF
Nicole C. Engard
nengard at bywatersolutions.com
Sun Aug 21 11:47:32 CEST 2011
From: Salvador Zaragoza Rubio <salvazm at masmedios.com>
Function _export_table_csv modified to remove CR/LF in the data
from the database to built a correct csv file.
Function _import_table_csv modified to deal with CR/LF in the data
field. When a line is found with an unproper end (a data field has not
end quote), it's concatenated to a temporary buffer until the next
line ends ok and then it's proccessed.
Signed-off-by: Nicole C. Engard <nengard at bywatersolutions.com>
---
C4/ImportExportFramework.pm | 13 +++++++++++++
1 files changed, 13 insertions(+), 0 deletions(-)
diff --git a/C4/ImportExportFramework.pm b/C4/ImportExportFramework.pm
index 7f29e51..e518771 100755
--- a/C4/ImportExportFramework.pm
+++ b/C4/ImportExportFramework.pm
@@ -322,6 +322,7 @@ sub _export_table_csv
my $data;
while (my $hashRef = $sth->fetchrow_hashref) {
for (@fields) {
+ $hashRef->{$_} =~ s/[\r\n]//g;
$$strCSV .= '"' . $hashRef->{$_} . '",';
}
chop $$strCSV;
@@ -1133,6 +1134,7 @@ sub _import_table_csv
my ($dbh, $table, $frameworkcode, $dom, $PKArray, $fields2Delete, $fields) = @_;
my $row = '';
+ my $partialRow = '';
my $numFields = @$fields;
my $fieldsNameRead = 0;
my @arrData;
@@ -1145,6 +1147,17 @@ sub _import_table_csv
my $pos = 0;
while (<$dom>) {
$row = $_;
+ # Check whether the line has an unfinished field, i.e., a field with CR/LF in its data
+ if ($row =~ /,"[^"]*[\r\n]+$/ || $row =~ /^[^"]+[\r\n]+$/) {
+ $row =~ s/[\r\n]+$//;
+ $partialRow .= $row;
+ next;
+ }
+ if ($partialRow) {
+ $row = $partialRow . $row;
+ $partialRow = '';
+ }
+ # Line OK, process it
if ($row =~ /(?:".*?",?)+/) {
@arrData = split('","', $row);
$arrData[0] = substr($arrData[0], 1) if ($arrData[0] =~ /^"/);
--
1.7.2.3
More information about the Koha-patches
mailing list