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 Delphi Discussion :

[MAJ] Conversion d'un texte avec formats RTF en texte brut.


Sujet :

Langage Delphi

  1. #21
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Est ce que l'option de compilation "chaînes vastes" est activée pour ton programme ? Parce qu'il le faut et ça peut vraisemblablement venir de là...

    En tout cas, si tu pouvais posté ton code, ça me permettrait de dénicher d'où vient le problème, parce que c'est pas normal...
    Bidouilleuse Delphi

  2. #22
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    Oui cette option est bien cochée. D'apres ce que j'ai pu lire dans d'autres posts ici, il semble que la lecture d'un Stream dans une String n'est pas si simple et automatique que cela.

    voir celui-ci en particulier :
    Problème de String <-> MemoryStream

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    begin
    
      Inc(FHttpFinish);
      if (FHttpProcess>0) then Dec(FHttpProcess);
    
      case ErrCode of
        httperrNoError: Inc(FHttpSuccess);
        httperrAborted: Inc(FHttpAbort);
      else
        Inc(FHttpAbort);
      end;
    
      MyHttp:=(Sender as TMyHttp);
      MyURL:=(MyHttp.Data as TMyURL);
      Stream:=MyHttp.RcvdStream;
    
      MyHttp.Data:=nil;
      MyHttp.URL:='';
    
      MyHttp.RcvdStream:=nil;
      MyHttp.SendStream:=nil;
    
      // Obligation de verifier auparavent, car le Abort meme lorsqu'aucune requete
      // n'a eu lieu, genere malgre tout l'evenement OnRequestDone
      if Assigned(MyURL) then
      begin
        if (ErrCode=httperrNoError) then
        begin
    
          FN:='';
          SessionId:='';
    
          c:=nil;
          Stream.Seek(0, soFromEnd);
          Stream.Write(c, 1);
          Stream.Seek(0, soFromBeginning);
    
          Buffer:=TMemoryStream(Stream).Memory;
    
    ...
    ...
                          case IndexOfArray(Extension, ['html', 'plain', 'rtf', 'pdf', 'doc', 'ppt', 'xls', 'ps']) of
                          0 : // HTML
                                 Begin
                                 ...
                                 end;
    ...
                          2 : //  RICHTEXT (RTF)
                              Begin
                                slRTF:=TStringList.create;
                                Try
                                  slRTF.LoadFromStream(Stream);
                                  RTF:=slRTF.Text;
                                  s:=RTFtoText(RTF, True, True, 0);
                                Finally
                                  slRTF.Free;
                                End;
                                    // Calcul du nom du lien de la ressource
                                    Hash:=RandomString(8, '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ');
                                    while FileExists(Path+'\rtf\'+Hash+'.'+Extension) or Assigned(Data.Patents.FindOfNumber(Hash)) do
                                      Hash:=RandomString(8, '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ');
    
                                    F:=TFileStream.Create(Path+'\rtf\'+Hash+'.'+Extension, fmCreate);
                                    try
                                      F.CopyFrom(Stream, 0);
                                    finally
                                      F.Free;
                                    end;
    
    
                                    if s<>'' then
                                    Begin
                                      F:=TFileStream.Create(Path+'\rtf\'+Hash+'.txt', fmCreate);
                                      try
                                        F.Write(PChar(s)^, Length(s));
                                      finally
                                        F.Free;
                                      end;
                                    End;
    ....


    Amitiés,
    Bruno

  3. #23
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    Petite précision :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                                SetLength(RTF, Stream.Size);
                                Stream.Seek(0, soFromBeginning);
                                Stream.Position := 0;
                                Stream.Read(RTF[1], Stream.Size);
    Stream.size semble bien avoir la bonne taille, ensuite en mode debug une evaluation de Stream me renvoie bien le fichier entier mais à partir d'un certain endroit les caractères ne sont plus des alpha-num. Je suppose que c'est le RTF en binaire. ?!

  4. #24
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    Alors voilà ce que je peux confirmer :

    - La String RTF a bien la bonne taille en utilisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                              SetLength(RTF, Stream.Size);
                                Stream.Seek(0, soFromBeginning);
                                Stream.Position := 0;
                                Stream.Read(RTF[1], Stream.Size);
     
                                showmessage(inttostr(length(RTF)));
                                s:=RTFtoText(RTF, True, True, 0);
    - Le RTFToText plante parfois sur un caractère $ lors de la conversion.
    à l'appel de Processcode ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            else begin
                Code:=Code+ThisChar;
                ProcessCode;
              end;
    - Dans quasiment tous les cas le retour de RTFToText est #9 (plusieurs dizaines.
    - Les fichiers RTF sont bien des fichiers RTF

    Donc je me pose la question, n'est-ce pas plutôt RTFToText qui pose problème ?
    ici se trouve un fichier zip contenant les fichiers RTF et leur conversion en TXT.
    Fichier RTF


    Amitiés,
    Bruno

  5. #25
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Merci pour ton feedback, je regarde ça ce soir (tard).

    Je te promet de trouver une solution
    Bidouilleuse Delphi

  6. #26
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    No problem, biensur !! je suis même un peu

    Mais en tout cas merci pour ton aide.

    Amicalement,
    Bruno

  7. #27
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Petit coquin, ce sont des rtf "word", pas des vrai rtf.

    De toute façon tu as des problèmes avec certains fichiers. Mais pas tous et ma "moulinette" fonctionne TRE TRES bien. Tu vas comprendre.

    Je m'explique, j'ai joint un fichier zip dans lequel il y a un programme qui ouvre tes RTF et tente de les convertir avec ma procedure.

    Si tu ouvre certains fichiers, ils n'apparaissent même pas dans le RichEdit....
    Vois ce que ça donne par exemple avec ton fichier 4Bxxxx.rtf, pas terrible hein ?

    Par contre, avec d'autres, ceux que le RichEdit arrive à afficher, la conversion s'effectue absolument sans aucun soucis. Essais avec le 8Jxxxx.rtf

    En tout cas, si ça marche avec ma moulinette quand le Richedit arrive aussi à ouvrir le fichier, je ne vois pas d'où vient le problême. Pas de ma moulinette en tout cas.

    A+
    Fichiers attachés Fichiers attachés
    Bidouilleuse Delphi

  8. #28
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    PS : Si le fichier zip est "corrompu", c'est que tu l'as téléchargé via Internet Explorer. Dans ce cas, télécharge le avec Firefox, ou ouvre le avec Winrar.
    Bidouilleuse Delphi

  9. #29
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    624
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 624
    Points : 199
    Points
    199
    Par défaut
    Salut Waskol,

    Le fichier est ok, je suis sous FireFox.
    Je ne savais pas qu'il y avait des RTF Word specifiques, je suis de mon ignorance. J'espère que tu ne m'en veux pas trop.

    Bref, j'ai appris quelque chose aujourd'hui tant mieux, reste plus qu'à adapter mon programme maintenant.

    Sais tu si il y a un moyen de savoir si c directement un fichier qui sera convertible ou pas ?

    Merci pour tout,
    Amitiés,
    Bruno

  10. #30
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Citation Envoyé par Bruno13
    Salut Waskol,

    Le fichier est ok, je suis sous FireFox.
    Je ne savais pas qu'il y avait des RTF Word specifiques, je suis de mon ignorance. J'espère que tu ne m'en veux pas trop.

    Bref, j'ai appris quelque chose aujourd'hui tant mieux, reste plus qu'à adapter mon programme maintenant.

    Sais tu si il y a un moyen de savoir si c directement un fichier qui sera convertible ou pas ?

    Merci pour tout,
    Amitiés,
    Bruno
    No problemo

    Si ça passe dans un TRichEdit (ou même dans WordPad), je pense que la moulinette fonctionnera sans problèmes
    Bidouilleuse Delphi

  11. #31
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Tout d'abord, merci à l'auteur de ce programme qui m'a été bien utile.

    Je voulais ajouter une question à ce sujet, car j'ai un cas bizarre :

    si mon fichier rtf contient ceci : c:\\MesDocs

    alors après conversion j'obtiens : c:\\\MesDocs

    J'ai donc un anti-slash de plus.

    Une idée ?

  12. #32
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 15
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut Merci
    Merci à LadyWasky qui m'a fait gagner un temps précieux.

    Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle.
    Aymond d'Alost

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 4
    Dernier message: 07/05/2013, 12h27
  2. conversion nombre en texte avec Format
    Par LaPanic dans le forum VBScript
    Réponses: 2
    Dernier message: 28/04/2010, 01h16
  3. Composant manipulant du texte au format RTF ?
    Par franckjava dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 11/06/2007, 22h27
  4. [Swing] texte au format rtf
    Par Louis-Guillaume Morand dans le forum Autres Logiciels
    Réponses: 5
    Dernier message: 04/04/2005, 07h11

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