Consultez la formation SEO spéciale Wordpress
par WebRankInfo / Ranking Metrics

Messages: 349

Enregistré le: 20 Sep 2007

Message le Dim Jan 24, 2010 14:20

Salut,

J'essaie de supprimer des chiffres qui sont dans un fichier .xhtml sur mon ordinateur mais j'ai un peu de mal avec la boucle et les regex. Voici comment se trouve ces chiffres dans mon fichier_a_nettoyer.xhtml :

Code: Tout sélectionner
<a href="javascript:__doPostBack('ctl00$cphMainContent$ctl295','')">1925&nbsp;<span style='color:green'>-10%</span>
<a href="javascript:__doPostBack('ctl00$cphMainContent$ctl296','')">2210&nbsp;<span style='color:green'>-5%</span>


Je souhaite supprimer les chiffres avec l'espace derrière ces chiffres "1925&nbsp;", "2210&nbsp;", etc... ce qui donnerait une fois nettoyer :

Code: Tout sélectionner
<a href="javascript:__doPostBack('ctl00$cphMainContent$ctl295','')"><span style='color:green'>-10%</span>
<a href="javascript:__doPostBack('ctl00$cphMainContent$ctl296','')"><span style='color:green'>-5%</span>


Voici mon code :

Code: Tout sélectionner
$fp = join( '', file( 'http://127.0.0.1/mon-site.com/fichier_a_nettoyer.xhtml' ) );
while(!feof($fp))
{
$toute_ligne = fread($fp, 8192);
$motif = "`<a href=\"javascript:__doPostBack([^<]+)\">[^<]+<span style='color:green'>`";
preg_match_all($motif,$fp,$out);
$toute_ligne = str_replace("".$out[0][0]."","",$toute_ligne);
fwrite($fp,$toute_ligne);
}
fclose($fp);


Ca marche pas avec ce code, quelqu'un peut-il m'aider un peu ?

D'avance merci.
Haut
4 Réponses
Messages: 2820

Enregistré le: 13 Fév 2004

Message le Dim Jan 24, 2010 17:07

Sans vouloir être méchant, je ne sais pas trop ce qui pourrait marcher dans ton code... Il y a un sale mélange entre descripteurs de fichiers, chaîne de caractères, regex, remplacements, et j'en passe. La regex est aussi assez fantaisiste. Il faudrait peut-être que tu consacres un peu de temps à lire la doc de PHP, ça pourrait aider...

Je n'ai pas l'habitude de coder en PHP, mais j'aurais tendance à dire:
Code: Tout sélectionner
$file = file_get_contents("nom_du_fichier");
$conversion = preg_replace('/(<a href="javascript:__doPostBack[^>]+>)[^<]+(<span style=.color:green.>)/','$1$2',$file);
echo $conversion;


Reste ensuite à savoir ce que tu veux faire une fois la conversion faite (juste afficher, sauvegarder dans un fichier...).

Jacques.
Haut
Messages: 349

Enregistré le: 20 Sep 2007

Message le Dim Jan 24, 2010 17:27

Vraiment MERCI Jacques pour ton aide, tes 3 lignes de codes font exactement ce que je souhaitais faire :o

Je savais déjà que je n'étais pas un génie en programmation php mais là tu viens de me le prouver, j'ai un peu honte :oops:

Encore merci, tu ne peux pas t'imaginer le coup de pouce que tu viens de me donner !
Haut
Messages: 349

Enregistré le: 20 Sep 2007

Message le Lun Jan 25, 2010 15:23

Voilà un nouveau casse tête pour moi (oui je sais je suis pas bien doué :cry: ) :

J'ai 3 tableaux dans un fichier html (structure des tableaux <table><tr><td></td><td></td><td></td><td></td></tr></table>, etc...) contenant chacun 20 chiffres, chaque tableau est identique par sa structure mais pas par son contenu, ces tableaux ressemblent à ça :

1er tableau
--| A | B | C | D
1 | 12 21 66 77
2 | 14 87 44 63
3 | 23 10 58 88
4 | 52 54 87 78
5 | 44 55 33 11

Je souhaite lister chaque tableau, comme cela :

A1 => 12
B1 => 21
C1 => 66
D1 => 77
A2 => 14
B2 => 87
etc... jusqu'à la fin de mon troisième tableau

J'ai bidouillé ce code ci-dessous :

Code: Tout sélectionner
$file = file_get_contents("http://127.0.0.1/mon-site.com/mon-fichier.html");
$motif = '/<td class="mes_chiffres" align="center">(.*?)<\/td>/si';
preg_match_all($motif, $file, $out);
$max = count($out[0]);// les 60 chiffres contenus dans mon fichier html $out[0]


Cela fonctionne bien et si j'exécute le code ci-dessous :

Code: Tout sélectionner
for($i=0;$i<$max;$i++)
{
echo "".$out[0][$i]."</br>";
}


J'aurais bien tous mes chiffres les uns sous les autres :

Code: Tout sélectionner
12
21
66
77
14
87
etc...


Comment rajouter les (A1, B1, C1, etc...) devant mes chiffres :

Code: Tout sélectionner
A1 => 12
B1 => 21
C1 => 66
D1 => 77
A2 => 14
B2 => 87
etc...


J'ai essayé pas mal de solutions mais je bloque !

Code: Tout sélectionner
$file = file_get_contents("http://127.0.0.1/mon-site.com/mon-fichier.html");
$motif = '/<td class="mes_chiffres" align="center">(.*?)<\/td>/si';
preg_match_all($motif, $file, $out);
$max = count($out[0]);// les 60 chiffres contenus dans mon fichier html

$headers=array('1er tableau','2ième tableau','3ième tableau');
$headers2=array('A','B','C','D');
$headers3=array('1','2','3','4','5');
for($i=0;$i<sizeof($headers);$i++){
    for($i2=0;$i2<sizeof($headers2);$i2++){
        for($i3=0;$i3<sizeof($headers3);$i3++){
                echo "$headers[$i] $headers2[$i2] $headers3[$i3] => $out[0][$max]<br>";
    }
 }
}


Merci pour votre aide.
Haut
Messages: 349

Enregistré le: 20 Sep 2007

Message le Lun Jan 25, 2010 17:06

J'ai trouvé la solution (comme quoi j'ai pas le crâne si vide que ça :P ) :

Code: Tout sélectionner
$file = file_get_contents("http://127.0.0.1/mon-site.com/mon-fichier.html");
$motif = '/<td class="mes_chiffres" align="center">(.*?)<\/td>/si';
preg_match_all($motif, $file, $out);
$max = count($out[0]);// les 60 chiffres contenus dans mon fichier html

$headers=array('1er tableau','2ième tableau','3ième tableau');
$headers2=array('A','B','C','D');
$headers3=array('1','2','3','4','5');

$i4=0;
while($i4<$max){
for($i=0;$i<sizeof($headers);$i++){
    for($i2=0;$i2<sizeof($headers2);$i2++){
        for($i3=0;$i3<sizeof($headers3);$i3++){
                echo "$headers[$i] $headers2[$i2] $headers3[$i3] => ".$out[0][$i4]."<br>";
$i4++;
            }
    }
 }
}
Haut

Formation recommandée sur ce thème :

Formation SEO spéciale Wordpress : apprenez à optimiser le référencement naturel d'un site fait avec Wordpress... Formation Ranking Metrics animée par un expert SEO / Wordpress.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.