From 6b69260fbd75f80b1831341b9bb5b18b54fef56b Mon Sep 17 00:00:00 2001 From: Salvador Zaragoza Rubio Date: Fri, 19 Aug 2011 12:33:05 +0200 Subject: [PATCH] Bug 6727 - Change on exporting and importing csv to deal with spurious CR/LF 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 Signed-off-by: Ian Walls Signed-off-by: Chris Cormack --- C4/ImportExportFramework.pm | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/C4/ImportExportFramework.pm b/C4/ImportExportFramework.pm index 7f29e51fd1..e518771824 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] =~ /^"/); -- 2.39.5