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

Langage PHP Discussion :

Interprétation de données issues d'un fichier CSV


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 68
    Points : 32
    Points
    32
    Par défaut Interprétation de données issues d'un fichier CSV
    Bonjour,

    J'ai conçu un script php me permettant de gérer l'import de produits dans prestashop depuis de multiples sources dont les fichiers CSV. J'ai un soucis avec le fichier d'un fournisseur que je n'arrive pas à contourner.

    ID CATEGORY NAME ATTRIBUTE1 ATTRIBUTE2 VALUE1 VALUE2 DESCRIPTION BRAND FEATURE PRICE PVP PVD IVA VIDEO EAN13 WIDTH HEIGHT DEPTH WEIGHT STOCK DATE_ADD DATE_UPD IMAGE
    Le fichier est composé des colonnes ci dessus. Soucis, quand il y a des déclinaisons de produit un produit dispo en plusieurs taille ou couleur par exemple, chaque déclinaison du produit est présentée sur une ligne différente :

    ID CATEGORY NAME ATTRIBUTE1 ATTRIBUTE2 VALUE1 VALUE2
    B0520121 2403,2467,2728 Tire Bouchon Bouteille Couleur Rouge
    B0520120 2403,2467,2728 Tire Bouchon Bouteille Couleur Noir
    Mon problème réside dans le fait que, je dois pouvoir savoir en lisant une ligne si je dois procéder à une création/mise à jour d'un produit ou création/mise à jour d'une déclinaison de produit. Avez vous une idée ?

    Merci d'avance pour vos lumières

  2. #2
    Membre émérite Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Points : 2 286
    Points
    2 286
    Par défaut
    Bonjour,

    Basiquement c'est dans le script qu'il faudrait analyser chaque ligne du csv
    puis décider si Ajout ou Maj ...
    Je propose pour aller plus loin ... de donner le script
    et un cas concret de lignes csv entrainant une Maj
    et un cas concret de lignes csv entrainant un Ajout ...

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 68
    Points : 32
    Points
    32
    Par défaut
    Merci pour ta réponse vttman.

    Mon soucis ne réside pas dans le fait de savoir si je dois ajouter le produit en bdd ou mettre à jour un produit existant. Pour ça, après extraction des données je recherche l'ean en bdd. Si déjà présent, on maj, si non présent, on procède à création du produit.

    Mon soucis réside dans le fait de savoir quand est ce que je dois traiter la ligne du fichier comme un produit, et quand je dois la traiter comme une déclinaison de produit. Pour reprendre mon exemple dans mon premier post :

    ID CATEGORY NAME ATTRIBUTE1 ATTRIBUTE2 VALUE1 VALUE2
    B0520121 2403,2467,2728 Tire Bouchon Bouteille Couleur Rouge
    B0520120 2403,2467,2728 Tire Bouchon Bouteille Couleur Noir
    Quand je passe sur une de ces lignes, je ne trouve aucune logique me permettant de dire là je sais que je dois traiter en produit, là je dois traiter en déclinaison. Si je devais le faire à la main, la première ligne serait la création du produit, la seconde, uniquement une déclinaison de la première puisque seulement la couleur change. Mais comment faire comprendre à mon script PHP que seulement la 2ème ligne doit être considérée comme une déclinaison, et de surcroit, comment peut il déduire que la seconde ligne est une déclinaison de la première et pas d'un autre produit.

  4. #4
    Membre émérite Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Points : 2 286
    Points
    2 286
    Par défaut
    Si le fichier csv est correctement trié par exemple par CATEGORIE/ID alors
    ceci
    B0520120 2403,2467,2728 Tire Bouchon Bouteille Couleur Noir
    B0520121 2403,2467,2728 Tire Bouchon Bouteille Couleur Rouge
    Peut être détecté par programmation ...
    ici une même CATEGORIE et 2 id différents donc une création de produit + déclinaison

    Maintenant si on a ceci (je ne suis pas devin)
    B0520121 2403,2467,2728 Tire Bouchon Bouteille Couleur Rouge
    B0520120 2403,2467,2728 Tire Bouchon Bouteille Couleur Noir
    B0523920 2403,2467,2728 Capsule Bouteille Couleur jaune
    Il faudrait alors considérer en plus le NOM donc trier le fichier par CATEGORIE/ID/NOM ?

    Est-ce que le soucis c'est la programmation de tout ça, où je suis toujours hors-piste ?

  5. #5
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    je ne trouve aucune logique
    là on n'est pas sur un problème de programmation. Si toi même tu ne peux pas formuler la règle, la machine ne peut rien pour toi.

    Dans ton exemple on n'a seulement le dernier mot qui change. Est-ce que ce schéma serait valable pour les autres produits ?

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 68
    Points : 32
    Points
    32
    Par défaut
    Pour être plus clair j'aurai du mettre un extrait du fichier plus large :

    ID | CATEGORY | NAME | ATTRIBUTE1 | ATTRIBUTE2 | VALUE1 | VALUE2
    B0520121 | 2403,2467,2728 | Tire Bouchon Bouteille | Couleur | | Rouge |
    B0520120 | 2403,2467,2728 | Tire Bouchon Bouteille | Couleur | | Noir |
    D4010170 | 2403,2467,2738 | Desserte en Bois | | | |
    B0520164 | 2403,2467,2732 | Plateau Fromage en Bambou avec Range-Couverts TakeTokio (5 pièces) | | | |
    B1020196 | 2403,2449,2726 | Plateau Petit-Déjeuner au Lit Bambou TakeTokio | | | |
    B0520166 | 2403,2489 | Coffret Cocktail Professionnel (5 pièces) | Couleur | | Blanc |
    B0520167 | 2403,2489 | Coffret Cocktail Professionnel (5 pièces) | Couleur | | Noir |
    B0520168 | 2403,2489 | Coffret Cocktail Professionnel (5 pièces) | Couleur | | Gris |
    B0520169 | 2403,2489 | Coffret Cocktail Professionnel (5 pièces) | Couleur | | Rouge |
    B1015155 | 2403,2449,2458 | Poêle Style Rétro (20 cm) | Couleur | | Bleu |
    B1015156 | 2403,2449,2458 | Poêle Style Rétro (20 cm) | Couleur | | Jaune |
    B1015157 | 2403,2449,2458 | Poêle Style Rétro (20 cm) | Couleur | | Vert |
    B1015158 | 2403,2449,2458 | Poêle Style Rétro (20 cm) | Couleur | | Rose |
    Voilà, j'ai ajouté un séparateur visuel des colonnes pour que ce soit plus lisible ici. On a donc un champ ID systématiquement, un ou plusieurs codes pour le fil d'ariane catégorie puis 2 colonnes attribut et 2 colonnes valeur. Valeur 1 correspond à la valeur de l'attribut etc...

    Si aucune valeur dans les colonnes attribut je sais qu'il n'y à pas de déclinaison, donc ce sera un simple produit. Par contre, quand il y a une valeur faudra d'une manière ou d'une autre identifier la première ligne concernant le produit pour la traiter en tant que produit et ensuite affecter la première valeur déclinée. Ensuite, la ou les lignes suivantes qui concerne le même produit pour ajouter uniquement des déclinaisons supp.

    Je précise, on est sous prestashop. Ce dernier gère les produits déclinés de la sorte. On a un produit parent dans la table produit, puis les déclinaisons dans une autre table. Donc quand je dois créer le tire bouchon de la première ligne du fichier, je vais créer le produit en premier, puis une combinaison dans la table déclinaison pour la première couleur qui est le rouge. quand le script passe à la deuxième ligne, il faut que je sache lui dire qu'il ne faudra plus que rajouter la couleur noir au produit tire bouchon de la ligne précédente.

    - Je ne peux pas me baser sur le nom du produit parce que je peux avoir plusieurs fois tire bouchon en nom sans que ce soit le même produit.
    - Je ne peux pas dire que parce qu'une ligne contient des valeurs pour attribute et value que c'est forcément une déclinaison de la première ligne du genre puisque comme dans l'exemple, le coffret coktail précède la poêle style retro. On ne pourrait pas traiter les 4 dernières lignes comme déclinaisons des 4 concernant le coffret coktail pro.

    Est-ce que le soucis c'est la programmation de tout ça, où je suis toujours hors-piste ?
    Oui mon soucis est comment programmer ça. Mon script gère déjà les déclinaisons de produits. Mais heureusement, d'habitude dans un fichier csv, les déclinaisons sont identifiables facilement. Par exemple, l'id contient un _ (id-parent_id-declinaison) ou encore, une colonne reprend l'id du produit parent. Dans ces cas, il y a un marqueur clairement identifiable dans le fichier qui permet d'être certain de ce qu'il faut faire et quand.

    Dans ton exemple on n'a seulement le dernier mot qui change. Est-ce que ce schéma serait valable pour les autres produits ?
    avec l'exemple ci dessus on comprends mieux. Les différences dans le nom que tu mettais en avant n'en sont pas, c'est les colonnes suivantes qui varient. Le nom est le même.

  7. #7
    Membre émérite Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Points : 2 286
    Points
    2 286
    Par défaut
    Ce qui nous donnerait ceci à traiter si j'ai bien compris ?
    5 produits à créer et 12 déclinaisons au total ...

    =>

    PRODUIT1 + DECLIN11 => B0520121 | 2403,2467,2728 | Tire Bouchon Bouteille | Couleur | | Rouge |
    DECLIN12 => B0520120 | 2403,2467,2728 | Tire Bouchon Bouteille | Couleur | | Noir |

    PRODUIT2 => D4010170 | 2403,2467,2738 | Desserte en Bois | | | |

    PRODUIT3 + DECLIN31 => B0520164 | 2403,2467,2732 | Plateau Fromage en Bambou avec Range-Couverts TakeTokio (5 pièces) | | | |
    DECLIN32 => B1020196 | 2403,2449,2726 | Plateau Petit-Déjeuner au Lit Bambou TakeTokio | | | |

    PRODUIT4 + DECLIN41 => B0520166 | 2403,2489 | Coffret Cocktail Professionnel (5 pièces) | Couleur | | Blanc |
    DECLIN42 => B0520167 | 2403,2489 | Coffret Cocktail Professionnel (5 pièces) | Couleur | | Noir |
    DECLIN43 => B0520168 | 2403,2489 | Coffret Cocktail Professionnel (5 pièces) | Couleur | | Gris |
    DECLIN44 => B0520169 | 2403,2489 | Coffret Cocktail Professionnel (5 pièces) | Couleur | | Rouge |

    PRODUIT5 + DECLIN51 => B1015155 | 2403,2449,2458 | Poêle Style Rétro (20 cm) | Couleur | | Bleu |
    DECLIN52 => B1015156 | 2403,2449,2458 | Poêle Style Rétro (20 cm) | Couleur | | Jaune |
    DECLIN53 => B1015157 | 2403,2449,2458 | Poêle Style Rétro (20 cm) | Couleur | | Vert |
    DECLIN54 => B1015158 | 2403,2449,2458 | Poêle Style Rétro (20 cm) | Couleur | | Rose |

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 68
    Points : 32
    Points
    32
    Par défaut
    Tout à fait

  9. #9
    Membre émérite Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Points : 2 286
    Points
    2 286
    Par défaut
    Donc pour aller plus loin il faudrait maintenant le script php ... sinon
    on peut aussi en rester au niveau "algorithmes envisageables" ?

    Et je réitère ma demande : est ce que ce fichier csv est trié comme dans l'exemple
    ou tout peut-être mélangé ?

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 68
    Points : 32
    Points
    32
    Par défaut
    Et je réitère ma demande : est ce que ce fichier csv est trié comme dans l'exemple
    ou tout peut-être mélangé ?
    Désolé je n'avais pas vu la question avant.
    Ce n'est pas moi qui génère le fichier, donc on n'est pas à l'abris d'une modification de présentation. Cependant, pour l'instant, l'extrait est représentatif du fichier global.


    sinon pour le script. Je récupère le fichier puis je le traite :

    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
     
    	$ligne = strtok($catalogue,"\n");
     
    		while ($ligne !== false) {
     
    			if ($nbligne != '0')
    			{
    			$valeurs = explode(';', $ligne);
     
     
    			//récupération des valeurs
                            $nom_produit = mysql_real_escape_string($valeurs[2]);
    			$id_categ_produit = $valeurs[3]; 
                            //comme ça pour chaque colonne utile
     
    // je vérifie si je connais déjà l'ean et si oui où il est (produit ou déclinaison)
     
    // en fonction du résultat, j'appelle une fonction qui va mettre à jour la bdd produit ou déclinaison
     
    // si je ne connais pas l'ean, j'appelle la fonction de création de produit ou de déclinaison 
     
     
    		        }
     
    		$nbligne ++;
    		$ligne = strtok("\n");
     
                    }
    Pour reprendre ton exemple :
    PRODUIT1 + DECLIN11 => B0520121 | 2403,2467,2728 | Tire Bouchon Bouteille | Couleur | | Rouge |
    DECLIN12 => B0520120 | 2403,2467,2728 | Tire Bouchon Bouteille | Couleur | | Noir |
    Je ferai trois traitement là. Le premier pour mettre à jour le produit parent avec la 1ère ligne. Le second pour traiter la première déclinaison qui est sur la première ligne. Le troisième pour traiter la déclinaison en deuxième ligne.

  11. #11
    Membre émérite Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Points : 2 286
    Points
    2 286
    Par défaut
    Je propose d'introduire une rupture dans la boucle principale
    Donc stocker la categorie dès le première lecture du fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $rupt_cat = $valeurs[3]
    $compt_ligne= 0;
    puis entrer dans la rupture

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while ($ligne !== false) {
         while (($ligne !== false) && ($rupt_cat == $valeurs[3])) {$compt_ligne++;
    ...
    Dans ce pavé on incrémente un compteur $compt_ligne et on créé produit (et déclinaison) pour le 1er enregistrement ($compt_ligne à 1)
    puis déclinaison pour les enregistrements suivants ($compt_ligne <> 1)
    si on sort de ce pavé c'est que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $rupt_cat != $valeurs[3]
    Dans ce cas
    =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $rupt_cat = $valeurs[3]
    $compt_ligne= 0;
    et rebelote ... bon je pratique php par ci par là mais le mieux c'est d'essayer de traficoter le code
    dans ce sens et si problème eh bien de revenir ...

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 68
    Points : 32
    Points
    32
    Par défaut
    Si je comprends bien ton idée, tant que la chaine de catégorie est identique, on considère que c'est le même produit et donc on traite les lignes comme produit et déclinaisons c'est ça ?

  13. #13
    Membre émérite Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Points : 2 286
    Points
    2 286
    Par défaut
    ça c'est à voir de ton coté si c'est suffisant comme condition ?
    Maintenant ici
    =>
    PRODUIT3 + DECLIN31 => B0520164 | 2403,2467,2732 | Plateau Fromage en Bambou avec Range-Couverts TakeTokio (5 pièces) | | | |
    DECLIN32 => B1020196 | 2403,2449,2726 | Plateau Petit-Déjeuner au Lit Bambou TakeTokio | | | |
    Cela ne marcherait pas il y a plusieurs codes pour le fil d'ariane catégorie et ça ne correspond pas mais
    je me suis peut-être trompé et c'est ceci qu'il faudrait générer

    PRODUIT3 + DECLIN31 => B0520164 | 2403,2467,2732 | Plateau Fromage en Bambou avec Range-Couverts TakeTokio (5 pièces) | | | |
    PRODUIT3x + DECLIN31x => B1020196 | 2403,2449,2726 | Plateau Petit-Déjeuner au Lit Bambou TakeTokio | | | |
    ou le traitement à effectuer est plus complexe dans ce cas ?
    A voir ...

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 68
    Points : 32
    Points
    32
    Par défaut
    Salut,

    Quand j'ai lu ton message ce matin au pti dej j'avais dans l'idée de partir sur le nom du produit. La probabilité que deux produits avec le même nom mais n'étant pas des déclinaisons l'un de l'autre était relativement nulle. En arrivant au bureau, j'ai pensé à autre chose. Le champ image. Il est complétement impossible que deux produits différents aient exactement la même image. Donc, en reprenant ton code pour se baser sur l'url de la première image on est certain d'être bon je pense.

    Merci beaucoup.

    Je vais tester ça de suite.

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 68
    Points : 32
    Points
    32
    Par défaut
    Il y a un truc que je ne comprends pas dans l'intégration de ton idée.

    Où placerait tu ton code là dedans ? :

    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
     
    	$ligne = strtok($catalogue,"\n");
     
    		while ($ligne !== false) {
     
    			if ($nbligne != '0')
    			{
    			$valeurs = explode(';', $ligne);
     
     
    			//récupération des valeurs
                            $nom_produit = mysql_real_escape_string($valeurs[2]);
    			$id_categ_produit = $valeurs[3]; 
                            //comme ça pour chaque colonne utile
     
    // je vérifie si je connais déjà l'ean et si oui où il est (produit ou déclinaison)
     
    // en fonction du résultat, j'appelle une fonction qui va mettre à jour la bdd produit ou déclinaison
     
    // si je ne connais pas l'ean, j'appelle la fonction de création de produit ou de déclinaison 
     
     
    		        }
     
    		$nbligne ++;
    		$ligne = strtok("\n");
     
                    }
    Parce que si je fais comme ça :

    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
     
    	$ligne = strtok($catalogue,"\n");
     
    		while ($ligne !== false) {
     
    			if ($nbligne != '0')
    			{
    			$valeurs = explode(';', $ligne);
     
     
    			//récupération des valeurs
                            $nom_produit = mysql_real_escape_string($valeurs[2]);
    			$id_categ_produit = $valeurs[3]; 
    			$url_image_1 = $valeurs[22];
    				//arguments pour détection des déclinaisons
    				$rupt_cat = $valeurs[22];
    				$compt_ligne= 0;
     
                            //comme ça pour chaque colonne utile
     
    			   while (($ligne !== false) && ($rupt_cat == $valeurs[22])) 
    			   {
    				$compt_ligne++;
     
     
     
    // je vérifie si je connais déjà l'ean et si oui où il est (produit ou déclinaison)
     
    // en fonction du résultat, j'appelle une fonction qui va mettre à jour la bdd produit ou déclinaison
     
    // si je ne connais pas l'ean, j'appelle la fonction de création de produit ou de déclinaison 
     
                               }
    		        }
     
    		$nbligne ++;
    		$ligne = strtok("\n");
     
                    }
    rupt_cat sera toujours égal valeurs[22] donc on va boucler à l'infini.

  16. #16
    Membre émérite Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Points : 2 286
    Points
    2 286
    Par défaut
    La lecture et traitement de la ligne suivante doit être
    dans ce pavé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (($ligne !== false) && ($rupt_cat == $valeurs[22]))
    Mais je ne vois pas comment tu lis ton fichier csv ?

    ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    $ligne = fgets($fd, ...); // lecture première ligne
    while (!feof($fd)) {
         $rupt_cat = $valeurs[22];// initialisation rupture
         $compt_lig = 0;
         while (!feof($fd)  && ($rupt_cat == $valeurs[22])) {
            $compt_lig++;
            // traitement en fonction de compt_lig 
            $ligne = fgets($fd, ...); /// lecture suivante
            }
    }
    Note : Attention je ne suis pas spécialiste en PHP

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 68
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par vttman Voir le message
    La lecture et traitement de la ligne suivante doit être
    dans ce pavé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (($ligne !== false) && ($rupt_cat == $valeurs[22]))
    Mais je ne vois pas comment tu lis ton fichier csv ?
    Ben j'ouvre en curl le fichier csv qui est stocké dans la variable $catalogue
    Ligne 2, dans mon code cité dans mon précédent message, je découpe le fichier en ligne : $ligne = strtok($catalogue,"\n");
    Tout de suite après en ligne je boucle sur les lignes : while ($ligne !== false) {
    Puis je récupère les colonnes : $valeurs = explode(';', $ligne);

    Chaque colonne se retrouve donc dans un $valeurs[]

    Donc pour savoir à quoi correspond un colonne, il faut déjà être dans la boucle découpe ligne et découpe colonne. Au moment où j'affecte la valeur $rupt_cat je suis dans une ligne et je n'en sortirai pas avant la fin du traitement de la ligne. Comment donc comparer la valeur d'une colonne de la ligne 2 avec la valeur de la même colonne sur la ligne précédente ? Voir, comme ça sur plusieurs lignes.

  18. #18
    Membre émérite Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Points : 2 286
    Points
    2 286
    Par défaut
    Ok alors c'est qu'il faut déplacer pour le mettre dans la "seconde" boucle ou rupture ...

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 68
    Points : 32
    Points
    32
    Par défaut
    Ce n'est pas possible.

    Parce que pour connaitre la valeur d'une colonne il faut couper le fichier en ligne en premier puis le coupe en colonne.

    En bref, je ne peux pas attriber la valeur de la colonne 22 de la ligne X à $rupt_cat avant d'avoir fait la découpe. Donc la découpe ne peux pas avoir lieu après le test de condition sur $rupt_cat

  20. #20
    Membre émérite Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Points : 2 286
    Points
    2 286
    Par défaut
    On va attendre les propositions d'autres forumeurs pour cette partie PHP ...

    Sinon si tu es pressé ? tu fermes et tu rouvres une autre sujet sur le
    "comment gérer une rupture en php" dans ton cas ...

Discussions similaires

  1. Réponses: 5
    Dernier message: 18/10/2008, 02h59
  2. Réponses: 2
    Dernier message: 19/03/2008, 14h51
  3. Réponses: 2
    Dernier message: 09/06/2007, 22h09
  4. Réponses: 3
    Dernier message: 15/05/2007, 09h28
  5. exporter données sql dans un fichier csv en java
    Par pinkemma dans le forum JDBC
    Réponses: 2
    Dernier message: 07/03/2007, 09h23

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