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

 Delphi Discussion :

Traitement du contenu text de Richedit


Sujet :

Delphi

  1. #1
    aqs
    aqs est déconnecté
    Futur Membre du Club
    Inscrit en
    Mai 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 18
    Points : 7
    Points
    7
    Par défaut Traitement du contenu text de Richedit
    Bonjour

    En fait j'ai insérer un contenu texte dans un Richedit, je veux supprimer les lignes vides dans ce texte, aligner les mots à gauche et supprimer les mots en doubles.

    Comment faire tous cela?

    Merci pour votre aide.

  2. #2
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Bosser au niveau d'un TStringList, peut-être, puis l'injecter APRÈS dans le TRichEdit ?

    TStringList permet déjà la suppression des doublons, le tri, les splits (découpe d'une ligne en mots, puis fusion des deux TStringList), etc. : autant l'utiliser...
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  3. #3
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Bonjour,

    1) Suppression des doublons : Pour les supprimer tu peux :
    - Sauver le contenu du RichEdit ou de ta StringList vers le disque puis utiliser le code de la procedure SupprDoublonsAOS(const nomFiSource, NomFiDest : string; IgnoreCase : boolean) que tu peux trouver ici : http://www.developpez.net/forums/d44...t/#post2784174

    2) Suppression des lignes vides : les lignes vides étant également des doublons il n'en restera plus qu'une seule après l'étape 1.

    3) Aligner les mots à gauche : Je suppose que tu veux dire aligner les "lignes" à gauche, et dans ce cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    RichEdit1.SelectAll;
    RichEdit1.Paragraph.Alignment := taLeftJustify
    ... par contre si tu veux découper chaque ligne en des séries de lignes ne contenant qu'un seul mot tu peux utiliser à cet effet la routine ExplodeLazy de ShaiLeTroll (utiliser la fonction Chercher du site)

    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  4. #4
    aqs
    aqs est déconnecté
    Futur Membre du Club
    Inscrit en
    Mai 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Gilbert Geyer, Mac LAK Merci pour votre réponse.
    Je vais essayer ce que vous m'avez proposer et vous rendre la réponse.

  5. #5
    aqs
    aqs est déconnecté
    Futur Membre du Club
    Inscrit en
    Mai 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Merci Gilbert Geyer, le lien était très bénéfique.

    J’ai rencontré un autre problème, en fait je génère du texte dans un Richedit et quand je l’enregistre sous format « TXT » il génère tous le blabla de la mise en forme par exemple :

    {\rtf1\ansi\ansicpg1252\deff0\deflang1036{\fonttbl{\f0\fnil\fcharset0 Arial;}}
    \viewkind4\uc1\pard\fs16
    \par
    \par
    \par
    \par
    \par
    \par La l\'e9gende des si\'e8cles
    \par
    \par Hugo
    \par Victor
    \par
    \par

    J’ai passé alors vers Memo pour éviter ce problème, l’histoire de la suppression des doublons marche bien sauf que j’ai encore le problème de décalage. Je n’ai pas pu aligner les lignes à gauche et supprimer les vides de ces lignes.

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Salut,

    J’ai passé alors vers Memo pour éviter ce problème, l’histoire de la suppression des doublons marche bien sauf que j’ai encore le problème de décalage. Je n’ai pas pu aligner les lignes à gauche et supprimer les vides de ces lignes.
    ... l'utilisation d'un TMemo est une bonne idée pour virer les balises rtf.
    ... par contre je ne comprends pas quand tu dis "Je n’ai pas pu aligner les lignes à gauche" vu que dans un TMemo l'alignement à gauche se fait tout seul avec taLeftJustify.
    ... et que veux tu dire par "supprimer les vides de ces lignes" ???
    ... s'agit-il des espaces ??? (vu qu'il ne peut s'agir de lignes entièrement vides dont la string vaut '' et qui sont donc des doublons supprimés automatiquement). Faudrait préciser un peu plus clairement.

    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  7. #7
    aqs
    aqs est déconnecté
    Futur Membre du Club
    Inscrit en
    Mai 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Salut
    En fait j'essaye de générer le conenu textuel d'un fichier XML dans un TMemo et ça marche bien. Ci-dessous un exemple du contenu d'un Tmemo

    -----------------------------------------------
    ******************************************
    *********************Bases de donn¿ avanc¿
    *********************Bases de donn¿ distibu¿
    *********************Bases de donn¿ Ontologiques
    *********************DataMining
    *********************Entrep¿
    *********************+213 66 55 44 33
    *********************+213 66 77 88 77
    *********************Laboratoire d'Inginerie en Bases de
    *********************LIBD
    *********************Universit¿e Bab Ezzouar USTHB, Alger
    *********************xy@usthb.dz
    ******************************************
    Donn¿
    Hugo
    HugoOO
    La légende des siècles
    Victor
    Victorrr
    ---------------------------------------------------------

    Je veux aligner le contenu pour qu'il soit comme suit :

    -----------------------------------------------
    Bases de donn¿ avanc¿
    Bases de donn¿ distibu¿
    Bases de donn¿ Ontologiques
    DataMining
    Entrep¿
    +213 66 55 44 33
    +213 66 77 88 77
    Laboratoire d'Inginerie en Bases de
    LIBD
    Universit¿e Bab Ezzouar USTHB, Alger
    xy@usthb.dz
    Donn¿
    Hugo
    HugoOO
    La légende des siècles
    Victor
    Victorrr
    ---------------------------------------------------------


    Merci

  8. #8
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Salut

    Je ne m'y connais pas trop, mais tu devrais mettre le texte dans un mémo AVANT de le traiter ? Parce que les deux lignes soit disant vides doivent differer de par leurs balises (invisibles). Et si tu veux supprimer toutes les lignes vides, tu n'as qu'a inserer une ligne vide au début, ensuite effacer les doublons, et effacer la premiere ligne !

    Bonne chance !

    Edit : Lors du post de ce message, il n'y avait pas de "*" dans ton message donc, laisse tomber

  9. #9
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Salut,

    Il se peut également que les deux lignes apparemment vides soient formées de quelques espaces ' ' chr(32)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure SupprStringOfChar(M : tMemo; CharIndesirable : char);
    var       i,j,len : integer;
    begin     If M.text='' then Exit; // Memo vide
              i:=M.lines.count-1;
              repeat len:=length(M.Lines[i]);
                     if len=0 then M.lines.Delete(i) // Supprssion ligne réellement vide
                     else begin j:=1;
                                while (j<len) and (M.Lines[i][j]=CharIndesirable) do inc(j);
                                if j=len then M.lines.Delete(i);
                     end;
                     dec(i);
              until i=-1;
    end;
    Utilisation : Exemple pour supprimer toutes lignes formées par des '-----------' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.SpeedButton1Click(Sender: TObject);
    begin     SupprStringOfChar(Memo2,'-');
     
    end;
    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  10. #10
    aqs
    aqs est déconnecté
    Futur Membre du Club
    Inscrit en
    Mai 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Salut,

    pour bien expliquer mon probleme j'ai édité mon message en haut.

    les "*" représentent les vides affichés dans Tmemo

    voilà

  11. #11
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Re-Salut,

    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
    procedure TrimLeftMemo(M : tMemo; CharIndesirable : char);
    var       i,len : integer; snett : string;
     
              function  TrimG(s : string; Ch : Char) : string; // suppression de Char indésirables à gauche de s
              var       j : Integer;
              begin     len := Length(s); j:=1;
                        while (j <= len) and (s[j] = Ch) do Inc(j);
                        Result := Copy(s, j, maxInt);
              end;
     
    begin     if M.text='' then Exit; // Memo vide
              i:=M.lines.count-1;
              repeat snett:=TrimG(M.Lines[i],CharIndesirable);
                     len:=length(snett);
                     if len=0 then M.lines.Delete(i)  // Suppression ligne
                              else M.Lines[i]:=snett; // Remplacement ligne
                     dec(i);
              until i=-1;
    end;
    Utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.SpeedButton1Click(Sender: TObject);
    begin     TrimLeftMemo(Memo2,'*');   //<- pour supprimer des * à gauche
              TrimLeftMemo(Memo2,' ')); //<- pour supprimer des espaces vides à gauche
    end;
    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  12. #12
    aqs
    aqs est déconnecté
    Futur Membre du Club
    Inscrit en
    Mai 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Merci Gilbert

    Je teste le programme et je t'informe sur les résultats



    à Toute

  13. #13
    aqs
    aqs est déconnecté
    Futur Membre du Club
    Inscrit en
    Mai 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Salut

    Toujours le meme problème, je ne comprends rien sincerement.
    J'ai testé les 2 codes de Gilbert, que les lignes vides sont supprimés, les espaces ne sont pas supprimés. voilà le résultats (les * sont les vides qui existent toujours).

    -----------------------------------------------
    *********************Bases de donn¿ avanc¿
    *********************Bases de donn¿ distibu¿
    *********************Bases de donn¿ Ontologiques
    *********************DataMining
    *********************Entrep¿
    *********************+213 66 55 44 33
    *********************+213 66 77 88 77
    *********************Laboratoire d'Inginerie en Bases de
    *********************LIBD
    *********************Universit¿e Bab Ezzouar USTHB, Alger
    *********************xy@usthb.dz
    Donn¿
    Hugo
    HugoOO
    La légende des siècles
    Victor
    Victorrr
    ---------------------------------------------------------

  14. #14
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Salut,

    ...les * sont les vides qui existent toujours
    Comme j'ai testé le code qui marche chez moi avec TrimLeftMemo(Memo2,' ')) il y a de fortes chances que tes vides ne soient pas formés d'espaces simples chr(32) mais d'espaces-insécables chr(160).

    Essayes donc avec TrimLeftMemo(Memo2,chr(160))

    Et dans le cas où cela ne marcherait toujours pas le plus direct sera de faire un ShowMessage(IntToStr(Ord(Memo2.lines[i][1]))) où i correspond à l'indice d'une des lignes du type *********************DataMining
    pour identifier la valeur X du chr(X) à injecter dans TrimLeftMemo(Memo2,chr(X)) pour supprimer les caractères en question.

    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  15. #15
    aqs
    aqs est déconnecté
    Futur Membre du Club
    Inscrit en
    Mai 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Bonsoir,

    les vides finalement sont des #9 .

    Mais Pour un TMemo qui contient des milliers de lignes le programme de suppression des vides et trop trop lent.

    Merci

  16. #16
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Salut,

    Mais Pour un TMemo qui contient des milliers de lignes le programme de suppression des vides et trop trop lent.
    Voiçi un truc qui utilise TMemoryStream, donc les suppressions se font en mémoire vive, donc vitesse optimale : ça supprime les #09 qu'ils soient à gauche ou à droite.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure SupprChar(const S : string; var MS : TMemoryStream; CharSuppr : Char);
    const     ibMax = 65536;
    var       ic,ib,transf : integer; buff : array [0..ibMax] of char;
    begin     ib:=-1; transf:=0; MS.Position:=0;
              for ic:=1 to length(S) do
              begin if S[ic] <> CharSuppr
                    then begin inc(ib); buff[ib]:=S[ic]; inc(transf); end;
                    if transf=ibMax+1 then
                    begin MS.Write(buff,transf); ib:=-1; transf:=0; end;
              end;
              if transf<>0 then MS.Write(buff,transf);
    end;
    Utilisation avec un TRichEdit ou un TMemo:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TForm1.SpeedButton1Click(Sender: TObject);
    var       MS : tMemoryStream; i : integer;
    begin     MS := tMemoryStream.create;
              //SupprChar(RichEdit1.Text,MS,#09);
              SupprChar(Memo2.Text,MS,#09);
              MS.Position:=0;
              //RichEdit1.Lines.LoadFromStream(MS);
              Memo2.Lines.LoadFromStream(MS);
              MS.Free;
    end;
    A+.

    EDIT : Suggestion à propos de vitesse : Faire un premier test en utilisant d'abord la routine de suppression des lignes formant des doublons avant d'utiliser le code ci-dessus, puis un deuxième test en faisant l'inverse, pour retenir la solution la plus rapide.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  17. #17
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Salut,

    Autre suggestion pour obtenir un gain de vitesse supplémentaire avec la procedure SupprChar(...) : Si tu disposes d'une memoire vive disponible de taille suffisante tu peux augmenter la valeur de la constante ibMax en conséquence.

    Exemples de gains de vitesse obtenus ainsi (Pentium III à 1,13 GHz) :
    - 1) avec SupprChar(ibMax = 65536) mis : 6563 millisecondes
    - 2) SupprChar(ibMax =131072) mis : 5328 millisecondes soit 1,23 fois plus rapide que 1)
    - 3) SupprChar(ibMax =262144) mis : 5250 millisecondes soit 1,25 fois plus rapide que 1)

    Le fichier utilisé pour ces tests pesait 6,878 Mo et comportait 122024 lignes de texte (A titre de comparaison ce fichier équivaut à un texte imprimé en Times New Roman taille 10 recto-verso sur les 1000 pages d'un paquet de 500 feuilles A4, épais de 5 cm.)

    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  18. #18
    aqs
    aqs est déconnecté
    Futur Membre du Club
    Inscrit en
    Mai 2005
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    Merci Gilbert

  19. #19
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Salut,

    Le merci est prématuré car voici encore du gain de vitesse : Je pensais qu'on ne pourrait pas faire mieux qu'avec un MemoryStream ... mais que nenni les PChar pédalent encore plus vite : Voiçi SupprCharV2 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function  SupprCharV2(const S : string; CharSuppr : Char) : string;
    var       i,Transf : integer; pIn,pOut : PChar;
    begin     Result:=S; if Result='' then Exit;
              pIn:=@S[1]; pOut:=@Result[1]; Transf:=0;
              for i:=1 to length(S) do
              begin if pIn^ <> CharSuppr then
                    begin pOut^:=pIn^; inc(Transf); inc(pOut); end;
                    inc(pIn);
              end;
              SetLength(Result,Transf);
    end;
    Utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm1.FormShow(Sender: TObject);
    begin     RichEdit1.lines.LoadFromFile(ExtractFilePath(Application.ExeName)+'test0.mem'); // Chargement du fichier de tests de 6,878 Mo
     
    end;
     
    procedure TForm1.SpeedButton1Click(Sender: TObject);
    var       Start : Dword;
    begin     Start:=GetTickCount;
              RichEdit1.Text:=SupprCharV2(RichEdit1.Text,#09);
              RichEdit1.lines.Add('SupprCharV2 durée : '+IntToStr(GetTickCount-Start)+' millisecondes');
    end;
    Résultats SupprCharV2 durée : 2875 millisecondes (même fichier de tests de 6,878 Mo d'hier) donc si on compare aux résultats d'hier on multiplie le vitesse par environ deux.

    A+.

    EDIT : En cas d'utilisation de la fonction SupprCharV2 l'appeler comme recommandé c'est à dire avec RichEdit1.Text:=SupprCharV2(RichEdit1.Text,#09) ou Memo1.Text:=SupprCharV2(Memo1.Text,#09) c'est à dire sur l'ensemble du texte de façon à ce que le SetLength inclus à la fin de SupprCharV2 ne soit activé qu'une seule et unique fois quel que soit le nombre de lignes du texte (Donc éviter d'appeler SupprCharV2 dans une boucle pour effectuer un traitement ligne par ligne qui serait plus lent);
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  20. #20
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    582
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2003
    Messages : 582
    Points : 915
    Points
    915
    Par défaut
    @Gilbert Geyer
    Pourrais-tu essayer cette version?
    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
     
    Function SupprCharV3(Const S: String; CharSuppr: Char): String;
    Var
      Transf: integer;
      pIn, pOut,pStop: Pchar;
    Begin
      If s = '' Then Exit;
      SetLength(Result, length(S));
      pIn := @S[1];
      pOut := @Result[1];
      pStop:=@s[Length(s)];
      Transf := 0;
      repeat
        If pIn^ <> (CharSuppr) Then
        Begin
          pOut^ := pIn^;
          inc(Transf);
          inc(pOut);
        End;
        inc(pIn);
      until(pStop<pIn);
      SetLength(Result, Transf);
    End;
    je crois ganger quelque ms en éliminant la boucle for par Repeat.
    à battre: 2875ms
    Comment dupliquer un disque...ça vous intéresse?
    Tutoriel et code source delphi ici

Discussions similaires

  1. [VB.NET] - Traitement de fichier texte
    Par titoff60 dans le forum Windows Forms
    Réponses: 11
    Dernier message: 17/01/2007, 08h27
  2. Aligner le contenu texte d'une colonne de Jtable
    Par grabriel dans le forum Composants
    Réponses: 2
    Dernier message: 26/12/2006, 09h56
  3. Réponses: 10
    Dernier message: 30/08/2006, 14h28
  4. [C++] Textbox et traitement sur le texte
    Par poporiding dans le forum Framework .NET
    Réponses: 8
    Dernier message: 28/12/2005, 19h10
  5. Réponses: 1
    Dernier message: 22/09/2005, 09h41

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