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:
    345
    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 593
    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:
    345
    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:
    345
    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:
    345
    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++;
                }
        }
     }
    }
    
     
Chargement...
Similar Threads - Nettoyer fichier regex Forum Date
Nettoyer un fichier .htacces qui est trop gros URL Rewriting et .htaccess 18 Avril 2017
Nettoyer les liens "pirates" de Google Débuter en référencement 21 Juin 2019
Nettoyer les 404s de bots près migration URL Rewriting et .htaccess 19 Mai 2018
Actions pour "nettoyer" un site...votre avis ? Problèmes de référencement spécifiques à vos sites 2 Janvier 2018
Nettoyer une base données MySQL Développement d'un site Web ou d'une appli mobile 13 Novembre 2014
Nettoyer un très grand nombre d'URL sortantes Développement d'un site Web ou d'une appli mobile 22 Mai 2014
nettoyer les différents avis Problèmes de référencement spécifiques à vos sites 2 Avril 2014
Nettoyer les liens sortant de mon site Débuter en référencement 16 Avril 2013
Nettoyer un numéro de téléphone avant INSERT Développement d'un site Web ou d'une appli mobile 17 Février 2012
Cherche à nettoyer ma BDD mysql Administration d'un site Web 2 Décembre 2011
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice