Fichier CSV : Colonnes qui disparaissent
Posté : 18 juin 2015, 15:11
Bonjour à tous,
Je travaille avec deux fichiers A.csv et B.csv suivants :
Fichier A :
Fichier B :
Je dois comparer les deux fichiers, modifier la valeur du login A selon le login B
ainsi que définir la meilleure note dans le fichier A :
par exemple si la note dans A.csv est de 02/20 et dans B.csv 18/20
on écrase la valeur de A.
A aura donc une note de 18/20
A l'inverse si A = 15/20 et B = 04/20
A garde la note de 15/20
Cependant lorsque je lance le script le contenu est supprimé :
La suppression parait "aléatoire" :
La colonne "Nom" est entierement supprimée
Les valeurs des colonnes "Prenom", "Note" et "Bis" aussi.
Voici mon code :
Je travaille avec deux fichiers A.csv et B.csv suivants :
Fichier A :
Code : Tout sélectionner
Login;Nom;Prenom;Note;Bis
ia123;Turquier;Simon;50;50
if456;Frot;Anthony;20;99
ic789;Lagalis;Roman;99;13
Code : Tout sélectionner
Login;Nom;Prenom;Note;Bis
ia123;Turquier;Simon;50;50
if456;Frot;Anthony;2;05
ic789;Lagalis;Roman;99;11
ainsi que définir la meilleure note dans le fichier A :
par exemple si la note dans A.csv est de 02/20 et dans B.csv 18/20
on écrase la valeur de A.
A aura donc une note de 18/20
A l'inverse si A = 15/20 et B = 04/20
A garde la note de 15/20
Cependant lorsque je lance le script le contenu est supprimé :
Code : Tout sélectionner
Login;;Prenom;Note;Bis
208123;;;;
213456;;;;
210789;;;;
La colonne "Nom" est entierement supprimée
Les valeurs des colonnes "Prenom", "Note" et "Bis" aussi.
Voici mon code :
Code : Tout sélectionner
$modifId = array(
'ia'=>208,
'ib'=>209,
'ic'=>210,
'id'=>211,
'ie'=>212,
'if'=>213,
'ig'=>214,
'ih'=>215,
'ii'=>216,
'ij'=>217,
'ik'=>218,
'il'=>219,
'im'=>220,
'in'=>221,
'io'=>222,
'ip'=>223,
'iq'=>224,
'ir'=>225,
'is'=>226,
'it'=>227,
'iu'=>228,
'iv'=>229,
'iw'=>230,
'ix'=>231,
'iy'=>232,
'iz'=>233);
//Modification de login
$openB=fopen("fichierB.csv", "r");
$openA=fopen("fichierA.csv", "w");
while (($data = fgetcsv($openB, 1000, ";")) !== FALSE)
{
// Impossible de substr un code si c'est le header de la colonne
if($data[0] !== "Login")
{
$codeId = substr($data[0], 0, 2);//On extrait les lettres de la colonne 1
$data[0] = str_replace($codeId, "", $data[0]);//codeId = lettres
$codeId = $modifId[$codeId];//Lettres transformées en nombres
}
//On crée un array composé du code transformé + data
$login = array($codeId . $data[0]);
fputcsv($openA, $login, ";", "'");
}
fclose($openA);
fclose($openB);
//Comparaison des notes A et B
$openB = fopen("fichierB.csv", "r");
while (($data = fgetcsv($openB, 1000, ";")) !== FALSE)
{
$notesA[$data[0]] = $data;
}
fclose($openB);
$openA = fopen("fichierA.csv", "r");
while (($data = fgetcsv($openA, 1000, ";")) !== FALSE)
{
// Tant que loginA correspond loginB et nomA correspond nomB
$line[0] = $data[0];
$line[1] = $data[1];
for ($i = 2; $i < 5; $i++)
{
$line[$i] = max($data[$i], $notesA[$data[0]][$i]);
}
$output[] = $line;
}
fclose($openA);
$openA = fopen("fichierA.csv", "w");
foreach ($output as $line)
{
// on réécrit dans A avec les nouvelles valeurs
fputcsv($openA, $line, ";");
}
fclose($openA);