Nettoyer fichier avec regex

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par toto2525, 24 Janvier 2010.

  1. toto2525
    toto2525 WRInaute occasionnel
    Inscrit:
    20 Septembre 2007
    Messages:
    348
    J'aime reçus:
    0
    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:
    <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:
    <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:
    $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.
     
  2. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 821
    J'aime reçus:
    0
    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:
    $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.
     
  3. toto2525
    toto2525 WRInaute occasionnel
    Inscrit:
    20 Septembre 2007
    Messages:
    348
    J'aime reçus:
    0
    Vraiment MERCI Jacques pour ton aide, tes 3 lignes de codes font exactement ce que je souhaitais faire :eek:

    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 !
     
  4. toto2525
    toto2525 WRInaute occasionnel
    Inscrit:
    20 Septembre 2007
    Messages:
    348
    J'aime reçus:
    0
    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:
    $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:
    for($i=0;$i<$max;$i++) 
    { 
    echo "".$out[0][$i]."</br>"; 
    } 
    
    J'aurais bien tous mes chiffres les uns sous les autres :

    Code:
    12
    21
    66
    77
    14
    87
    etc...
    
    Comment rajouter les (A1, B1, C1, etc...) devant mes chiffres :

    Code:
    A1 => 12
    B1 => 21
    C1 => 66
    D1 => 77
    A2 => 14
    B2 => 87
    etc...
    
    J'ai essayé pas mal de solutions mais je bloque !

    Code:
    $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.
     
  5. toto2525
    toto2525 WRInaute occasionnel
    Inscrit:
    20 Septembre 2007
    Messages:
    348
    J'aime reçus:
    0
    J'ai trouvé la solution (comme quoi j'ai pas le crâne si vide que ça :p ) :

    Code:
    $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++;
                }
        }
     }
    }