Anomalie #4954
Erreur parsing lors de l'import CSV g_eleves_classes echoue installation
100%
Description
Lorsque l'on importe la liste g_eleves_classes, le script ne parse pas convenablement le fichier csv et l'importation échoue. Les classes sont crées avec un underscore final.
L'import de g_eleves_classes.csv
id_interne;nom_court_classe;
2918;TS1
3412;TES2
3470;TS2
crée des classes TS1_ TES2_ TS2_ dans la table classes et après tout va mal lors de l'instalaltion qui échoue !
Le problème se situe lors de l'appel de remplace_accent ligne 288 dans init_csv/eleves_classes.php
$tabligne1=preg_replace("/[^A-Za-z0-9._ \-]/","",trim(remplace_accents($tabligne1)));
il y a un un caractère non visible qui traine en fin de chaine $tabligne1 et qui est converti par remplace_accents() en underscore.
Il faudrait savoir quel est ce caractère (CR ? chr(13)) et comment il arrive là (mon fichier source g_eleves_classes.csv n'a qu'un chr(10)=LF à la fin de chaque ligne).
Eventuellemnt si c'est un CR, il faut soit supprimer CR (chr(13)) à la fin de la chaine lorsque l'on lit $tabligne1, soit ajouter \r chr(13) dans le motif
return preg_replace('#[^a-zA-Z0-9\-\._"\' ;]#', '_', $str);
dans la définition de remplace_accents() dans lib/share.inc.php
Eventuellement pourrait aider, à vérifier: ini_set("auto_detect_line_endings", true) ?
- Pour contourner le problème et réussir à installer, ajouter des délimiteurs point virgule à la fin de chaque ligne du csv comme ci-après: **
id_interne;nom_court_classe;
2918;TS1;
3412;TES2;
3470;TS2;
NB: j'avais eu le même problème l'année passée lors de l'importation des CSV.
Version: GEPI 1.6.1 HEAD
Environnement: Desktop: Linux/Debian Serveur: Apache/php 5.3.3
Mis à jour par Vincent Regnard il y a plus de 11 ans
Le caractère fautif est bien LF chr(10) conservé par fgets.
A mon avis il faut faire un trim avant le explode
$ligne = rtrim(fgets($fp, 4096));
Ou remplacer
$tabligne1=preg_replace("/[^A-Za-z0-9._ \-]/","",trim(remplace_accents($tabligne1)));
par
$tabligne1=preg_replace("/[^A-Za-z0-9._ \-]/","",remplace_accents(rtrim($tabligne1)));
Mis à jour par Stéphane Boireau il y a plus de 11 ans
- Resolution mis à Résolu
- Temps estimé mis à 0.10 h
- % réalisé changé de 0 à 100
- Version cible mis à 1.6.1
- Assigné à mis à Stéphane Boireau
- Statut changé de Nouveau à Résolu
C'est corrigé.
Merci pour le signalement et la proposition de correction.