[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