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 :

Remplacement rapide dans un fichier texte (RTF) [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre averti Avatar de johweb
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2003
    Messages : 342
    Points : 367
    Points
    367
    Par défaut Remplacement rapide dans un fichier texte (RTF)
    Bonjour à tous,

    J'ai un modèle de fichier texte (en rtf pour conserver la mise en page demandée par le client) dans lequel je dois remplacer des balises par des valeurs qui me sont propres.
    Pour mon cas, j'ouvre un fichier vierge, je parcours mon modèle avec fgets et j'écris dans mon fichier vierge avec fwrite (en remplaçant mes balises).

    Ce code fonctionne très bien et semble assez rapide.

    Mais un nouveau modèle m'a été donné avec une image en entête et pied de page. Le fichier source fait 8Mo... Le temps de recréer mon nouveau document semble interminable (une trentaine de secondes... soit beaucoup trop pour le client final...)
    Quelqu'un connaitrait-il une autre méthode à appliquer pour un gain de temps sur le traitement ?

    Merci !!!

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Je suppose déjà que tu ne peux pas utiliser un autre format que le RTF, n'est ce pas ?

    Si il s'agit d'un problème d'un temps d'attente trop long pour le visiteur, tu pourrais peut être t'orienter vers une interface avec une barre de défilement qui indique où en est le déroulement du l'opération.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20
    Points : 6
    Points
    6
    Par défaut
    Si l'image est assez simple transforme la en gif avec le moins de couleurs possible pour la taille sans que cela soit trop flagrant .

    En espérant que ça ne soit pas une photo :]

  4. #4
    Membre averti Avatar de johweb
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2003
    Messages : 342
    Points : 367
    Points
    367
    Par défaut
    Il s'agit d'une "espèce" de fusion word. Le client me fournit ses modèles et veut conserver le format word. Le rtf me semblait plus indiqué pour travailler facilement le contenu...
    Pour les images, une collègue a tenté une optimisation, mais ce n'est guère flagrant...
    La barre de progression est une bonne idée en soit, mais malheureusement pas applicable chez ce client... (pourtant cela m'aurait bien arrangé... !! )

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20
    Points : 6
    Points
    6
    Par défaut
    Jm'en vais te l'optimiser moi, ton image !
    je t'envoie un mp :]

  6. #6
    Membre averti Avatar de johweb
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2003
    Messages : 342
    Points : 367
    Points
    367
    Par défaut
    Citation Envoyé par Prenthès
    Jm'en vais te l'optimiser moi, ton image !
    je t'envoie un mp :]
    Comme répondu sur le mp, c'est très gentil de ta part, mais je laisse le soin de le faire à ma collègue graphiste.
    Même si ta solution aurait pu nous dépanner sur le moment, mon client devrait m'envoyer PLEIN de modèles (c'est lié à son fonctionnement) donc je préfererai trouver une optimisation de mon traitement php... ^^

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20
    Points : 6
    Points
    6
    Par défaut
    Et si on met un lien hypertexte vers l'image stoquée sur un serveur à part qui serait plus rapide, ça ne marche pas ^o) ? Je ne sais pas du tout comment ça fonctionne dans le rtf les fichiers incorporés..

  8. #8
    Membre averti Avatar de johweb
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2003
    Messages : 342
    Points : 367
    Points
    367
    Par défaut
    Mouais... J'ai pas envie non plus de me taper tous les modèles du client à la paluche... J'aimerai que le client soit indépendant un fois mon module livré...

    Bon, oublions les images...

    Revenons à la question première...
    J'ouvre mon modèle et un document vierge. Je lit la ligne dans mon modèle, je remplace la valeur éventuelle, et je récris ma ligne dans mon document vierge...

    N'y aurait-il pas une méthode de remplacement global avec un traitement plus rapide ?

    (désolé pour le rejet des solutions sur l'image : je dois trouver une solution plus générale, que l'application puisse se débrouiller avec ce que lui founit le client sans passer la case hotline...)

  9. #9
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Citation Envoyé par johweb
    La barre de progression est une bonne idée en soit, mais malheureusement pas applicable chez ce client... (pourtant cela m'aurait bien arrangé... !! )
    pourquoi ?
    il y a juste besoin de JavaScript normalement

  10. #10
    Membre averti Avatar de johweb
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2003
    Messages : 342
    Points : 367
    Points
    367
    Par défaut
    Ce n'est pas un problème technique pour moi... C'est juste que le client ne souhaite pas attendre 35 secondes pour le remplacement de 4 valeurs dans un fichier texte...... ^^

  11. #11
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    Citation Envoyé par johweb
    Ce n'est pas un problème technique pour moi... C'est juste que le client ne souhaite pas attendre 35 secondes pour le remplacement de 4 valeurs dans un fichier texte...... ^^
    ok donc comme le dit la règle "Il y a toujours une solution" voici une des dernières solutions : le client participe à l'achat d'un serveur 4 processeurs qui calculera son fichier dans la seconde.
    Je caricature un peu (un "deux processeurs" suffit peut-être ) mais si le client ne mets pas les moyens il ne peut pas tout avoir

  12. #12
    Membre habitué Avatar de daniel61
    Inscrit en
    Décembre 2006
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 139
    Points : 169
    Points
    169
    Par défaut
    j'ai essayé le code suivant sur un fichier RTF de 9Meg, 5 remplacement et le temps de traitement est toujours inférieur à 2 secondes. même sur un serveur avec un celeron.

    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
     
      $serveur='http://localhost/';
      $remplacer=array('essai','Jean Marc','Dupond','1234568','12313216');
      $fichier='./input.rtf';
      $temps=time();
      if($id=fopen($fichier,'rb')) {
        $rtf_in=fread($id,filesize($fichier));
        fclose($id);
        echo strlen($rtf_in).'-';
        $rtf_out=preg_replace('#\$\$(\d)#e','$remplacer[\\1]',$rtf_in);
        if($id=fopen('./output.rtf','wb')) {
          fwrite($id,$rtf_out,strlen($rtf_out));
          fclose($id);
        }
        else echo 'écriture en échec-';
      }
      else echo 'ouverture en échec-';
      echo time()-$temps.' sec';
      echo '<hr><a href="'.$serveur.'output.rtf">télécharger</a> votre fichier';
    le temps de téléchargement lui peut varier beaucoup... c'est peut-être le téléchargement le problème?

  13. #13
    Membre averti Avatar de johweb
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2003
    Messages : 342
    Points : 367
    Points
    367
    Par défaut
    Et c'est une bonne réponse de daniel61 !!!

    Bon, ma technique (détaillée plus haut) était : j'ouvre mon fichier source, j'ouvre un fichier vierge, et je recopie ligne à ligne en faisant un str_replace de mes champs... Temps de traitement : 35 secondes.

    Avec la technique de daniel61 : je copie mon fichier source et je fais un preg_replace avec deux tableaux (une liste de recherche et une liste de remplace) sur le fichier... Temps de traitement : entre 1 et 2 secondes...

    Y'a pas photo... !!

    Merci, merci, merci !!!

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/01/2011, 09h30
  2. Remplacer mot dans un fichier text !
    Par Marie.B dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 25/01/2009, 13h38
  3. Cherche dans un fichier texte trés rapidement
    Par rvzip64 dans le forum Langage
    Réponses: 5
    Dernier message: 16/03/2006, 17h17
  4. Réponses: 3
    Dernier message: 27/06/2005, 16h24
  5. Réponses: 5
    Dernier message: 25/01/2005, 14h26

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