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 :

Comment remplir un xml à partir d'un fichier texte


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 87
    Points : 37
    Points
    37
    Par défaut Comment remplir un xml à partir d'un fichier texte
    J'ai un fichier xml qui change tous les jours.
    Il porte tous les jours le meme nom "CQFIC270.TXT"
    Actuellement, j'ai un fichier qui me permets d'éclater ce fichier de base en plusieurs autres fichiers XML.
    Ce que je n'arrive vraiment pas à faire c'est comment lire le fichier de base, l'éclater comme actuellement mais sans écraser les petits fichiers. L'action que je n'arrive pas à faire, c'est lire les petites fichiers : si les lignes sont identiques = rien sinon je rajoute à la suite les nouvelles valeurs ???

    voici le fichiers php qui devrait faire son travail :

    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
    <?php  
    $fichiers_sortie = array();  
    $fp = fopen('CQFIC270.TXT', 'r');  
     
    while (!feof($fp)) {  
        $ligne = fgets($fp);  
        $fragments = explode(';', $ligne);  
     
        $nomFichier = $fragments[0] . $fragments[1]; 
     
        if (!isset($fichiers_sortie[$nomFichier])) {  
          $fichiers_sortie[$nomFichier] = new DOMDocument('1.0', 'ISO-8859-1');  
        } 
     
        $dom = $fichiers_sortie[$nomFichier];  
        try {  
            //switch ($fragments[2]) {  
            //    case $fragments[2]:  
                    $xpath = new DOMXPath($dom);  
                    //$id = $xpath->evaluate("/id{$fragments[2]}")->item(0);  
                    $id = $xpath->evaluate("/{$fragments[2]}")->item(0); 
                    if ($id == null) {  
                        //$id = $dom->createElement("id{$fragments[2]}");  
                        $id = $dom->createElement("{$fragments[2]}"); 
                        $dom->appendChild($id);  
                    }  
                    $mvt = $dom->createElement('mvt');  
                    $mvt->setAttribute('Libelle', $fragments[3]);  
                    $mvt->setAttribute('dateValeur', $fragments[4]);  
                    $mvt->setAttribute('Valeur', $fragments[5]);  
                    $mvt->setAttribute('Volatilite', trim($fragments[6]));  
                    $id->appendChild($mvt);  
             //       break;  
     
            //}  
        } catch (Exception $e) {  
            die('Ligne ' . $e->getLine() . ' : ' . $e->getMessage());  
        }  
    }  
    fclose($fp);  
    foreach ($fichiers_sortie as $k => $v) {  
        $v->save("$k.xml");  
        unset($fichiers_sortie[$k]);  
    }  
    ?>

    voici le fichier qui est lu le jour n-1 jour :
    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
    CQFIC270.TXT
    8025;29000;FR0000293000;BT;20060924;9447.04;0.046695
    8025;29000;FR0000293000;BT;20060925;9447.82;0.046695
    8025;29000;FR0000293000;BT;20060926;9448.62;0.046695
    8025;29000;FR0000293000;BT;20060927;9449.42;0.046695
    8025;29000;FR0000293000;BT;20060928;9450.2;0.046695
    8025;29000;FR0000293000;BT;20060929;9452.65;0.046695
    8025;29000;FR0000293000;BT;20061001;9452.65
    4025;1712000;FR0010029000;ECO;20060817;11175.05;1.7772
    4025;1712000;FR0010029000;EC;20060824;11185.44;1.77343
    4025;1712000;FR0010029000;ECO;20060831;11210.9;1.781717
    4025;1712000;FR0010029000;ECO;20060907;11192.31;1.793219
    4025;1712000;FR0010029000;ECO;20060914;11212.32;1.7969
    4025;1712000;FR0010029000;ECO;20060921;11226.71;1.794382
    4025;1712000;FR0010029000;ECO;20060928;11260.29;1.776394
    le lendemain : j'ai le nouveau fichier
    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
    CQFIC270.TXT
    8025;29000;FR0000293000;BT;20060929;9452.66;0.046695
    8025;29000;FR0000293000;BT;20061001;9452.67
    8025;29000;FR0000293000;BT;20061002;9447.04;0.046695
    8025;29000;FR0000293000;BT;20061005;9447.82;0.046695
    8025;29000;FR0000293000;BT;20061006;9448.62;0.046695
    8025;29000;FR0000293000;BT;20061007;9449.42;0.046695
    8025;29000;FR0000293000;BT;20061008;9450.2;0.046695
    4025;1712000;FR0010029000;ECO;20060907;11192.31;1.793219
    4025;1712000;FR0010029000;ECO;20060914;11212.32;1.7969
    4025;1712000;FR0010029000;ECO;20060921;11226.71;1.794382
    4025;1712000;FR0010029000;ECO;20060928;11260.29;1.776394
    4025;1712000;FR0010029000;ECO;20061017;11175.05;1.7772
    4025;1712000;FR0010029000;EC;20061024;11185.44;1.77343
    4025;1712000;FR0010029000;ECO;20061031;11210.9;1.781717
    En synthèse :
    Le script actuelle fonctionne car il crée bien 2 fichiers XML
    MAIS je n'arrive pas le lendemain à comparer chacun de ces fichiers et à lui ajouter les lignes en plus.


    Un grand grand merci au pro.
    Fichiers attachés Fichiers attachés

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 87
    Points : 37
    Points
    37
    Par défaut
    On m'a parlé d'employer la fonction "fopen"
    Mais je ne suis pas, non vraiement, pas assez pro pour dire
    le nouveau texte = si different dans les petites fichiers alors ajouter sinon rien.

    Merci

  3. #3
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Ce qui serait bien ce sera de fixer ce qui change vraiment. J'explique pourquoi . Il existe la fonction explode qui à partir d'une ligne crée un tableau et il y a une autre fonction in_array qui permet de savoir si un élément appartient à ce tableau. Donc tu pourrais peut etre faire avec ces fonctions (C'est une solution parmis tant d'autres).

    Pour plus d'infos voici des exemples d'utilisations des fonctions citées plus haut.
    Comment tester l'existence d'une valeur dans un tableau ?
    morceller une chaîne ?

Discussions similaires

  1. Réponses: 4
    Dernier message: 06/09/2010, 20h08
  2. Réponses: 0
    Dernier message: 22/09/2009, 17h51
  3. Réponses: 12
    Dernier message: 14/03/2009, 22h32
  4. Remplir une liste à partir d'un fichier texte
    Par leroidje dans le forum Langage
    Réponses: 1
    Dernier message: 01/07/2007, 08h41
  5. comment remplir un jTable à partir d'un fichier texte
    Par @yoyo dans le forum Composants
    Réponses: 1
    Dernier message: 16/03/2006, 11h54

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