[PHP] Remplacement de texte

Remplacement de texte [PHP] - PHP - Programmation

Marsh Posté le 04-03-2010 à 00:47:09    

Bonsoir,
 
J'utilise WordPress pour un blog multi-utilisateurs, et en particulier les champs personnalisés. Lorsque l'utilisateur ajoute un article, il remplit un certain nombre de ces champs suivant un code.  
Dans mon cas, on lui demande le code IATA de l'aéroport de départ (ORY par exemple) afin de faciliter la rédaction. Une fois l'article publié, sur sa page apparait effectivement Départ de ORY.
 
Ce que je voudrais, c'est qu'un script viennent en dernier lieu remplacer ORY par Aéroport d'Orly. Et ceux pour tous les aéroports que j'ai mis dans une liste.
 
Le probleme qui se pose, c'est que la liste contient 3600 aéroports. Cette liste est de la forme : XXX [tab] Aéroport de Xxx avec un aéroport par ligne. Je ne sais pas trop comment faire en PHP une solution qui ne sature pas le serveur (déjà peu performant...). J'ai pensé, à partir d'Excel, de faire un fichier .txt qui aura pour nom ORY.txt avec à l'intérieur "Aéroport d'Orly" et en utilisant une balise HTML faire afficher le texte contenu dans le fichier. On aura au final autant de fichiers txt que d'aéroports. Je ne vois pas comment faire une telle chose sur Excel et je me demande surtout si c'est la meilleure solution.
 
En attente de vos lumières,
Bonne nuit.

Reply

Marsh Posté le 04-03-2010 à 00:47:09   

Reply

Marsh Posté le 04-03-2010 à 10:07:03    

xxx [tab] label
Est un format texte avec délimiteur "tabulation".
Si c'est un fichier tu peux te pencher sur fgetcsv http://php.net/manual/fr/function.fgetcsv.php
ou faire toi même un explode de ta variable sur le délimiteur "\t" (qui représente la tabulation, valable unieuqment avec double quotes)

 

Avec ça tu obtiens aisément un tableau, et tu peux faire un str_replace avec ce tableau pour les valeurs de recherche et de remplacement.

 

Pas très compliqué, et pas besoin de faire 3600 fichiers :)


Message édité par PunkRod le 04-03-2010 à 10:07:52
Reply

Marsh Posté le 04-03-2010 à 12:11:43    

Ah d'accord je comprends. Donc en fait au final j'envoie la liste excel sur le serveur, il recherchera ORY dans la liste pour la remplacer par Aeroport d'Orly. Okay.
Cependant, le fichier fait 300 ko, ça va pas poser problème au serveur pour chercher à remplacer à chaque génération de page la valeur ORY (exemple) ?

Reply

Marsh Posté le 04-03-2010 à 13:19:08    

Sinon, direct dans un fichier php, tu fais un array de ce genre :

Code :
  1. $Codes = array("ORY" => "Aéroport d'Orly", "CDG" => "Aéroport Roissy CDG", ...);
  2. $Cles = array_keys($Codes);
  3. $Valeurs = array_values($Code);
  4. $Texte = str_replace($Cles, $Valeurs, $Texte);


Comme ça t'as pas de parsage à faire du fichier xls.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 04-03-2010 à 13:27:41    

Merci pour les précisions, mais en fait je voudrais généraliser la technique pour tous les aéroports contenus dans une liste. Et comme j'ai pas envie de me fader le code pour 3600 aéroports, j'aurais voulu que le script se fasse avec la liste que j'ai...

Reply

Marsh Posté le 04-03-2010 à 13:30:41    

Ben tu fais un petit script php qui, à partir du fichier des 3600 aéroports, va générer une fois pour toute ton array (en gros, un script php va générer du code php) ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 04-03-2010 à 13:33:14    

Hum... okay, mais je vois pas trop comment m'y prendre.
j'utilise la fonction str_replace dans laquelle j'utilise la fonction fgetcsv ?

Reply

Marsh Posté le 04-03-2010 à 13:35:11    

anteid a écrit :

Ah d'accord je comprends. Donc en fait au final j'envoie la liste excel sur le serveur, il recherchera ORY dans la liste pour la remplacer par Aeroport d'Orly. Okay.
Cependant, le fichier fait 300 ko, ça va pas poser problème au serveur pour chercher à remplacer à chaque génération de page la valeur ORY (exemple) ?


 :non:  
Il faut faire le remplacement à la création...
 
Je ne sais pas comment fonctionnent les "champs personnalisés" de WP, mais tu as plusieurs possibilités :
 
1. Liste déroulante. A la création du formulaire, au lieu d'avoir un bête champ texte pour la saisie du code IATA, tu généres une liste déroulante à partir de ce fameux fichier (tu peux peut-être même envisager de la générer une bonne fois pour toutes, ça ne doit pas évoluer des masses).
=> L'utilisateur sélectionne "ORY", et le formulaire envoie "Aéroport d'Orly".
 
2. Gestion à l'enregistrement du message.
Au moment de l'enregistrement, tu rajoutes une fonction (ou du bête code) qui va chercher la correspondance, et effectue le remplacement.

Reply

Marsh Posté le 04-03-2010 à 13:45:44    

