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

PHP & Base de données Discussion :

Comparaison de fichier CSV code php


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Décembre 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Décembre 2018
    Messages : 17
    Par défaut Comparaison de fichier CSV code php
    Bonjour,
    Voilà je dois réaliser un script php qui compare deux fichiers CSV et qui écrit les comparaisons dans un nouveau fichier CSV.
    EN GROS : J'ai un fichier A avec 240 produits et dans le fichiers 2 colonnes, 1 référence et 1 stock (Fichier de mon site).
    J'ai un fichier B (Fichier du fournisseur qui est mis à jour quotidiennement) avec idem 1 colonne référence et 1 colonne stock.
    J'aimerais savoir s'il était possible de créer un script PHP qui chercherais dans les deux fichiers si dans un premier temps la référence d'un produit A se trouve dans le fichier A et dans le fichier B puis ensuite de comparer les stocks et si jamais ce n'est pas les mêmes, dans ce cas, on écrit dans un fichier C la référence + le stock actuelle (Donc celui du fichier B).
    Ensuite si jamais il y a une référence dans le fichier B mais pas dans le fichier A j'aimerais également qu'il m'écrive cette différence dans le fichier C.
    En gros c'est dans le but d'actualiser mes stocks quotidiennement ainsi que d'entrer des nouveaux produits sans devoir chercher ligne par ligne les différences.
    Merci par avance pour votre aide.
    Pour le moment j'ai commencer à faire ce bout de code, mais il ne fonctionne pas comme j'aimerais .. :
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    <?php 
     
    // on cree la fonction
    function recupcsv($nomfichier) {
        $tabcsv = array();     // On cree un tableau
        $recupfichier = fopen($nomfichier , "r"); // Ouverture d'un fichier
        if ($recupfichier) {
         // On test la fin du fichier
            while (!feof($recupfichier)) {
                $valeur = fgetcsv($recupfichier , 0 , ';' , '"' ); // Recuperation des donnees du csv
                if ( empty($valeur)) continue; // Donnee vide
                //CONTINUE: structure de controle
                $key=$valeur[3];
                $tabcsv[$key]=$valeur; // On met les valeur dans le tableau
            }
            fclose($recupfichier);   // On ferme le fichier
        } else {
            throw new Exception("erreur de lecture du fichier $nomfichier"); // On lance une exception(fichier incorrecte)
        }
        return $tabcsv; // On conserve notre tableau 
     
    }
                                                        /*---------- LANCEMENT DU PROGRAMME ----------*/
     
    $nomfichier1=isset($_REQUEST['f1'])?/*$_REQUEST['f1']*/:'infosA.csv'; // On rentre le nom du premier fichier
    $nomfichier2=isset($_REQUEST['f2'])?/*$_REQUEST['f2']*/:'infosB.csv';  // On rentre le nom du second fichier
     
    if ( !$nomfichier1 ) { die("Il me faut le premier fichier (f1)"); }// On verifie la presence du premier fichier
    if ( !$nomfichier2 ) { die("Il me faut le second fichier (f2)"); }// On verifie la presence du second fichier
     
    try {
        $tabfichier1 = recupcsv($nomfichier1); // On lance la fonction cree precedement sur le premier fichier
        $tabfichier2 = recupcsv($nomfichier2);
     
    } catch (Exception $e) {                 // On recupere les exception dans une variable e
        die($e->getMessage());               // On demande d'afficher le message destinée au exception
     
    }
     
    print_r($tabfichier1);
    echo '</br>';
    print_r($tabfichier2);
    echo '</br>'; 
    foreach ($tabfichier1 as $key => $val){
     
        while(list($key_det_1, $val_det_1)=each($val)){
          if($tabfichier2[$key][$key_det_1] != $val_det_1) echo $key." => ".$key_det_1." => ".$val_det_1." || ".$tabfichier2[$key][$key_det_1]."<br>";
     
        }
     
    }
    ?>

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    comme t'es étudiant, tu vas être obligé de phosphorer un peu...
    Je t'invite déjà à reprendre la partie relative à l'acquisition des données du fichier csv selon cet exemple
    Ensuite dans tes comparaisons, liste d'abord tous les cas de figure et code en conséquence

  3. #3
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Décembre 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Décembre 2018
    Messages : 17
    Par défaut
    Bonjour,
    merci pour la réponse
    Rah ahah avec grand plaisir
    J'ai bien compris la doc. Ensuite je vais réorganiser mes fichiers CSV à comparer pour classer par ordre croissant des deux côtés, comme ça mon script comparera la ligne 1 avec la ligne 1 et si mes fichiers sont classés, théoriquement, il devrait donc comparer le stock par exemple d'un même produit
    Je suis sur la bonne voie ou pas du tout ?

  4. #4
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par lacolyte Voir le message
    Ensuite je vais réorganiser mes fichiers CSV à comparer pour classer par ordre croissant des deux côtés, comme ça mon script comparera la ligne 1 avec la ligne 1 et si mes fichiers sont classés, théoriquement, il devrait donc comparer le stock par exemple d'un même produit
    Le mot le plus important dans cette phrase est théoriquement
    Donc en réalité tu peux laisser tomber cette approche, tu ne dois jamais faire confiance aux sources de données externes et encore moins à leur supposé ordonnancement.
    Ton code doit se débrouiller de manière à envisager tous les cas de figure, il doit être robuste et donc se contenter de récupérer deux fichiers csv à comparer. Tu dois t'assurer de leur conformité et répondre en conséquence la cas échéant.
    Bref, ne suppose rien, t'as pas de boule de cristal juste des outils et de la logique, c'est déjà énorme.

    Fais un flowchart du déroulé qui te parait le plus logique dans le traitement à faire et fais voir. C'est la base de tout bon algorithme (perso j'en ai bouffé des kilos, crois-moi)

  5. #5
    Membre averti
    Homme Profil pro
    Etudiant
    Inscrit en
    Décembre 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant

    Informations forums :
    Inscription : Décembre 2018
    Messages : 17
    Par défaut
    Nom : Traitement cdiscount.png
Affichages : 986
Taille : 76,5 Ko

    Voilà, c'est ce que tu voulais que je face ?
    Dans ma tête EN GROS c'est ce que je veux faire (En vert cela signifie que c'est déjà fais et que ça fonctionne et en rouge c'est que c'est en cours de traitement)

  6. #6
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Il n'y a absolument pas nécessité de réécrire les fichiers csv. C'est la manière de les charger en mémoire qui compte. En gros ce qui est en vert et déjà codé et qui fonctionne ne sert à rien
    Poste voir un petit segment de chacun des deux fichiers sans aucune modif, stp.

Discussions similaires

  1. [CSV] Créer un fichier CSV en PHP
    Par reedbedroom dans le forum Langage
    Réponses: 2
    Dernier message: 01/04/2009, 14h10
  2. Importer un fichier .csv avec php et PDO
    Par Touny dans le forum Langage
    Réponses: 6
    Dernier message: 05/03/2009, 17h45
  3. Réponses: 1
    Dernier message: 10/01/2008, 13h52
  4. [CSV] Créer un fichier csv depuis php
    Par jbidou88 dans le forum Langage
    Réponses: 5
    Dernier message: 07/05/2007, 17h41
  5. [CSV] Fichier CSV en PHP
    Par rimeh dans le forum Langage
    Réponses: 1
    Dernier message: 11/01/2007, 12h01

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