X-Git-Url: https://git.cyclocoop.org/?a=blobdiff_plain;f=www%2Fecrire%2Finc%2Fcsv.php;h=30f314925f2b8c9bf677abc41b0523cf336e5bb3;hb=4f443dce95ff6f8221c189880a70c74ce1c1f238;hp=ae90101685518cf79cd6bcb434cd326ae5f54c8c;hpb=4a628e9b277d3617535f99d663ca79fa2e891177;p=lhc%2Fweb%2Fwww.git
diff --git a/www/ecrire/inc/csv.php b/www/ecrire/inc/csv.php
index ae901016..30f31492 100644
--- a/www/ecrire/inc/csv.php
+++ b/www/ecrire/inc/csv.php
@@ -3,88 +3,128 @@
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
- * Copyright (c) 2001-2016 *
+ * Copyright (c) 2001-2017 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
-if (!defined('_ECRIRE_INC_VERSION')) return;
+/**
+ * Analyse de fichiers CSV
+ *
+ * @package SPIP\Core\CSV
+ */
-function analyse_csv($t)
-{
+if (!defined('_ECRIRE_INC_VERSION')) {
+ return;
+}
+
+/**
+ * Retourne les données d'un texte au format CSV
+ *
+ * @param string $t
+ * Contenu du CSV
+ * @return array
+ * Tableau des données en 3 index :
+ * - Liste des noms des colonnes
+ * - Liste des valeurs de chaque ligne et chaque colonne
+ * - Titre du tableau (si une seule colonne)
+ **/
+function analyse_csv($t) {
$virg = substr_count($t, ',');
$pvirg = substr_count($t, ';');
$tab = substr_count($t, "\t");
- if ($virg > $pvirg)
- { $sep = ','; $hs = ',';}
- else { $sep = ';'; $hs = ';'; $virg = $pvirg;}
- if ($tab > $virg) {$sep = "\t"; $hs = "\t";}
+ if ($virg > $pvirg) {
+ $sep = ',';
+ $hs = ',';
+ } else {
+ $sep = ';';
+ $hs = ';';
+ $virg = $pvirg;
+ }
+ if ($tab > $virg) {
+ $sep = "\t";
+ $hs = "\t";
+ }
$t = preg_replace('/\r?\n/', "\n",
- preg_replace('/[\r\n]+/', "\n", $t));
+ preg_replace('/[\r\n]+/', "\n", $t));
// un separateur suivi de 3 guillemets attention !
// attention au ; 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);
+ $t = preg_replace("/([\n$sep])\"\"\"/", '\\1""#', $t);
+ $t = str_replace('""', '"#', $t);
preg_match_all('/"[^"]*"/', $t, $r);
- foreach($r[0] as $cell)
+ foreach ($r[0] as $cell) {
$t = str_replace($cell,
str_replace($sep, $hs,
str_replace("\n", "
",
- substr($cell,1,-1))),
+ substr($cell, 1, -1))),
$t);
- list($entete, $corps) = explode("\n",$t,2);
+ }
+ list($entete, $corps) = explode("\n", $t, 2);
$caption = '';
// sauter la ligne de tete formee seulement de separateurs
if (substr_count($entete, $sep) == strlen($entete)) {
- list($entete, $corps) = explode("\n",$corps,2);
+ list($entete, $corps) = explode("\n", $corps, 2);
}
// si une seule colonne, en faire le titre
if (preg_match("/^([^$sep]+)$sep+\$/", $entete, $l)) {
- $caption = "\n||" . $l[1] . "|";
- list($entete, $corps) = explode("\n",$corps,2);
+ $caption = "\n||" . $l[1] . "|";
+ list($entete, $corps) = explode("\n", $corps, 2);
}
// si premiere colonne vide, le raccourci doit quand meme produire