Nettoyer fichier avec regex

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

toto2525
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 349
Enregistré le: 20 Sep 2007

Nettoyer fichier avec regex

Message le Dim Jan 24, 2010 13: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.

jcaron
WRInaute accro
WRInaute accro
 
Messages: 2820
Enregistré le: 13 Fév 2004

Re: Nettoyer fichier avec regex

Message le Dim Jan 24, 2010 16: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.

toto2525
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 349
Enregistré le: 20 Sep 2007

Re: Nettoyer fichier avec regex

Message le Dim Jan 24, 2010 16: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 !

toto2525
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 349
Enregistré le: 20 Sep 2007

Re: Nettoyer fichier avec regex

Message le Lun Jan 25, 2010 14: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.

toto2525
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 349
Enregistré le: 20 Sep 2007

Re: Nettoyer fichier avec regex

Message le Lun Jan 25, 2010 16: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++;
            }
    }
 }
}


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.

Lectures recommandées sur ce thème :