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 :

combiner un fichier txt et cvs en un csv


Sujet :

Langage PHP

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Urbaniste
    Inscrit en
    Décembre 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Décembre 2015
    Messages : 5
    Points : 1
    Points
    1
    Par défaut combiner un fichier txt et cvs en un csv
    Bonjour,

    La programmation, c'est pas ma tasse de thé

    J'espère qu'une âme charitable m'aidera sur un simple script

    J'ai 2 fichiers :
    A = pc
    B = portable
    C = réf produit
    D = réf fournisseur 1
    E = réf fournisseur 2

    .txt ("A","B","C","D", .....) fournisseur 1
    .csv (A;B;C;E; ......) fournisseur 2

    J'aimerai créer un .csv (via un script php ou shell) qui combine les 2 fichiers

    A; = ID auto (nombre incrémenté)
    B; = A(.txt)
    C; = B(.txt)
    D; = C(.txt)
    E; = D(.txt)
    F; = E(.csv) (clé étant réf produit)
    En gros :

    .txt ("pc","portable","1515","406E", .....) fournisseur 1
    .txt ("pc","portable","3030","407E", .....) fournisseur 1
    .csv (pc;portable;1515;604E; ......) fournisseur 2
    .csv (pc;portable;4040;605E; ......) fournisseur 2

    Résultat :
    1;pc;portable;1515;406E;604E;
    2;pc;portable;3030;407E;;
    3;pc;portable;4040;;605E;

    Un grand merci

  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
    Points : 44 155
    Points
    44 155
    Par défaut
    Tes exemples n'étaient pas très clairs.
    J'ai consideré que les ... et les ; finaux n'étaient pas une dernière colonne vide
    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
    <?php
    // lit le premier fichier et classe les résultat par id de produit
    if (($handle = fopen("fournisseur1.txt", "r")) !== FALSE) {
        while (($data = fgetcsv($handle, 0, ",")) !== FALSE) {
    			$result[$data[2]] = $data;
            }
        fclose($handle);
    }
     
    // lit le deuxieme fichier et complète l'entrée si elle existe ou en crée une nouvelle
    if (($handle = fopen("fournisseur2.csv", "r")) !== FALSE) {
        while (($data = fgetcsv($handle, 0, ";")) !== FALSE) {
    			if(isset($result[$data[2]])) {
    				$result[$data[2]][4] = $data[3];
    			}
    			else {
    				$result[$data[2]] = array(0=>$data[0], 1=>$data[1], 2=>$data[2], 3=>'', 4=>$data[3]);
    			}
        }
        fclose($handle);
    }
     
    // écrit le fichier combiné
    $fp = fopen('result.csv', 'w');
    foreach ($result as $values) {
    	fputcsv($fp, $values, ';');
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Urbaniste
    Inscrit en
    Décembre 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Décembre 2015
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bonsoir

    Un grand merci

    Je vais tester cela.

    Effectivement, j'ai beaucoup de données (environ 45000 lignes pour le .txt et 39000 lignes pour le .csv)

    Php va t il supporter cela ?

    Un collègue m'a parlé de python ? ou en shell dans un bash

    Parfaitement, "..." = d'autres colonnes

    le format des données dans le fichier est

    .txt ("A","B","C","D","W") fournisseur 1 (23 colonnes)
    Exemple
    ("A","TRUST COMPUTER ","8438","B102485 ","SILICONE SKIN FOR KINDLE FIRE ",". ","MSD ","18412 ",0000000000000009.34,0000000000000000.00,"Y"," ","N","8713439184129","1128","FR",000000.12,"STD","D"," "," ",000000,000000," ")

    Concernant le fichier .txt (exemple ci dessus), Est ce possible d'ajouter une fonction qui supprime les espaces avant ",

    Exemple : ,"B102485 "


    .csv (A;B;C;E;W) fournisseur 2 (23 colonnes)
    Exemple
    (1004116;C5718A;;HPE CARTOUCHE DDS-4 40 GO 150M V;HPE DDS 4 cartouche de donn‚es 40GB 150m pack de 1;HEWLETT PACKARD ENT;Consommable;Support de sauvegarde;Cartouche Travan;EUR;8.96;16.08;;23;13/11/2015;0;0.400;0.000;0.086;88698852958;0.0000;0.00;0;;;1;80.000L 60.000P 18.000H MM ;1;HPC5718A10)


    Est ce possible d'avoir le détail et le fonctionnement du script afin que je puisse l'adapter à mes données et effectivement comprendre le fonctionnement de celui ci ?

    Un grand merci ("sabotage" ? dois je m’inquiéter de ton pseudo ?

  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
    Points : 44 155
    Points
    44 155
    Par défaut
    Les seules contraintes que tu vas rencontrer en PHP sont les éventuelles limites de temps d'execution et d'utilisation qui peuvent être configurées sur ton serveur.

    Ce genre de traitement est très simple et peut se faire dans pleins de langages, même en VBA dans Excel par exemple.
    Je suppose que si tu as posé ta question c'est que tu connais déjà PHP.

    Tu peux utiliser trim pour nettoyer les espaces :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while (($data = fgetcsv($handle, 0, ",")) !== FALSE) {
    			$result[$data[2]] = array_map('trim', $data);
            }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 224
    Points
    20 224
    Par défaut
    Note au passage que tu n'as que des fichiers csv. C'est pas parce que l'extension est .txt que le contenu de ton fichier n'est pas du csv.
    A partir du moment ou tu as des données tabulaire, séparées par un séparateur c'est du csv. le séparateur n'ayant jamais été normé , on fait un peut ce qu'on veux (, ; ...)
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Nouveau Candidat au Club
    Femme Profil pro
    Urbaniste
    Inscrit en
    Décembre 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Décembre 2015
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Les seules contraintes que tu vas rencontrer en PHP sont les éventuelles limites de temps d'execution et d'utilisation qui peuvent être configurées sur ton serveur.

    Ce genre de traitement est très simple et peut se faire dans pleins de langages, même en VBA dans Excel par exemple.
    Je suppose que si tu as posé ta question c'est que tu connais déjà PHP.

    Tu peux utiliser trim pour nettoyer les espaces :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while (($data = fgetcsv($handle, 0, ",")) !== FALSE) {
    			$result[$data[2]] = array_map('trim', $data);
            }
    Le script fonctionne avec l'exemple (Il manque le nombre auto incrementé en 1er colonne)

    Je vais tester avec quelques données de mes fichiers fournisseurs.

    Dans l'hypothèse ou j'ai plusieurs réf produits identiques (produits virtuels)

    Est ce possible d'ajouter une ligne avec à la fin de la réf /BUNx (x represente un nombre incrémenté)

    Exemple :

    .txt ("pc","portable","1515","406E", .....) fournisseur 1
    .txt ("pc","portable","1515","409E", .....) fournisseur 1
    .txt ("pc","portable","1515","410E", .....) fournisseur 1
    .txt ("pc","portable","3030","407E", .....) fournisseur 1
    .csv (pc;portable;1515;604E; ......) fournisseur 2
    .csv (pc;portable;4040;605E; ......) fournisseur 2

    Résultat :

    1;pc;portable;1515;406E;604E;
    2;pc;portable;3030;407E;;
    3;pc;portable;4040;;605E;
    4;pc;portable;1515/BUN1;409E;
    5;pc;portable;1515/BUN2;410E;

    Si je veux ajouter des colonnes car dans mon fichier, j'ai 23 colonnes à traiter

    Je dois proceder ainsi ? :

    $result[$data[2]] = array(0=>$data[0], 1=>$data[1], 2=>$data[2], 3=>'', 4=>$data[3] 5=>$data[4]);

    Un grand merci

  7. #7
    Nouveau Candidat au Club
    Femme Profil pro
    Urbaniste
    Inscrit en
    Décembre 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Décembre 2015
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par grunk Voir le message
    Note au passage que tu n'as que des fichiers csv. C'est pas parce que l'extension est .txt que le contenu de ton fichier n'est pas du csv.
    A partir du moment ou tu as des données tabulaire, séparées par un séparateur c'est du csv. le séparateur n'ayant jamais été normé , on fait un peut ce qu'on veux (, ; ...)
    Très bien, donc l'extension n'est pas liée au format des données

    Donc je peux renommer le .txt en .csv ?

  8. #8
    Nouveau Candidat au Club
    Femme Profil pro
    Urbaniste
    Inscrit en
    Décembre 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Décembre 2015
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    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
    <?php
    // lit le premier fichier et classe les résultat par id de produit
    if (($handle = fopen("fournisseur1.txt", "r")) !== FALSE) {
        while (($data = fgetcsv($handle, 0, ",")) !== FALSE) {
    			$result[$data[3]] = array_map('trim', $data);
            }
        fclose($handle);
    }
     
    // lit le deuxieme fichier et complète l'entrée si elle existe ou en crée une nouvelle
    if (($handle = fopen("fournisseur2.csv", "r")) !== FALSE) {
        while (($data = fgetcsv($handle, 0, ";")) !== FALSE) {
    			if(isset($result[$data[3]])) {
    				$result[$data[3]][5] = $data[4];
    			}
    			else {
    				$result[$data[3]] = array(0=>$data[0], 1=>$data[1], 2=>$data[2], 3=>$data[3] 4=>'', 5=>$data[4]);
    			}
        }
        fclose($handle);
    }
     
    // écrit le fichier combiné
    $fp = fopen('result.csv', 'w');
    foreach ($result as $values) {
    	fputcsv($fp, $values, ';');
    }
    ?>
    Ca ne fonctionne pas ?

  9. #9
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 224
    Points
    20 224
    Par défaut
    Oui ,
    ou inversement , l'extension n'a pas d'importance.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. [SQLServer]Script import fichier .txt
    Par Jenbi dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/08/2006, 16h49
  2. remplir des tables a partir de fichiers TXT
    Par jeremie dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 10/03/2004, 14h50
  3. ouverture de fichier txt
    Par juguul dans le forum MFC
    Réponses: 11
    Dernier message: 18/12/2003, 09h44
  4. [langage] prob lecture fichier .txt
    Par martijan dans le forum Langage
    Réponses: 3
    Dernier message: 16/07/2003, 11h08
  5. communication fichier binaire fichier txt
    Par micdie dans le forum C
    Réponses: 3
    Dernier message: 05/12/2002, 00h19

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