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 :

[Syst�me] Transfert XML >> PHP (Fichier xml local)


Sujet :

Langage PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    59
    D�tails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 59
    Par d�faut [Syst�me] Transfert XML >> PHP (Fichier xml local)
    Bonjour,

    Tout d'abord excusez moi si je me suis tromp� de section j'ai eu du mal a identifier le lieu exacte ou poser ma question.

    Je d�bute en programmation, tout particuli�rement en manipulation de fichier xml.

    Mon besoin est assez simple je pense et les aides que je trouve me laisse dans l'embarras et cible des utilisations trop complexe, bref je m y perd.

    Voila ce que je veux:
    R�cuperer deux donn�es dans un fichier xml pour ensuite les exploiter en php/mysql, l'exploitation ca je sais faire mais la r�cup�ration via parser me pose probl�me.

    Structure du fichier xml:
    Code XML : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
     
     <Song FileName="Atomic Cat - Viva la Revolution!.mp3" FileSize="3931890" TagDate="704012053">
      <Infos SongLength="10810368" Date="704012053" />
      <BPM Bpm="18899" Phase="1559" />
      <FAME IsScanned="1" Volume="6065" />
      <Automix MixType="3" TempoStart="77155" TempoEnd="9753443" CutStart="1984" CutEnd="10490592" FadeStart="16896" FadeEnd="10643968" />
     </Song>
    C'est le motif du fichier xml parfois il change l�g�rement.
    Je veux faire uniquement une exploitation local pour mon petit projet.

    J'ai besoin seulement de r�cup�rer:
    Atomic Cat - Viva la Revolution!.mp3
    18899

    Soit le titre du morceau (Filename) et son BPM (Bpm).
    Ces donn�es doivent juste etre stock� dans deux variable tableaux mais index� de facon a ce que a chaque num�ro d index j'ai bien le bon BPM pour le bon titre.

    J'ai fais un cod ed�ja qui donne des r�sultats:
    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
     
    <?php
    set_time_limit(0);
     
    $file = "test.xml";
    $contenu = fread(fopen($file, "r"), filesize($file));
    preg_match_all("|<Song FileName=\"(.*)\" FileSize=\"(.*)\" TagDate=\"(.*)\">|U", $contenu, $titre);
    preg_match_all("|<BPM Bpm=\"(.*)\"|U", $contenu, $bpm);
    // <BPM Bpm=\  Phase=\"(.*)\" BeatPhase=\"(.*)\" />|U
    $nbrtrack=count($titre[1]);
    echo '<b>Nbr de titre analysé(s) :'.$nbrtrack.'<br/>';
     
    /* le \d signifie n'importe quelle décimale */
    /* le .* signifie n'importe quel caractère '.' présent de 0 à n fois '*' */
     
    for($j=0;$j<count($titre[1]);$j++){
              echo $titre[1][$j].'<br/>';
    		  echo $bpm[1][$j].'<br/>';
        }
     
    ?>
    Mais comme on peut le voir je r�cup�re de facon distincte le titre et le BPM ce qui fait que d�s que j'ai un titre dans le XML sans BPM je suis plant� et ca d�cale tout.

    J'aimerai juste faire la r�cup�ration en un temps dans la fonction preg_match_all ou utiliser une autre m�thode pour arriver a mes fin.

    J'utilise easyphp
    php version 4.3.10

    Merci pour votre aide �ventuel !

  2. #2
    Membre exp�riment�

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par d�faut
    Quelque chose 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
    <?php
    set_time_limit(0);
     
    $file = "song.xml";
    $contenu = fread(fopen($file, "r"), filesize($file));
    $nbtitre = preg_match_all('|<Song FileName="(.*)" FileSize=".*" TagDate=".*">.*<BPM Bpm="(.*)"|sU', $contenu, $titre, PREG_SET_ORDER);
    echo '<b>Nbr de titre analysé(s) :'.$nbtitre.'<br/>';
     
    # Construction du tableau
    $association = array();
    if ($nbtitre > 0) {
        foreach ($titre as $t) {
            $association[$t[2]] = $t[1];
        }
    }
    print_r($association);
    ?>
    J'ai volontairement regroup� les deux expressions r�guli�res pour fiabilit� et praticit�. (Dommage sous PHP 5 avec SimpleXML, �a aurait �t� un jeu d'enfant).

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    59
    D�tails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 59
    Par d�faut
    Merci pour cette r�ponse et c'est vrai que mon probl�me se trouvait dans la formulation d une expression r�guli�re, je vais �tudi� cette solution et vous tenir au courant du r�sultat !
    Et je pense que le regroupement des deux expressions (ce que j'ai essay� hier en vain) est la solution a mon probl�me (tout au moins logiquement).

    Premier test: le r�sultat est propre, petit extrait:

    Code X : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    Nbr de titre analys�(s) :1020
    Array ( [20835] => Joris Delacroix - My FL Is Crazy.mp3 [22814] => Metricks - Waterfoam.mp3 [20354] => Jeff Hil0 - Phat Hour (Main Mix).mp3 [20044] => Vallesca - Hi Energy.mp3 [20352] => Anthony De Maria - Veillance.mp3 [20377] => Sonikadivision - Speed Tribal Remix.mp3 [21752] => Davidaubrun - Egoisme du Conformisme.mp3 [20045] => Transynth - Detuned.mp3 [20811] => DJ Magamed - Unknow (Energy Original Tech House Version Mix).mp3 [19895] => Sunburnt Octopus - Lost And Found.mp3 [19314] => Figure - Circuit Override.mp3 [21339] => ArcanaCrux - Composite in Mirror.mp3 [19599] => Anthony De Maria - Phencyclidine.mp3 [19896] => Wikoo - Black Away.mp3 [21162] => Vera - Club Mix.mp3 [21170] => Loo Dove - First Night.mp3 [19315] => Muttonheads - Demon On Da Way (Can Blaster Rmx).mp3.mp3 [21000] => Malcom Charles - Dancin N Singin.mp3 [16409] => DJ Lucifer - Blow That Door (Original Mix).mp3

    Je dois encore me pencher sur ces r�sultats en particulier j'ai l impression qu'il s agit d une bijection alors que certains titres ont le m�me BPM donc certains doivent ne pas apparaitre, j'�tudie ca plus en d�tail et je reviens pour une conclusion.

    Je confirme j'ai rajout� ceci:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    $verif=count($association);
     echo '<br/><br/>'.$verif;
    Ce qui me donne:
    Nombre de titre analys�: 1020
    Nombre d �l�ment dans $association: 306
    ...

    Tous les titres aux meme BPM sont apparement �cras� et seul le dernier reste.

    Voici un extrait significatif (avec les diff�rents motifs qui peuvent apparaitre et plusieurs sons au meme BPM si quelqun veut m aider en testant).

    Code XML : 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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     <Song FileName="Jeff Hil0 ft Cadatta - Tri.mp3" FileSize="7700480" TagDate="703112213">
      <Infos SongLength="14147712" />
      <BPM Bpm="20835" Phase="5954" />
      <FAME IsScanned="1" Volume="5464" />
      <Automix MixType="3" TempoStart="89294" TempoEnd="13423694" CutStart="89376" CutEnd="14069344" FadeStart="91136" FadeEnd="14091776" />
     </Song>
     <Song FileName="Metricks - Waterfoam.mp3" FileSize="5865472" TagDate="703112132">
      <Infos SongLength="12928896" />
      <BPM Bpm="20835" Phase="8436" />
      <FAME IsScanned="1" Volume="6799" />
      <Automix MixType="3" TempoStart="1377276" TempoEnd="11232924" CutStart="1376992" CutEnd="12100032" FadeStart="861184" FadeEnd="12333056" />
     </Song>
     <Song FileName="Machiavelique Underground ft U115  - Exclusive for u115 over blog com.mp3" FileSize="65801730">
      <Infos Date="704260340" />
     </Song>
     <Song FileName="Atomic Cat - Red Alert.mp3" FileSize="10059776" TagDate="703112032">
      <Infos SongLength="18481536" />
      <BPM Bpm="20354" Phase="2058" />
      <FAME IsScanned="1" Volume="9107" />
      <Automix MixType="3" TempoStart="2607370" TempoEnd="15308266" CutStart="541344" CutEnd="17549696" FadeStart="185856" FadeEnd="18240000" />
     </Song>
     <Song FileName="Danylo - Here Comes The Sound (Jazzy Mix).mp3" FileSize="5931008" TagDate="703111902">
      <Infos SongLength="10895616" />
      <BPM Bpm="20044" Phase="3512" BeatPhase="2" />
      <FAME IsScanned="1" Volume="3845" />
      <Automix MixType="1" CutStart="3360" CutEnd="9835264" FadeStart="16896" FadeEnd="10254336" />
     </Song>
     <Song FileName="Cadatta - Tri (Jeff Hil0 rmx).mp3" FileSize="7700480" TagDate="703111901">
      <Infos SongLength="14147712" />
      <BPM Bpm="20835" Phase="5954" />
      <FAME IsScanned="1" Volume="5464" />
      <Automix MixType="3" TempoStart="89294" TempoEnd="13423694" CutStart="89376" CutEnd="14069344" FadeStart="91136" FadeEnd="14091776" />
     </Song>
     <Song FileName="AdamZ ft Electric Boogie - The AdamZ Project.mp3" FileSize="3047424" TagDate="703111858">
      <Infos SongLength="8398080" />
      <BPM Bpm="20352" Phase="17664" BeatPhase="1" />
      <FAME IsScanned="1" Volume="7317" />
      <Automix MixType="1" CutStart="414464" CutEnd="8118240" FadeStart="22528" FadeEnd="8173568" />
     </Song>
     <Song FileName="Sonikadivision - Speed Tribal Remix.mp3" FileSize="5472256" TagDate="703111851">
      <Infos SongLength="15078528" Date="703212133" />
      <BPM Bpm="20377" Phase="18006" BeatPhase="1" />
      <FAME IsScanned="1" Volume="6554" />
      <Automix MixType="3" TempoStart="690447" TempoEnd="13079663" CutStart="690656" CutEnd="13711264" FadeStart="23040" FadeEnd="15037952" />
     </Song>
     <Song FileName="Davidaubrun - Egoisme du Conformisme.mp3" FileSize="10911768" TagDate="704141619">
      <Infos SongLength="20048256" Date="704141619" />
      <BPM Bpm="21752" BeatPhase="1" />
      <FAME IsScanned="1" Volume="2972" />
      <Automix CutStart="105248" FadeStart="16896" FadeEnd="20014080" />
     </Song>
     <Song FileName="Muttonheads - Demon On Da Way (Stephane V Rmx).mp3" FileSize="6586418" TagDate="703112043">
      <Infos SongLength="12098304" />
      <BPM Bpm="20045" Phase="1011" />
      <FAME IsScanned="1" Volume="6502" />
      <Automix MixType="1" TempoStart="1011" CutStart="992" CutEnd="11594208" FadeStart="16896" FadeEnd="11919360" />
     </Song>
     <Song FileName="DJ Magamed - Unknow (Energy Original Tech House Version Mix).mp3" FileSize="5439539" TagDate="704172013">
      <Infos SongLength="10973952" />
      <BPM Bpm="20811" Phase="1040" />
      <FAME IsScanned="1" Volume="7904" />
      <Automix MixType="3" TempoStart="1040" TempoEnd="8658416" CutStart="960" CutEnd="9303200" FadeStart="16896" FadeEnd="10925056" />
     </Song>
     <Song FileName="Carbo - Fly To Ibiza.mp3" FileSize="8061014" TagDate="703112033">
      <Infos SongLength="14804352" />
      <BPM Bpm="19895" Phase="1704" />
      <FAME IsScanned="1" Volume="3181" />
      <Automix MixType="3" TempoStart="1704" TempoEnd="13689464" CutStart="1824" CutEnd="14399744" FadeStart="16896" FadeEnd="14424576" />
     </Song>

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    59
    D�tails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 59
    Par d�faut
    Je repose donc le probl�me avec le code pr�c�dent qui a mon avis via une petite adapation va convenir:

    Donc voici le code avec ma petit v�rification en plus:

    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
    <?php
    set_time_limit(0);
     
    $file = "test1.xml";
    $contenu = fread(fopen($file, "r"), filesize($file));
    $nbtitre = preg_match_all('|<Song FileName="(.*)" FileSize=".*" TagDate=".*">.*<BPM Bpm="(.*)"|sU', $contenu, $titre, PREG_SET_ORDER);
    echo '<b>Nbr de titre analysé(s) :'.$nbtitre.'<br/>';
      # Construction du tableau 
      $association = array();
      if ($nbtitre > 0)
      {
      foreach ($titre as $t)
      {  $association[$t[2]] = $t[1]; } }
     print_r($association);
     $verif=count($association);
     echo '<br/><br/>'.$verif;
    ?>
    Voici la r�ponse obtenu avec le petit fichier xml mis au dessus qui a �t� fait de facon a mettre a l'�preuve le code sur toute les difficult�s (m�me BPM, non pr�sence parfois des sous balises, diff�rence dans les balises):

    Code X : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    Nbr de titre analys�(s) :11
    Array ( [20835] => Cadatta - Tri (Jeff Hil0 rmx).mp3 [20354] => Machiavelique Underground ft U115 - Exclusive for u115 over blog com.mp3 [20044] => Danylo - Here Comes The Sound (Jazzy Mix).mp3 [20352] => AdamZ ft Electric Boogie - The AdamZ Project.mp3 [20377] => Sonikadivision - Speed Tribal Remix.mp3 [21752] => Davidaubrun - Egoisme du Conformisme.mp3 [20045] => Muttonheads - Demon On Da Way (Stephane V Rmx).mp3 [20811] => DJ Magamed - Unknow (Energy Original Tech House Version Mix).mp3 [19895] => Carbo - Fly To Ibiza.mp3 )
    
    9

    On voit donc que:

    Pour les titres de meme BPM au nombre de trois:
    20835
    Jeff Hil0 ft Cadatta - Tri.mp3
    Metricks - Waterfoam.mp3
    Cadatta - Tri (Jeff Hil0 rmx)

    Nous avons dans le r�sultat:
    [20835] => Cadatta - Tri (Jeff Hil0 rmx).mp3 OK

    C'est � dire la derni�re occurence du titre au meme BPM.
    Cela dit ce code a au moins le m�rite de me dresser un liste de BPM avec un morc eau uniquement par BPM ;-) !

    Je pense toutefois que si l'effet unique avait �t� sur les titres et non les BPM ca aurait �t� g�nial ! et m'aurait pas virer des r�sultats au contraire ca m'aurait supprimer les doubles dans les titres (et non dans les BPM.)

    Encore un petit soucis poru la balise du XML:
    Code XML : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     <Song FileName="Machiavelique Underground ft U115  - Exclusive for u115 over blog com.mp3" FileSize="65801730">
      <Infos Date="704260340" />
     </Song>
    qui elle ne contient pas d info sur le BPM. cependant pour ce probl�me je pense qu'il faudrait rajouter un if peut etre mais ce probl�me m importe moins.


    Reste plus qu'a enlever cette bijection!!!!

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    59
    D�tails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 59
    Par d�faut
    Bon cool lol mon auto discution m'a permi de r�soudre je pense le premier gros probl�me !
    Comme je le disais faire une bijection en partant du titre et non du BPM aurait �t� extra j'ai donc tout simplement chang� le code ici:


    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    $association[$t[1]] = $t[2].'</br>';
    >>Inversion du 1 et du 2 et rajout du passage a la ligne
    !

    R�sultat:

    Code X : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Nbr de titre analys�(s) :11
    Array ( [Jeff Hil0 ft Cadatta - Tri.mp3] => 20835
    [Metricks - Waterfoam.mp3] => 20835
    [Machiavelique Underground ft U115 - Exclusive for u115 over blog com.mp3] => 20354
    [Danylo - Here Comes The Sound (Jazzy Mix).mp3] => 20044
    [Cadatta - Tri (Jeff Hil0 rmx).mp3] => 20835
    [AdamZ ft Electric Boogie - The AdamZ Project.mp3] => 20352
    [Sonikadivision - Speed Tribal Remix.mp3] => 20377
    [Davidaubrun - Egoisme du Conformisme.mp3] => 21752
    [Muttonheads - Demon On Da Way (Stephane V Rmx).mp3] => 20045
    [DJ Magamed - Unknow (Energy Original Tech House Version Mix).mp3] => 20811
    [Carbo - Fly To Ibiza.mp3] => 19895
    )
    
    11

    Reste le second probl�me qui lui est plus cors� pour le titre qui n'a pas de balise BPM!

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    59
    D�tails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 59
    Par d�faut
    OK donc pour relancer la question et parfaire le code d�finitivement voici clairement le probl�me restant qui se situe sur l'analyse de ce passage irr�gulier du XML:

    Code XML : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <Song FileName="Machiavelique Underground ft U115  - Exclusive for u115 over blog com.mp3" FileSize="65801730">
      <Infos Date="704260340" />
     </Song>
     <Song FileName="Atomic Cat - Red Alert.mp3" FileSize="10059776" TagDate="703112032">
      <Infos SongLength="18481536" />
      <BPM Bpm="20354" Phase="2058" />
      <FAME IsScanned="1" Volume="9107" />
      <Automix MixType="3" TempoStart="2607370" TempoEnd="15308266" CutStart="541344" CutEnd="17549696" FadeStart="185856" FadeEnd="18240000" />
     </Song>

    Le code vient sur le premier titre (Machiav�lique) et ne trouve pas la balise BPM et va la chercher sur le second.
    Conclusion:
    Le premier titre qui n'avait pas de BPM apparait avec le BPM du second qui lui au final n apparait pas.

    On obtient ce r�sultat donc:
    Code X : S�lectionner tout - Visualiser dans une fen�tre � part
     [Machiavelique Underground ft U115 - Exclusive for u115 over blog com.mp3] => 20354

    ALors qu'il faudrait obtenir:
    Code X : S�lectionner tout - Visualiser dans une fen�tre � part
    Atomic Cat - Red Alert.mp3=> 20354

    *** D�tection du nombre de titre pass� a la trappe car ils n avaient pas d info BPM**
    Je rajoute un compteur de titre (info BPM ou pas) afin de mesurer l'ampleur du probl�me:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    $nbtitre = preg_match_all('|<Song FileName="(.*)" FileSize=".*" TagDate=".*">.*<BPM Bpm="(.*)"|sU', $contenu, $titre, PREG_SET_ORDER);
    $compttitre = preg_match_all('|<Song FileName="(.*)"|sU', $contenu, $atitre, PREG_SET_ORDER);
    echo '<b>Nbr de titre présent dans le XML (info BPM ou pas) : '.$compttitre.'</b><br/>';
    echo '<b>Nbr de titre analysé(s) :'.$nbtitre.'<br/>';
    Ce qui sur un gros fichier me donne un total de 1030 titres dont 10 sans info BPM.
    Reste a savoir si c'est possible de ne pas prendre en compte ces 10 titres automatiquement !


    Deux optique pour r�soudre ce probl�me et les deux me conviendrait (je compte faire un traitement local et si le code est pas parfait je suis pret a fire quelque manip suppl�mentaire a la main enfin pas trop!)
    Soit:
    >> Un code qui permette de supprimer au pr�alable dans le fichier XML les balise Song qui ne contienne pas d info BPM (donc de sous balise BPM).
    OU
    >> Une petite adaptation du code pr�sent� ci dessus qui permette de ne pas faire l extraction lorsque le titre n a pas de BPM...
    Par exemple en excluant de la recherche les motif suivant !!!:
    Code XML : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     <Infos Date="704260340" />
     </Song>
    Comment rajouter cette exclusion? ou autre m�thode?

    Help !

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    59
    D�tails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 59
    Par d�faut
    Merci julp pour m'avoir mis sur les bons rails, une petite r�flexion m'a donner la r�ponse finale que je reviendrai poster !
    (cette solution l�ve le second probl�me!)

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    59
    D�tails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 59
    Par d�faut
    Et voila ca roule v�rif faite sur mon fichier de 1200 titres et c'est bon !

    Voila la solution finale, j'ai donc rectifier dans un premier temps en inversant la solution propos� et finalement j'ai abandonn� cette structure de table associative mais en gardant l id�e d'une table a deux colone.
    Pour rep�r� les lignes du XML qui ne comporte pas l info sur le BPM j'ai utiliser un syst�me de compteur double qui se d�cale si il rep�re un titre non renseign� (d�cale uniquement pour l info BPM).
    Ce d�calage alli� a l'exploitation des deux tables g�n�r� par les pre match me donn�e finalement la bonne association au bon endroit.
    Restait au final le traitement de la derni�re ligne car le test d�cal� v�rifie la correspondance des titres au rang n+1, probl�me la aussi r�solu en mettant une sorte de m�moire des derniers r�sultats sortie (voir lasttitre et lastlasttitre).

    Merci beaucoup et je pense que ce code est vraiment tr�s efficace (de toute facon je le saurai car lol je comtpe en faire une grosse grosse exploitation).

    Voici mon code, toutes remarques meme minime susceptible de l optimiser meme un petit peu est la bienvenu vu l usage massif que je veux en faire:

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    <?php
    set_time_limit(0);
    $file = "test.xml";
    $contenu = fread(fopen($file, "r"), filesize($file));
    $nbtitre = preg_match_all('|<Song FileName="(.*)" FileSize=".*" TagDate=".*">.*<BPM Bpm="(.*)"|sU', $contenu, $titre, PREG_SET_ORDER);
    $compttitre = preg_match_all('|<Song FileName="(.*)"|sU', $contenu, $atitre, PREG_SET_ORDER);
    echo '<b>Nbr de titre présent dans le XML (info BPM ou pas) : '.$compttitre.'</b><br/>';
    echo '<b>Nbr de titre analysé(s) :'.$nbtitre.'<br/>';
     
     //Contruction du tableau avec détection des titres sans info BPM
    $association = array();
     $inc=0;
     $compteurtable=0;
     $titresansbpm=0;
    while ($inc<$compttitre-1)
    {
    	//On vérifie que le parseur n a pas sauter un titre à cause d un manque d info BPM
    	$incc=$inc+1;
    	$positionpointeur=$incc-$titresansbpm;
    	if ($titre[$positionpointeur][1]==$atitre[$incc][1])
    	{
    		echo "<br/>la condition ".$titre[$positionpointeur][1]."==".$atitre[$incc][1]." est respecté ";	
    		$t1=$atitre[$inc][1];
    		$t2=$titre[$compteurtable][2];
    		echo "<br/>Enregistrement du titre: ".$t1;
    		echo "<br/>Au BPM: ".$t2."<br/>";
    		echo "<br/><b>Compteur inc(lié au titre): </b>".$inc;
    		echo "<br/><b>Compteur titre sans BPM: </b>".$titresansbpm;
    		echo "<br/><b>Compteur table(lié au bpm): </b>".$compteurtable."<br/>";
     
    		$association[$compteurtable][0] = '<br/>'.$t1;
    		$association[$compteurtable][1] = $t2;
     
    		$compteurtable=$compteurtable+1;
    		$inc=$inc+1;
    		$lastlasttitre=$lasttitre;
    		$lasttitre=1;
    	}
    	else
    	{
    		$inc=$inc+1;
    		$titresansbpm=$titresansbpm+1;
    		echo '<br/>Titre sans BPM<br/>';
    		$lastlasttitre=$lasttitre;
    		$lasttitre=0;
    	}
    }
     
    //Traitement spécifique pour le dernier titre
    $lastitle=$compteurtable+$titresansbpm;
     
    		echo "<br/><b>Compteur inc(lié au titre): </b>".$inc;
    		echo "<br/><b>Compteur titre sans BPM: </b>".$titresansbpm;
    		echo "<br/><b>Compteur table(lié au bpm): </b>".$compteurtable."<br/>";
    		echo "<br/>$lastlasttitre";	
    		echo "<br/>$lasttitre";
     
    if ($lasttitre==1)
    {
    		$t1=$atitre[$inc][1];
    		$t2=$titre[$compteurtable][2];
    		$association[$compteurtable][0] = '<br/>'.$t1;
    		$association[$compteurtable][1] = $t2;
    }
    else
    {
    	if ($lastlasttitre==1)
    	{
    		$preinc=$inc-1;
    		$t1=$atitre[$preinc][1];
    		$t2=$titre[$compteurtable][2];
    		$association[$compteurtable][0] = '<br/>'.$t1;
    		$association[$compteurtable][1] = $t2;
    	}
     
    }
    echo '</br>';
    print_r($association);	
     
    ?>
    Merci pour votre aide !

  9. #9
    Membre exp�riment�

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par d�faut
    Sinon voil� ce que j'avais rapidement cod� en utilisant DOM XML :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $dom = domxml_open_file('song.xml');
    $xpath = xpath_new_context($dom);
    $obj = $xpath->xpath_eval('//Song/BPM[@Bpm]');
    $associations = array();
    foreach ($obj->nodeset as $bpm) {
        $parent = $bpm->parent_node();
    	if ($parent->node_type() == XML_ELEMENT_NODE && $parent->node_name() == 'Song') {
    		$associations[$parent->get_attribute('FileName')] = $bpm->get_attribute('Bpm');
    	}
    }
     
    echo '<pre>';
    print_r($associations);
    echo '</pre>';
    Je voulais �viter l'usine � gaz (un peu fain�ant) par contre si vous comptez l'utiliser j'esp�re qu'il ne sera pas incompatible avec votre version.

    R�sultat obtenu � partir des informations donn�es plus haut :
    Array
    (
    [Jeff Hil0 ft Cadatta - Tri.mp3] => 20835
    [Metricks - Waterfoam.mp3] => 20835
    [Atomic Cat - Red Alert.mp3] => 20354
    [Danylo - Here Comes The Sound (Jazzy Mix).mp3] => 20044
    [Cadatta - Tri (Jeff Hil0 rmx).mp3] => 20835
    [AdamZ ft Electric Boogie - The AdamZ Project.mp3] => 20352
    [Sonikadivision - Speed Tribal Remix.mp3] => 20377
    [Davidaubrun - Egoisme du Conformisme.mp3] => 21752
    [Muttonheads - Demon On Da Way (Stephane V Rmx).mp3] => 20045
    [DJ Magamed - Unknow (Energy Original Tech House Version Mix).mp3] => 20811
    [Carbo - Fly To Ibiza.mp3] => 19895
    )

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    59
    D�tails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 59
    Par d�faut
    Merci pour la pr�cision, mon usine a gaz lol obtient aussi ce r�sultat mais je comparerai les deux et leur vitesse (et fiabilit� si d'autre probl�mes apparaissent).

    En tout cas je vais pouvoir �tudier ce code car moi je sais pas faire ce genre de chose

    Pour la petite histoire mon projet est de faire une base de BPM et ensuite de l'exploiter en AJAX ce qui sera la grosse difficult�, cependant j'ai d�ja r�ussi a faire marcher le livegrid de Rico donc j'ai bonne espoir d'avoir juste a l adapter a mon probl�me.
    En tout cas cela va etre interessant d optimiser tout ca vu la taille a venir de la base (>500 000 morceaux pour l objectif )

    Pour la structure de ma base mysql j'ai pens� s�parer en deux table:
    Artiste (idartiste, artiste)
    et
    Titre (idtitre, idartiste, bpm)

    Dois pousser a l extreme pour optimiser a fond en rajoutant une base bpm?

  11. #11
    Membre du Club
    Homme Profil pro
    Architecte
    Inscrit en
    Juin 2005
    Messages
    8
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activit� : Architecte
    Secteur : High Tech - Produits et services t�l�com et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 8
    Par d�faut
    Je peux t'assurer U115 que la version utilisant DOM est beaucoup plus rapide et plus s�curis�e dans le sens o� c'est le parseur XML qui fait le boulot

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    59
    D�tails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 59
    Par d�faut
    Merci beaucoup Spawnrider de ta venue !
    Ok je retiens alors ce point.
    Cependant au vue de la suite de mon travail a priori je ne devrai pas avoir a parser de gros fichier xml d un coup (je vais en fait r�cup�r� des fichiers xml au fur et a mesure), j'ai maintenant fais le formulaire dynamque qui me permet d'afficher les diff�rents r�sultat afin de controler le bon nommage des morceaux et deux colonnes associ�s titre et auteur pass� par un code de pr�nettoyage qui m'aide a remettre tout bien,
    je v�rifie donc pour chaque ligne que ca me plait (normalement a moyen terme le code de nettoyage devrait etre assez efficace pour que la v�rif visuel aille de plus en plus vite mais pour garder un controle qualit� je ne peux pas l enlever).

    Tout est donc en place maintenant.
    Une fois tout cela fait il faudra que je bosse sur des modules qui me permette un controle de la base totale (genre pour d�tecter l'�criture du meme artiste sous deux noms proche par exemple D Guetta et David Guetta).

    Voila merci pour votre aide j'ai tout ce qui me faut pour bien bosser, une fois tout cela fait je reviendrai sans doute dans la section AJAX !

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    59
    D�tails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 59
    Par d�faut
    Apr�s avoir commencer a r�cup�r� et � traiter les 5000 premiers titres et vu le travail que cela repr�sente j'aimerai bien r�cup�r� aussi l'information sur la dur�e du titre, cela serai vraiment trop dommage de pas sauter d�s le d�part sur cette opportunit�.

    Dans le cas ou je reste sur la m�thode initiale puis je formul� un preg_match_all tel qu'il me r�cup�re le champ SongLength pour le motif type N�1:

    Code XML : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    <Song FileName="Cerrone - Give Me Love.mp3" FileSize="6750208" TagDate="705021732">
      <Infos SongLength="12448512" />
      <BPM Bpm="20752" Phase="15744" />
      <FAME IsScanned="1" Volume="6028" />
      <Automix MixType="3" TempoStart="15744" TempoEnd="11304832" CutStart="14528" CutEnd="11843232" FadeStart="29696" FadeEnd="12062208" />
     </Song>

    Mais aussi tel qu'il ne r�cup�re rien sur ce motif N�2:
    Code XML : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    <Song FileName="david_guetta_-_open_your_eyes_(acapella).mp3" FileSize="56749" 
    TagDate="705020853"><Infos SongLength="102528" />
      <BPM BeatPhase="-1" />
      <FAME IsScanned="1" Volume="6509" />
      <Automix FadeStart="16896" FadeEnd="86016" />
     </Song>



    et rien aussi sur ce motif N�3:
    Code XML : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    <Song FileName="Kleptomik - Nightclub Desillusion.mp3" FileSize="6544292" 
    TagDate="705022054"><Infos Date="705022033" />
     </Song>

    Mon probl�me est que actuellement j'ai fais une r�cup�ration qui r�cup�re sur les motifs 1 et 2 et que cela ne me va pas car je voudrai ensuite caler ma transcription dans la base sur celle du BPM donc r�cup�r� la longueur du morceau que lorsque le BPM est r�cup�r�, je rappelle la fonction de r�cup�ration du BPM:
    $nbtitre = preg_match_all('|<Song FileName="(.*)" FileSize=".*" TagDate=".*">.*<BPM Bpm="(.*)"|sU', $contenu, $titre, PREG_SET_ORDER)

    Y a t il une requete pour le preg_match ?

    Si vraiment ce n'est pas possible je vais devoir passer a php5, merci de me donner votre avis.
    Si je dois passer a php5 comment modifier la requette en dom pour r�cup�r� cette longueur? (voir motif 1 pour la structure).

Discussions similaires

  1. R�ponses: 3
    Dernier message: 19/11/2012, 13h47
  2. R�ponses: 1
    Dernier message: 22/04/2008, 11h24
  3. R�ponses: 3
    Dernier message: 06/08/2007, 03h44
  4. [DOM] (org.w3c.dom) copier un noeud d'un fichier XML dans un autre fichier XML
    Par snoop dans le forum Format d'�change (XML, JSON...)
    R�ponses: 4
    Dernier message: 13/02/2007, 17h22
  5. Importer le contenu un fichier xml dans un autre fichier xml
    Par gedeon555 dans le forum XML/XSL et SOAP
    R�ponses: 5
    Dernier message: 27/07/2005, 11h49

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