Comparaison de fichier CSV code php

Petit nouveau ! | 5 Messages

18 avr. 2019, 15:37

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 .. :
<?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>";
       
    }

}
?>

Petit nouveau ! | 5 Messages

20 avr. 2019, 18:35

Pas de réponse ?! :(

Eléphant du PHP | 63 Messages

20 avr. 2019, 22:47

Hello, les quantités sont dans les indices 0 ?
foreach ($tabfichier2 as $key2 => $valeur2) {
  if( isset($tabfichier1[$key2]) ) {
    if( $tabfichier1[$key2][0] !== $valeur2[0] ) echo "A[$key2] = {$tabfichier1[$key2][0]} devient B[$key2] = {$valeur2[0]}<br>";
    else echo "A[$key2] et B[$key2] = {$valeur2[0]}<br>";
  }
  else echo "A[$key2] inexistant mais B[$key2] = {$valeur2[0]}<br>";
}
foreach (array_diff_key($tabfichier1, $tabfichier2) as $key_obsolete => $valeur1) {
  echo "A[$key_obsolete] = {$valeur1[0]} a cessé d'exister donc B[$key_obsolete] = 0 ?<br>";
}

Petit nouveau ! | 5 Messages

22 avr. 2019, 11:11

Hello, oui exactement

Avatar du membre
Eléphanteau du PHP | 19 Messages

25 avr. 2019, 15:09

hello peut tu mettre un extrait de tes 2 fichiers csv ?
EX Administrateur infogérence infrastructure web.( chaine de télévision ; et autre site a données sensibles). Très bonne connaissance en : routeur , firewall ,switch , serveur linux ubuntu ,apache , php, mysql (y compris master-slave), et bien d'autre technologies. Pratiquant le php assez regulierement , depuis la version 3.0 ,surtout comme langage de script ,tel que pour redémarrer des services windows via une interface web. Cherchant a se reconvertir ,suite a un Burn-out ,dans le dev php-mysql ,sur paris,RP-ouest.

Avatar du membre
Eléphanteau du PHP | 19 Messages

27 avr. 2019, 23:52

j ai deja un script qui fait ce genre de chose , avec un peu plus de controle d'erreur , tout ce dont j ai besoin c est de savoir sous quel forme sont les champs
comme par exemple si la réference est de type "0123456789" ; ou de type "banane" ; ou de type "banane flambée"; si le référence peu contenir des "," etc....
EX Administrateur infogérence infrastructure web.( chaine de télévision ; et autre site a données sensibles). Très bonne connaissance en : routeur , firewall ,switch , serveur linux ubuntu ,apache , php, mysql (y compris master-slave), et bien d'autre technologies. Pratiquant le php assez regulierement , depuis la version 3.0 ,surtout comme langage de script ,tel que pour redémarrer des services windows via une interface web. Cherchant a se reconvertir ,suite a un Burn-out ,dans le dev php-mysql ,sur paris,RP-ouest.