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:
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:
[Machiavelique Underground ft U115 - Exclusive for u115 over blog com.mp3] => 20354
ALors qu'il faudrait obtenir:
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:
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 !!!:
1 2
| <Infos Date="704260340" />
</Song> |
Comment rajouter cette exclusion? ou autre méthode?
Help !
Partager