Projet

Général

Profil

Anomalie #4954

Erreur parsing lors de l'import CSV g_eleves_classes echoue installation

Ajouté par Vincent Regnard il y a plus de 10 ans. Mis à jour il y a plus de 10 ans.

Statut:
Résolu
Priorité:
Normal
Assigné à:
Catégorie:
Outils d'initialisation
Version cible:
Début:
26/09/2013
Echéance:
% réalisé:

100%

Temps estimé:
0.10 h
Resolution:
Résolu

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

#1

Mis à jour par Vincent Regnard il y a plus de 10 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)));

#2

Mis à jour par Stéphane Boireau il y a plus de 10 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.

Formats disponibles : Atom PDF