1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
<?php
/* tableau de convertion des logins */
$login_converter = array();
$chars = 'abcdefghijklmnopqrstuvwxyz';
for($i = 0; $i < strlen($chars); $i++)
$login_converter['i'.$chars[$i]] = 208 + $i;
/* fonction de préparation des données pour comparaisons */
function prepare_datas($datas, $type)
{
global $login_converter;
$students = array();
// Explode coupe une chaine de caractères en segments
foreach(explode("\r", $datas) as $student)
{
/* saute la première ligne du fichier */
if(strtolower(substr($student, 0, 5)) == 'login')
continue ;
/* extrais les colonnes de la ligne */
list($login, $nom, $prenom, $note_1, $note_2, $note_3, $note_4, $note_5) = explode(';', $student);
/* stocke les données sous une forme exploitable pour les comparaisons */
/* indexe les données sur nom-prenom pour un accès simple lors des comparaisons */
$student_id = strtoupper($nom).'-'.strtoupper($prenom);
$students[$student_id] = array(
'login' => $type == 'other' ? $login_converter[substr($login, 0, 2)].substr($login, 2) : $login,
'nom' => $nom,
'prenom' => $prenom
);
/* stocke les notes en remplaçant les , par des . dans le cas d'apogée (pour comparaison numérique) et en les mettant /20 dans l'autre cas */
for($i = 1; $i < 6; $i++) {
$varname = 'note_'.$i;
$note = $$varname;
$students[$student_id][$varname] = $type == 'other' ? substr($note, 0, -2) / 5 : str_replace(',', '.', $note);
}
}
return $students;
}
/* charge les fichiers */
$students_a = prepare_datas(file_get_contents('testA.csv'), 'apogee');
$students_b = prepare_datas(file_get_contents('testB.csv'), 'other');
/* compare les données et met à jour $a en fonction des comparaisons faites avec $b */
foreach($students_a as $student_id => $student_a)
{
/* si l'élève n'existe pas dans B on saute la ligne */
if(!isset($students_b[$student_id]))
continue;
$student_b = $students_b[$student_id];
/* mets à jour le login le cas échéant */
if($student_b['login'] != $student_a['login'])
$student_a['login'] = $student_b['login'];
/* mets à jour les notes le cas échéant */
for($i = 1; $i < 6; $i++) {
if($student_b['note_'.$i] > $student_a['note_'.$i])
$student_a['note_'.$i] = $student_b['note_'.$i];
/* remet une , à la place du . */
$student_a['note_'.$i] = str_replace('.', ',', $student_a['note_'.$i]);
}
/* met à jour l'étudiant dans le tableau d'origine */
$students_a[$student_id] = $student_a;
}
/* enregistre les données à jour */
// Fichier C avec absence des étudiants du B
$fp = fopen('testC.csv', 'w');
fputcsv($fp, array('Login','Nom','Prenom','Note','Note','Note','Note','Note'),';','"');
foreach ($students_a as $student) {
fputcsv($fp, $student, ';', '"');
}
fclose($fp);
/* Gestion des étudiants absents de A */
$students_d = array();
foreach($students_b as $student_id =>$student_b)
{
/* si l'elève n'existe pas dans A on l'ajoute dans D */
if(!isset($students_a[$student_id]))
$students_d[] = $student_b;
for($i = 1; $i < 6; $i++) {
$student_b['note_'.$i] = str_replace('.', ',', $student_b['note_'.$i]);
}
}
// Fichier D avec présence des étudiants du B
$handle = fopen('testD.csv', 'w');
fputcsv($handle, array('Login','Nom','Prenom','Note','Note','Note','Note','Note'),';','"');
foreach ($students_d as $student) {
fputcsv($handle, $student, ';', '"');
}
fclose($handle);
?> |
Partager