X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=www%2Fecrire%2Finc%2Fcsv.php;h=0abfa8ec36ab78f5336587fb437f16a6f4e9698f;hb=9a3d4353e89ac94da6b21cff26e28fa704369cb2;hp=30f314925f2b8c9bf677abc41b0523cf336e5bb3;hpb=9d7ff6aab72d820f145250ccc1f182716e1f6bff;p=lhc%2Fweb%2Fwww.git diff --git a/www/ecrire/inc/csv.php b/www/ecrire/inc/csv.php index 30f31492..0abfa8ec 100644 --- a/www/ecrire/inc/csv.php +++ b/www/ecrire/inc/csv.php @@ -3,7 +3,7 @@ /***************************************************************************\ * SPIP, Systeme de publication pour l'internet * * * - * Copyright (c) 2001-2017 * + * Copyright (c) 2001-2019 * * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * * * * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * @@ -32,6 +32,8 @@ if (!defined('_ECRIRE_INC_VERSION')) { * - Titre du tableau (si une seule colonne) **/ function analyse_csv($t) { + + // Quel est le séparateur ? $virg = substr_count($t, ','); $pvirg = substr_count($t, ';'); $tab = substr_count($t, "\t"); @@ -43,15 +45,14 @@ function analyse_csv($t) { $hs = ';'; $virg = $pvirg; } - if ($tab > $virg) { + // un certain nombre de tab => le séparateur est tab + if ($tab > $virg / 10) { $sep = "\t"; $hs = "\t"; } - - $t = preg_replace('/\r?\n/', "\n", - preg_replace('/[\r\n]+/', "\n", $t)); + // un separateur suivi de 3 guillemets attention ! - // attention au ; suceptible d'etre confondu avec un separateur + // attention au ; ou , suceptible d'etre confondu avec un separateur // on substitue un # et on remplacera a la fin $t = preg_replace("/([\n$sep])\"\"\"/", '\\1""#', $t); $t = str_replace('""', '"#', $t); @@ -59,10 +60,14 @@ function analyse_csv($t) { foreach ($r[0] as $cell) { $t = str_replace($cell, str_replace($sep, $hs, - str_replace("\n", "
", + str_replace("\n", "``**``", // échapper les saut de lignes, on les remettra après. substr($cell, 1, -1))), $t); } + + $t = preg_replace('/\r?\n/', "\n", + preg_replace('/[\r\n]+/', "\n", $t)); + list($entete, $corps) = explode("\n", $t, 2); $caption = ''; // sauter la ligne de tete formee seulement de separateurs @@ -121,10 +126,12 @@ function analyse_csv($t) { $lignes[$k] = substr($v, 0, -1); } } - + foreach ($lignes as &$l) { + $l = str_replace('"#','"',$l); + $l = str_replace('``**``',"\n",$l); $l = explode($sep, $l); } - + return array(explode($sep, $entete), $lignes, $caption); }