anteid a écrit :

Hum... okay, mais je vois pas trop comment m'y prendre.
j'utilise la fonction str_replace dans laquelle j'utilise la fonction fgetcsv ?


 
Tu fais un script php qui va te servir une fois (ou à chaque fois que le fichier xls viendrait à changer) pour faire un "import" (ie, une conversion). Il va :
1) créer une variable de type array (ex $CodesAeroports = array(); )qui va stocker le résultat de la conversion du fichier xls en tableau associatif code/libellé.
1) lire ligne par ligne ton fichier xls (avec la méthode de ton choix, fgetcsv() si c'est un fichier au format csv).
2) pour chaque ligne lue, il va créer une entrée dans la variable de type array pour y ajouter le code de l'aéroport et son libellé (ex : $CodesAeroports [$Code] = $Libelle; )
3) une fois tout le fichier lu, générer un fichier texte ayant pour extension .php et contenant du code php (on va y trouver les valises <?php et ?> et entre les 2, la déclaration en syntaxe php de ta variable $CodesAeroports et ses clés/valeurs.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 04-03-2010 à 13:52:06    

Ce qui m'intéresse, c'est la deuxième possibilité décrite par macgawel, celle que rufo explique.
Merci pour vos précisions, j'vais essayer de faire le code comme ça (ça fait super longtemps que j'ai pas fait de PHP, ça finit par s'oublier...)

Reply

Marsh Posté le 04-03-2010 à 13:52:06   

Reply

Marsh Posté le 04-03-2010 à 13:57:39    

Le script devrait pas dépasser les 20/30 lignes je pense en utilisant les bonnes fonctions...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 04-03-2010 à 18:38:33    

Sinon je me demandais... ça serait peut-être plus simple en passant par MySQL, non ?

Reply

Marsh Posté le 05-03-2010 à 09:58:01    

La technique reste globalement la même : au lieu de stocker tes associations codes/aéroports dans un tableau php (array), tu les stockes dans une BD. Si y'a pas d'autres traitements que du find/replace, je pense qu'il vaut mieux rester sur un tableau en php, ça sera plus rapide (la connexion à une BD a un coût pas négligeable).


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 05-03-2010 à 14:54:36    

Je lutte comme pas possible alors on va commencer doucement :
 

Code :
  1. <?php
  2. $code_IATA = array ( 'Orly, France' => 'ORY', 'Marseille Provence, France' => 'MRS', 'Dubai, United Arab Emirates' => 'DXB', 'Aguni, Japan' => 'AGJ');
  3. $aeroport = array_search('ORY', $code_IATA);
  4. echo '' . $aeroport . '';
  5. ?>


Ce code fonctionne, il affiche bien Orly pour ORY, etc. Il reste deux choses, et je ne sais pas comment faire.
 
Dans WordPress, le champ personnalisé correspondant au code IATA de l'aéroport de départ peut être affiché sur la page grâce au code suivant :
 

Code :
  1. <?php $values = get_post_custom_values("aeroport_de_depart" );
  2. if (isset($values[0])) { ?>
  3. Départ de : <?php $values = get_post_custom_values("aeroport_de_depart" ); echo $values[0]; ?>
  4. <?php } ?>


 
Comment ajouter ce bout de code dans le 1er pour que le script remplace le code IATA (ORY par exemple) par le nom de l'aéroport (Orly) ?
De plus, là j'ai rentré deux trois aéroports histoire de tester le script. Comment faire intervenir la liste d'aéroports (1ère colonne : code IATA, 2ème : nom de l'aéroport) ?
 
Merci :)


Message édité par anteid le 05-03-2010 à 15:02:21
Reply

Marsh Posté le 05-03-2010 à 14:57:44    

ça me paraît plus logique de mettre comme clé le code de l'aéroport et en valeur son libellé mais bon, ça marche aussi comme ça....
 
Par contre, t'as pas mis de question : tu parles de 2 chose que tu sais pas faire, mais tu ne les mentionnes pas :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 05-03-2010 à 14:59:02    

[quotemsg=1971421,15,43850]ça me paraît plus logique de mettre comme clé le code de l'aéroport et en valeur son libellé mais bon, ça marche aussi comme ça....
 
Après, suffit d'utiliser str_replace() comme je te l'ai dit dans un de mes précédents post...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 05-03-2010 à 15:00:30    

rufo a écrit :

Par contre, t'as pas mis de question : tu parles de 2 chose que tu sais pas faire, mais tu ne les mentionnes pas :/


Oui, excuse-moi, j'ai validé le message par erreur alors que je ne l'avais pas fini ^^
Et puis concernant ta remarque ça me parait plus logique aussi. Bon, il se trouve que j'ai réussi comme ça. J'vais voir avec str_replace()


Message édité par anteid le 05-03-2010 à 15:01:44
Reply

Marsh Posté le 06-03-2010 à 12:16:03    

Mais euh... à quel niveau utiliser str_replace() ??

Reply

Marsh Posté le 08-03-2010 à 10:38:40    

au moment d'afficher l'info dans l'ihm ou, plus généralement, au moment où t'as besoin de faire la conversion code aéroport <-> nom aéroport :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed