Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1934 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] Remplacement de texte

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP] Remplacement de texte

n°1971027
anteid
Posté le 04-03-2010 à 00:47:09  profilanswer
 

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.

mood
Publicité
Posté le 04-03-2010 à 00:47:09  profilanswer
 

n°1971061
PunkRod
Digital Mohawk
Posté le 04-03-2010 à 10:07:03  profilanswer
 

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
n°1971128
anteid
Posté le 04-03-2010 à 12:11:43  profilanswer
 

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) ?

n°1971150
rufo
Pas me confondre avec Lycos!
Posté le 04-03-2010 à 13:19:08  profilanswer
 

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
n°1971152
anteid
Posté le 04-03-2010 à 13:27:41  profilanswer
 

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...

n°1971158
rufo
Pas me confondre avec Lycos!
Posté le 04-03-2010 à 13:30:41  profilanswer
 

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
n°1971160
anteid
Posté le 04-03-2010 à 13:33:14  profilanswer
 

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

n°1971161
macgawel
Posté le 04-03-2010 à 13:35:11  profilanswer
 

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.

n°1971163
rufo
Pas me confondre avec Lycos!
Posté le 04-03-2010 à 13:45:44  profilanswer
 

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
n°1971168
anteid
Posté le 04-03-2010 à 13:52:06  profilanswer
 

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...)

mood
Publicité
Posté le 04-03-2010 à 13:52:06  profilanswer
 

n°1971171
rufo
Pas me confondre avec Lycos!
Posté le 04-03-2010 à 13:57:39  profilanswer
 

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
n°1971249
anteid
Posté le 04-03-2010 à 18:38:33  profilanswer
 

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

n°1971325
rufo
Pas me confondre avec Lycos!
Posté le 05-03-2010 à 09:58:01  profilanswer
 

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
n°1971418
anteid
Posté le 05-03-2010 à 14:54:36  profilanswer
 

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
n°1971421
rufo
Pas me confondre avec Lycos!
Posté le 05-03-2010 à 14:57:44  profilanswer
 

ç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
n°1971422
rufo
Pas me confondre avec Lycos!
Posté le 05-03-2010 à 14:59:02  profilanswer
 

[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
n°1971423
anteid
Posté le 05-03-2010 à 15:00:30  profilanswer
 

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
n°1971573
anteid
Posté le 06-03-2010 à 12:16:03  profilanswer
 

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

n°1971874
rufo
Pas me confondre avec Lycos!
Posté le 08-03-2010 à 10:38:40  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] Remplacement de texte

 

Sujets relatifs
pb insertion champ vide dans BDD via formulaire (PHP/SQL) [Résolu]Affichage de fiche produit en PHP/SQL
Mail automatique (PHP si possible) depuis données SQLapplication PHP sur un CD
Petit projet: classe PHP, framework ou pas ?Error Parse PHP ... :-( Wikimedia
Problème Javascript/Ajax/PHP[PHP] Système de chargement de ma page
Recuperer le texte d'un iframe dans variable :([PHP] Remplacement de texte d'url par l'url...
Plus de sujets relatifs à : [PHP] Remplacement de texte


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR