IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

transformation de chaines de caracteres multiples


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 4
    Points : 4
    Points
    4
    Par défaut transformation de chaines de caracteres multiples
    Bonjour a tous,

    J'ai un petit probleme que je n'arrive pas a resoudre. Je souhaiterai faire un script/fonction qui me transformerai un fichier txt qui contiens plus de 200 lignes de cette sorte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Smiley = ".\Logan15\01.png", 0, ":) :-) =)", ":)"
    Smiley = ".\Logan15\02.png", 0, ":)) :-)) :D =)) :-D", ":))"
    Smiley = ".\Logan15\03.png", 0, ":-))) :))) :DD ^^^^^^ LOL lol *JOKINGLY* =)))", ":-)))"
    en fichier php de cette sorte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $_SESSION['message'] = str_replace (array (':-)))', ':)))', ':DD', '^^^^^^', 'LOL', 'lol', '*JOKINGLY*', '=)))'), '<img title="Logans Smileys" src="images/smilies/logans/03.png" style="vertical-align:middle;" alt="Logans Smileys" />', $_SESSION['message']);
    $_SESSION['message'] = str_replace (array (':))', ':-))', ':D', '=))', ':-D'), '<img title="Logans Smileys" src="images/smilies/logans/02.png" style="vertical-align:middle;" alt="Logans Smileys" />', $_SESSION['message']);
    $_SESSION['message'] = str_replace (array (':)', ':-)', '=)'), '<img title="Logans Smileys" src="images/smilies/logans/01.png" style="vertical-align:middle;" alt="Logans Smileys" />', $_SESSION['message']);
    Comme vous pouvez le voir j'aimerai extraire le nom de l'image, la multitude de smilies entre les premieres quotes que je separe dans un array, et le dernier smilie est en option mais c'est bien si je l'extraits aussi enventuellement.

    J'utilise cette fonction ci-dessous qui fait un bon boulot mais pas completement et comme je suis débutant avec le preg_replace, preg_match et tokens, je ne comprends pas tout malheureusement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $s = 'Smiley = ".\Logan15\10.png", 0, ":-T :-t :T :t =T =t", ":-T"';
    $tokens = token_get_all('<?php '. $s .' ?>');
    foreach($tokens as $tok) {
       if (is_array($tok) && !in_array(token_name($tok[0]), array('T_OPEN_TAG', 'T_WHITESPACE', 'T_CLOSE_TAG'))) {
          $result[] = $tok[1];
       }
    }
    var_dump($result);
    Merci pour votre aide !

  2. #2
    Membre expérimenté
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Points : 1 341
    Points
    1 341
    Par défaut
    N'étant moi non plus pas spécialement a l'aise avec les preg_replace, naturellement ce que je ferai, c'est ne pas m'en servir

    Si on prend une ligne de ton fichier source, t'a des virgules pour séparer les champs (s'pas malin de mettre une virgule, on peut en trouver souvent dans des texte, et potentiellement dans des smileys, mais bon, ca c'est annexe ^^).

    Donc, avec un ptit explode, tu splits ta chaine par rapport à la virgule.
    De fait, tu va te retrouver avec un tableau qui contiendra chaque élément interessant de ta chaine.

    A partir de la, tu n'a plus qu'a reconstruire la chaine finale, en rajoutant ce que tu veux.

    Genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $maligne = 'Smiley = ".\Logan15\01.png", 0, ":) :-) =)", ":)"';
    $tab_element = explode(",", $maligne);
    Avec un peu de bol dans $tab_maligne[2] tu va avoir " :-) =)", et la, oh joie, tu refait un explode, mais par rapport aux espaces.
    Et maintenant que tu as tous tes éléments, tu reconstruits en concaténant avec "." genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $la_liste_de_smiley = explode(' ', $tab_element[2]);
    $maligne_finale = "$_SESSION['message'] = str_replace (array (";
    foreach ($la_liste_de_smiley as $smiley) {
      $maligne_finale .= $smiley . ", ";
    }
    Apres il te faudra jouer un ptit peu pour ne pas avoir de virgule en trop et bien construire ta chaine, mais l'idée est là ;-)

    ps : Le code donné est juste la en exemple, je ne l'ai pas testé, il y a peut-être des erreurs de syntaxe.

  3. #3
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    j'ai pas tout compris a ton histoire de dernier smiley, je te laisse donc arranger le code suivant pour l'adapter... good luck ;o)

    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
    <?php
     
    $texte='
    Smiley = ".\Logan15\01.png", 0, ":) :-) =)", ":)"
    Smiley = ".\Logan15\02.png", 0, ":)) :-)) :D =)) :-D", ":))"
    Smiley = ".\Logan15\03.png", 0, ":-))) :))) :DD ^^^^^^ LOL lol *JOKINGLY* =)))", ":-)))"
    ';
     
    $texte=explode("\n", $texte);
     
    $masque='#^Smiley = "..Logan15.([0-9]+).png", 0, "([^"]+)", "([^"]+)"#e';
    $replace='convert("\1", "\2", "\3")';
     
    function convert($num, $smiles, $lastSmile) {
        $listeSmileys = "'".implode("','", explode(' ', $smiles))."'";
        return '$_SESSION[\'message\'] = str_replace (array ('.$listeSmileys.'), \'<img title="Logans Smileys" src="images/smilies/logans/'.$num.'.png" style="vertical-align:middle;" alt="Logans Smileys" />\', $_SESSION[\'message\']);';
    }
     
    $texte= preg_replace($masque, $replace, $texte);
     
     
    echo '<pre>';
    $texte = array_map('htmlentities', $texte);
    print_r($texte);
    echo '</pre>';
     
    ?>

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup pour votre aide a tous les deux. C'est exactement ce que je recherchais !

    Désolé pour mon manque de clarté au sujet du dernier smilie, je m'en sert dans un autre code mais c'est bon maintenant je vais bucher un peu ce code pour adapter si besoin.

    Merci encore !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. transformer une chaine de caractere en liste
    Par neo666 dans le forum Caml
    Réponses: 17
    Dernier message: 26/08/2008, 15h57
  2. Réponses: 1
    Dernier message: 13/06/2007, 13h14
  3. transformer une chaine de caracteres en image
    Par jsunnyduckk dans le forum 2D
    Réponses: 7
    Dernier message: 16/02/2007, 14h51
  4. Réponses: 14
    Dernier message: 01/03/2006, 08h32
  5. transformer une chaine de caracteres en du code
    Par giova_fr dans le forum C++
    Réponses: 6
    Dernier message: 15/01/2006, 16h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo