/***************************************************************************\
* 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. *
* - 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");
$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);
foreach ($r[0] as $cell) {
$t = str_replace($cell,
str_replace($sep, $hs,
- str_replace("\n", "<br />",
+ 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
$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);
}