IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

EDI, CMS, Outils, Scripts et API PHP Discussion :

[CSV] Comparer deux fichiers CSV


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Membre averti
    Homme Profil pro
    BTS SIO SLAM
    Inscrit en
    Mai 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : BTS SIO SLAM

    Informations forums :
    Inscription : Mai 2015
    Messages : 11
    Par défaut [CSV] Comparer deux fichiers CSV
    Bonjour !

    Je souhaiterai comparer deux fichiers CSV et pouvoir mettre à jour un des deux.
    Je m'explique :

    Fichier A :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Nom;Prenom;Note1;Note2;Note3;
    Martin;Jean;;;;
    TomTom;Nana;;;;
    Heartfilia;Lucy;;;;
    Fichier B :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Nom;Prenom;Note1;Note2;Note3;
    Martin;Jean;12;7;15;
    TomTom;Nana;11;5;14;
    Heartfilia;Lucy;3;5;6;
    Et ainsi mettre a jour le fichier A grace aux données du B.

    Je suppose qu'il va falloir recuperer les deux fichiers graces à un fgetcsv mais je ne sais pas trop comment faire.

    Pouvez vous m'aider ?

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu as les mêmes noms dans le fichier A et le fichier B ou il y a des écarts ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Homme Profil pro
    BTS SIO SLAM
    Inscrit en
    Mai 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : BTS SIO SLAM

    Informations forums :
    Inscription : Mai 2015
    Messages : 11
    Par défaut
    Les fichiers ont deux noms différents, "test.csv" et "copie.csv".

    Mais les noms et prenoms présents dans le fichier sont strictement les mêmes.
    Il n'y a que les notes qui importent

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Si tu as un fichier avec tous les noms sans les notes et un fichier avec tous les noms et les notes, quel est l’intérêt de recopier l'un dans l'autre ? Au final tu auras deux fichiers identiques.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre averti
    Homme Profil pro
    BTS SIO SLAM
    Inscrit en
    Mai 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : BTS SIO SLAM

    Informations forums :
    Inscription : Mai 2015
    Messages : 11
    Par défaut
    Pardon pour le multipost (patapé patapé)

    J'aimerai pouvoir ecraser les notes d'un des deux fichiers si la note est supérieure

    Par exemple le fichier A n'a pas de note.
    Le B à un 11/20

    Si on rentre une note de 18 dans le A, le B sera ecrasé et aura aussi un 18/20

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Je résume : on met A à jour avec B pour toutes les valeurs B supérieures à celles existant dans A ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre averti
    Homme Profil pro
    BTS SIO SLAM
    Inscrit en
    Mai 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : BTS SIO SLAM

    Informations forums :
    Inscription : Mai 2015
    Messages : 11
    Par défaut
    Exactement !

    J'ai oublié de spécifier qu'il y a un login unique à chaque personne à l'emplacement zero.
    Je pensais ainsi à qqch comme :

    Si $tab[0] du fichier A == $tab[0] du fichier B

    Alors $tab[4] va etre modifié.
    L'emplacement 4 etant la note

    Mais c'est tres brouillon

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Dans ce que tu viens d'écrire il n'y pas de notion de "supérieur", tu remplaces simplement toutes les notes de A par celles de B ; je suis donc toujours circonspect sur ce que tu veux faire.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre averti
    Homme Profil pro
    BTS SIO SLAM
    Inscrit en
    Mai 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : BTS SIO SLAM

    Informations forums :
    Inscription : Mai 2015
    Messages : 11
    Par défaut
    Contexte :

    En fait je travaille avec le logiciel Apogee, qui fournit des notes d'étudiants dans un fichier A.csv

    Je dois comparer l'ensemble du fichier A avec un fichier B qui est lui meme rempli de notes.
    Car au final on prendra la meilleure note des deux fichiers

    Cependant, les étudiants du fichier A n'ont pas forcément assisté à l'examen, c'est pourquoi certains emplacements de notes du A sont vides.

    C'est pour cela que je souhaiterai "écraser" la valeur du A si B>A
    ou remplir le A par la note du B si A est vide et B rempli


    Je pensais à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    $handle = fopen("A.csv", "r");
     
    while (($data = fgetcsv($handle, 1000, ";")) !== FALSE)
    {
     
    $fp = fopen("B.csv", "r+");
     
    	while (($tab = fgetcsv($fp, 1000, ";")) !== FALSE)
    	{
     
    		$champs = count($tab);
    		for ($i=0; $i < $champs; $i++) 
    		{ 
    			echo $tab[$i]."<br/>";
    		}
    			if ($data == $tab[0]) 
    			{
    				echo $tab[$i];
    			}
    			else
    			{
    				echo"Ca marche pas.\n";
    			}
    	}
     
    }
     
    fclose($handle);
    fclose($fp);
    qui va chercher les étudiants qui correspondent dans les deux fichiers (grace au même login)

    Et ainsi pouvoir définir la note finale

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Reboucler le fichier a chaque fois n'est pas efficace.
    Il suffit de stocker dans un tableau PHP classé par login :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    // on lit tout B
    $handle = fopen("B.csv", "r");
    while (($data = fgetcsv($handle, 1000, ";")) !== FALSE)
    {
      $notesA[$data[0]] = $data;
    }
    fclose($handle);
     
    // on lit A et on compare avec les données de B
    $handle = fopen("A.csv", "r");
    while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
      $line[0] = $data[0];
      $line[1] = $data[1]
      for ($i = 2; $i < 5; $i++) {
          $line[$i] = max($data[$i], $notesA[$data[0]][$i]);
      }
      $output[] = $ligne;
    }
    fclose($handle);
     
    // on réecrit A avec les nouvelles valeurs
    $handle = fopen('A.csv', 'w');
    foreach ($output as $line) {
        fputcsv($handle, $line, ';');
    }
    fclose($handle);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre averti
    Homme Profil pro
    BTS SIO SLAM
    Inscrit en
    Mai 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : BTS SIO SLAM

    Informations forums :
    Inscription : Mai 2015
    Messages : 11
    Par défaut
    Je n'avais pas envisagé les choses comme ça !

    J'ai mis un peu de temps à comprendre la démarche mais ca fonctionne tres bien ^^

    Un grand merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Toutes versions] Ventiler mon fichier .csv en plusieurs fichiers .csv
    Par X.e.N.o.N dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 10/07/2018, 05h11
  2. [bash] Comparer deux fichiers csv
    Par Invité dans le forum Shell et commandes GNU
    Réponses: 29
    Dernier message: 05/05/2013, 13h11
  3. Comparer deux fichiers csv
    Par kerplouz dans le forum Général Python
    Réponses: 1
    Dernier message: 21/11/2012, 21h17
  4. Réponses: 1
    Dernier message: 13/07/2011, 18h22
  5. Réponses: 12
    Dernier message: 07/12/2005, 18h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo