bonjour,
j'ai un probleme:
j'ai cree un script, pour recuperer dans un fichier des donnees, comprenant entre autre des liens vers d'autres fichiers a analyser.
j'initialise donc mon tableau avec le nom du premier fichier a analyser, je creer une boucle pour parcourir chaque element du tableau (foreach), et dans cette boucle, je rajoute des elements a mon tableau (elements que je recupere en analysant les fichiers).
seulement, la boucle ne fonctionne pas: je recupere bien tous les liens vers mes autres fichiers, mais ces fichiers ne sont pas analyses, comme si le foreach faisait une copie prealable de mon tableau avant de commencer son boulot.
voila le code que j'utilise:
la derniere partie:
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 <?php $lienList[] = "[rapport][DA]blablabla.txt"; $nom_local = "DA.txt"; $text = ""; $text2 = ""; foreach ($lienList as $lien) { //lecture du fichier courant $in = fopen($lien, 'r', FALSE); while (!feof($in)) { $text2 = $text2.fread($in, 1024); } fclose($in); //ajout des liens du fichier au tableau preg_match_all('/<rapport:>"([^\"]+)"/', $text2, $Resultats , PREG_PATTERN_ORDER); foreach( $Resultats[0] as $Key => $Value ) { if(!in_array($Resultats[1][$Key], $lienList) && substr($Resultats[1][$Key], 0, 13) == "[rapport][DA]") { //on verifie que le fichier n'est pas deja enregistres dans le tableau pour eviter doublons et recursivite echo $Resultats[1][$Key].'<br>'; $lienList[]= $Resultats[1][$Key]; } } //recuperation et traitement de mes donnees finales seront fait ici } //me sert actuellement a verifier que tous les liens du fichier ont ete trouves $filelist = fopen ("liens.txt", 'w'); foreach ($lienList as $lien) { fwrite ($filelist, $lien."\n"); } fclose ($filelist); //sauvegarde des donnees que je veux garder $out = fopen($nom_local, 'w'); fwrite($out, $text); fclose($out); ?>
me sort le contenu du tableau de liens, et me donne bien tous les liens contenus dans le premier fichier, ce qui montre que mon tableau est bien mis a jour.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 //me sert actuellement a verifier que tous les liens du fichier ont ete trouves $filelist = fopen ("liens.txt", 'w'); foreach ($lienList as $lien) { fwrite ($filelist, $lien."\n"); } fclose ($filelist);
alors ca doit pouvoir marcher si j'encadre ma boucle (le premier foreach) d'un joli "for", mais:
- je ne serai pas sure que tous mes fichiers soient lus (le "for" c'est pas infini, et il faudra meme le limiter a un nombre assez faible, parce que: )
- ca engendrerait une charge de calcul supplementaire considerable, puisqu'a chaque iteration de la boucle "for", tous les fichiers deja trouves et analyses seraient a nouveau analyses.
si quelqu'un a une solution un peu plus elegante que ca a mon probleme, ca m'arrangerait beaucoup.
merci d'avance.
Partager