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 :

Stringreplace CR par CRLF


Sujet :

Delphi

  1. #1
    Membre habitué
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 466
    Points : 137
    Points
    137
    Par défaut Stringreplace CR par CRLF
    Hello,
    Je tente de remplacer dans un string les CR par CRLF à l'aide de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CRLF := chr(13) + chr(10);
    CR := chr(13);
    T  := stringreplace(S, CR, CRLF,[rfReplaceAll, rfIgnoreCase]);
    ou via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    T  := stringreplace(S, #13, #13#10,[rfReplaceAll, rfIgnoreCase]);
    Mais sans résultat

    J'ai bien vérifié que ma chaine initiale contient bien des CR (Notepad++)


    Merci pour vos idées...

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 410
    Points : 5 801
    Points
    5 801
    Par défaut
    salut

    essai ceci est dis moi si cela fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      S  := stringreplace(S, #13, #0,[rfReplaceAll, rfIgnoreCase]); 
      T  := stringreplace(S, #0, #13#10,[rfReplaceAll, rfIgnoreCase]);
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  3. #3
    Membre habitué
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 466
    Points : 137
    Points
    137
    Par défaut
    Salut Anapurna et merci pour ta réponse ;-)
    J'ai testé dans ce bout de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
          AssignFile(F,Opendialog1.FileName);
          Reset(F);
           Readln(F,S);
           if pos(#13#10,S)=0 then
           begin
           S  := stringreplace(S, #13, #0,[rfReplaceAll, rfIgnoreCase]);
           T  := stringreplace(S, #0, #13#10,[rfReplaceAll, rfIgnoreCase]);
           rewrite(F);
           Writeln(F,T);
           Closefile(F);
    Le résultat me renvoie le fichier supprimé de tous ces CR et terminé par CR/LF

    Idem quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    S  := stringreplace(S, #13, '??',[rfReplaceAll, rfIgnoreCase]);
    T  := stringreplace(S, '??', #13#10,[rfReplaceAll, rfIgnoreCase]);
    Le fichier initial contient 1 ligne contenant des CR
    Je souhaite les remplacer par des CR/LF

    Merci pour ton aide...
    ;-)

  4. #4
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 658
    Points : 3 599
    Points
    3 599
    Billets dans le blog
    2
    Par défaut
    Bonsoir,

    Il me semble qu'en passant par un TStringList, ça remplace par défaut les #13 en #13#10.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    var
      t : TStringlist;
      s : string;
    begin
      s := 'ma chaine'+#13+'suite';
      t := TStringList.Create;
      t.Text := s;
      s := t.text;
      t.Free;
    end;
    Si tu veux lire un fichier, lancer la conversion et écrire le résultat dans le fichier, tu peux aussi passer par le TStringList : il suffit d'appeler sa méthode LoadFromFile pour charger le fichier puis tout de suite après sa méthode SaveToFile pour enregistrer...
    Mon site - Mes tutoriels - GitHub - N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  5. #5
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 410
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 410
    Points : 5 801
    Points
    5 801
    Par défaut
    salut

    tu ecrit :
    AssignFile(F,Opendialog1.FileName);
    Reset(F);
    Readln(F,S);
    if pos(#13#10,S)=0 then
    begin

    S := stringreplace(S, #13, #0,[rfReplaceAll, rfIgnoreCase]);
    T := stringreplace(S, #0, #13#10,[rfReplaceAll, rfIgnoreCase]);
    rewrite(F);
    Writeln(F,T);
    Closefile(F);
    eu le test sert a quoi ?
    imaginons que tu veuille remplacer tout les CR selon le system ou tu te trouve
    je ferais comme ceci

    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
     
    const
        sLineBreak = {$IFDEF LINUX} AnsiChar(#10) {$ENDIF} 
                            {$IFDEF MSWINDOWS} AnsiString(#13#10) {$ENDIF};
     
      // sous Windows
        CRLF =  #13#10;
        CR    =  #13 ;// (carriage return)
        LF     = #10  ;//(line feed)
     
     Begin
        AssignFile(F,Opendialog1.FileName);
        Reset(F);
        Readln(F,S);
        S  := stringreplace(S, CRLF, LF,[rfReplaceAll, rfIgnoreCase]);
        S  := stringreplace(S, CR , LF,[rfReplaceAll, rfIgnoreCase]);
        T  := stringreplace(S, LF, sLineBreak,[rfReplaceAll, rfIgnoreCase]);
        rewrite(F);
        Writeln(F,T);
        Closefile(F);
    end;
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 429
    Points : 24 794
    Points
    24 794
    Par défaut
    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
    var
      S, S2: string;
      T, T2: string;
      I: Integer;
    begin
      S := 'ABC'#13'DEF'#13#10'GHI'#13'JKL'#13#10'MNO';
      T := StringReplace(S, #13, #13#10, [rfReplaceAll, rfIgnoreCase]);
      for I := 1 to Length(T) do
        if Ord(T[I]) >= 32  then
          T2 := T2 + T[I]
        else
          T2 := T2 + '#' + IntToStr(Ord(T[I]));
      for I := 1 to Length(S) do
        if Ord(S[I]) >= 32  then
          S2 := S2 + S[I]
        else
          S2 := S2 + '#' + IntToStr(Ord(S[I]));
      ShowMessage(S2 + ' -> ' + T2);
    end;
    Cela fonctionne parfaitement pourtant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ABC#13DEF#13#10GHI#13JKL#13#10MNO -> ABC#13#10DEF#13#10#10GHI#13#10JKL#13#10#10MNO

    Sinon c'est pour cela que dans ma classe TSLTTextFileReader de lecture de fichier j'ai prévu la lecture en CR ou en LF (implicitement CRLF)

    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
     
    //------------------------------------------------------------------------------
    function TSLTTextStreamReaderAnsi.ReadLineRaw(AIndexFile: TFileStream; AUseCROnly: Boolean; const Index, OffSet: Int64): string;
    const
      BUF_SIZE = 1024;
      LF: Byte = 10;
      CR: Byte = 13;
    var
      TextBuf: array[0..BUF_SIZE-1] of Byte;
      IndexRec: TSLTTextFileReaderIndex;
      iBuf, Readed: Integer;
      AByte: Byte;
      LastIsCR: Boolean;
      LineReaded: Int64;
      EndOfLine: Byte;
    begin
      // Positionnement au début du Fichier ou sur le Curseur de lecture linéaire
      FTextStream.Seek(OffSet, soBeginning);
     
      // Compteur/Index/Drapeau à Zéro
      IndexRec.OffSet := OffSet;
      IndexRec.Length := 0;
      LastIsCR := False;
      if AUseCROnly then
        EndOfLine := CR // Compatible MacOS avec CR isolé
      else
        EndOfLine := LF; // Compatible Windows couple CR LF et Linux LF
      LineReaded := 0;
      // Boucle jusqu'à la fin
      while (FTextStream.Position < FTextSize) do
      begin
        Readed := FTextStream.Read(TextBuf, BUF_SIZE);
        for iBuf := 0 to Readed - 1 do
        begin
          AByte := TextBuf[iBuf];
          if (AByte = EndOfLine) then
          begin
            FLinearPosition := FTextStream.Position - Readed + iBuf;
            IndexRec.Length := FLinearPosition - IndexRec.OffSet;
            Inc(FLinearPosition); // car on n'inclu pas la fin de ligne dans la prochaine ligne
            if not AUseCROnly and LastIsCR then
              Dec(IndexRec.Length); // -1 car on inclu pas le CR dans un couple CR LF
     
            // Si l'on trouve la fin de ligne, on récupère directement les données
            if (LineReaded = Index) then
            begin
              Result := ReadLineFromIndexRec(IndexRec);
              Exit;
            end;
            // la prochaine ligne commencera après ce dernier séparateur de ligne
            IndexRec.OffSet := FLinearPosition;
            Inc(LineReaded);
          end;
          if not AUseCROnly then
            LastIsCR := (AByte = CR);
        end;
      end;
      // On a pas trouvé de fin de ligne, il est fort possible que ce soit la dernière sans fin de ligne
      // On récupère l'ensemble de la fin du fichier, on lit (Fin - Offset) Byte à partir de Offset
      if IndexRec.OffSet < FTextSize then
      begin
        IndexRec.Length := FTextStream.Position - IndexRec.OffSet;
        FLinearPosition := FTextStream.Position + 1; // + 1 ainsi on sera définitivment en dehors !
        if (LineReaded = Index) then
        begin
          Result := ReadLineFromIndexRec(IndexRec);
          Exit;
        end;
      end;
      Result := '';
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  7. #7
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 339
    Points : 3 107
    Points
    3 107
    Par défaut
    Bonjour,

    D'accord avec ShaiLeTroll, bêtement avec la fonction Pos, j'ai testé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    s := StringReplace(s, #13, #13#10,[rfReplaceAll]);
    StringReplace remplace bien #13 par #13#10 et aussi #13#10 par #13#10#10

    A+
    Charly

  8. #8
    Membre habitué
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 466
    Points : 137
    Points
    137
    Par défaut
    Bonjour Gbegreg,
    J'ai testé ceci et différentes variantes...
    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
    var CR2CRLF : TStringlist;
          T:='';
          AssignFile(F,Opendialog1.FileName);
          Reset(F);
           Readln(F,S);
           if pos(#13#10,S)=0 then
           begin
             CR2CRLF := TStringList.Create;
             CR2CRLF.LineBreak := #13;
             CR2CRLF.Text := S;
             CR2CRLF.LineBreak := #13#10;
             Closefile(F);
             CR2CRLF.SaveToFile(Opendialog1.FileName); 
             CR2CRLF.free;
           end;
    mais pas mieux... :-(

  9. #9
    Membre habitué
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 466
    Points : 137
    Points
    137
    Par défaut
    Salut Charly910,
    malheureusement non...
    et si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    AssignFile(F,Opendialog1.FileName);
    Reset(F);
    Readln(F,S);
    s := StringReplace(s, #13, 'blabla',[rfReplaceAll]);
    t := StringReplace(s, 'blabla', #13#10,[rfReplaceAll]);
    rewrite(F);
    Writeln(F,t);
    Closefile(F);
    pas ok non plus ???
    le fichier final contient une ligne sans CR ni CRLF :-(

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    le premier truc qui me gêne c'est l'utilisation de Notepad++ pour vérifier le résultat
    j'ai fait un test rapide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TForm8.Button1Click(Sender: TObject);
    var L : TStringList;
    begin
     L:=TStringList.Create;
     try
       L.Add(#13);
       L.Add('Essai');
       L.Add(#13#10);
       L.SaveToFile('F:\Test.txt',TEncoding.ASCII); // à tester les différents encodage ANSI/UTF8
     finally
       L.Free;
     end;
    end;
    avec notepad++ effectivement peu concluant, toutefois, si je change l'extension en XML c'est plus lisible
    ou alors en utilisant un editeur hexa (i.e. HexEdit)
    Toutefois il y a des CR+LF de rajouté pour chaque lignes de la StringList
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  11. #11
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 671
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 671
    Points : 13 065
    Points
    13 065
    Par défaut
    ReadLn, comme son nom l'indique, lit une ligne, pas la totalité du fichier... Tu n'auras jamais de #13 puisque ça marque justement la fin de ligne.

  12. #12
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2004
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 86
    Points : 375
    Points
    375
    Par défaut
    Tu dois pouvoir faire ça en chargeant ton fichier dans une TStringList et en affectant #13#10 à la propriété LineBreak puis en enregistrant.

    C'est d'ailleurs la méthode proposée par gbegreg, mais lorsque tu as essayé, au lieu de charger le fichier, tu as utilisé la TStringList pour traiter une seule ligne à la fois récupérée par ReadLn.
    Et comme l'a dit AndNotor, ReadLn ne retourne pas les #13 ni les #13#10.

    Tu n'as besoin que des quelques lignes indiquées ci-dessous. Pas d'AssignFile, ReadLn, WriteLn. Juste la TStringList.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    myFile := TStringList.Create;
    myFile.LoadFromFile(AFileName);
    myFile.LineBreak := #13#10;
    myFile.SaveToFile(AFileName);
    myFile.Free;

  13. #13
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 339
    Points : 3 107
    Points
    3 107
    Par défaut
    @PhilLu

    comme dit AndNotOr, ton test ne prouve rien, car readln lit les caractères avant le Chr(13) et Writeln en rajoute un à la fin de la chaine

    essaye de vérifier la position des éventuels caractères chr(13) et chr(10) dans ta chaine après lecture.

    A+
    Charly

    Sinon lit et affiche le contenu de ton fichier caractère par caractère comme dans l'aide de Fileseek :

    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
    procedure TForm1.Button1Click(Sender: TObject);
     
    var
      iFileHandle: Integer;
      iFileLength: Integer;
      iBytesRead: Integer;
      Buffer: PChar;
      i: Integer
    begin
      if OpenDialog1.Execute then
      begin
        try
          iFileHandle := FileOpen(OpenDialog1.FileName, fmOpenRead);
          iFileLength := FileSeek(iFileHandle,0,2);
          FileSeek(iFileHandle,0,0);
          Buffer := PChar(AllocMem(iFileLength + 1));
          iBytesRead := FileRead(iFileHandle, Buffer^, iFileLength);
     
          FileClose(iFileHandle);
          for i := 0 to iBytesRead-1 do
          begin
            StringGrid1.RowCount := StringGrid1.RowCount + 1;
            StringGrid1.Cells[1,i+1] := Buffer[i];
            StringGrid1.Cells[2,i+1] := IntToStr(Integer(Buffer[i]));
          end;
        finally
          FreeMem(Buffer);
        end;
      end;
    end;

  14. #14
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 658
    Points : 3 599
    Points
    3 599
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par PhilLU Voir le message
    J'ai testé ceci et différentes variantes...
    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
    var CR2CRLF : TStringlist;
          T:='';
          AssignFile(F,Opendialog1.FileName);
          Reset(F);
           Readln(F,S);
           if pos(#13#10,S)=0 then
           begin
             CR2CRLF := TStringList.Create;
             CR2CRLF.LineBreak := #13;
             CR2CRLF.Text := S;
             CR2CRLF.LineBreak := #13#10;
             Closefile(F);
             CR2CRLF.SaveToFile(Opendialog1.FileName); 
             CR2CRLF.free;
           end;
    mais pas mieux... :-(
    En reprenant ton exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var CR2CRLF : TStringlist;
    begin
             CR2CRLF := TStringList.Create;
             CR2CRLF.LoadFromFile(Opendialog1.FileName);
             CR2CRLF.SaveToFile(Opendialog1.FileName); 
             CR2CRLF.free;
    end;
    Hermite avait déjà répondu. Pas la peine de positionner le LineBreak à #13#10 sous Windows car c'est la valeur par défaut, si le fichier Opendialog1.FileName contient des #13, le charger dans un TStringlist (sous Windows) va automatiquement le convertir avec des #13#10.
    Mon site - Mes tutoriels - GitHub - N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  15. #15
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 339
    Points : 3 107
    Points
    3 107
    Par défaut
    Bonjour,

    d'après mes tests, le Readln(F,S) élimine les #13 isolés dans la ligne lue.

    Il faut donc que tu passes par une autre solution pour lire ton fichier (certainement loadfromfile ...)

    A+
    Charly

  16. #16
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 339
    Points : 3 107
    Points
    3 107
    Par défaut
    Bonjour,
    chez moi en D7, le stringReplace fonctionne bien même après lecture d'un fichier et réécriture, même sans passer par des TStringLists. Essaye mon exemple :

    Test CRCRLF.zip

    A+
    Charly

  17. #17
    Membre habitué
    Homme Profil pro
    Owner
    Inscrit en
    Décembre 2004
    Messages
    466
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Owner
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2004
    Messages : 466
    Points : 137
    Points
    137
    Par défaut
    Merci Charly910,
    En effet, je charge via memo.lines.loadfromfile, les sauts de lignes sont respectés :-)
    Ensuite je lis les lignes une par une...
    donc OK


    Charly910


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

Discussions similaires

  1. Replacer CRLF et les Tabulations par un espace
    Par Invité dans le forum Langage
    Réponses: 12
    Dernier message: 06/01/2016, 19h10
  2. Afficher remplacer les fins de lignes CRLF par LF sous AIX
    Par doudou8mc dans le forum Shell et commandes POSIX
    Réponses: 20
    Dernier message: 16/06/2015, 17h40
  3. [CR 2008] remplacer les 'crlf' par des espaces dans un texte de "type" RTF
    Par digitfree dans le forum Formules
    Réponses: 5
    Dernier message: 02/04/2013, 12h18
  4. isoler 2 chaines séparées par un CRLF
    Par secretman dans le forum Delphi
    Réponses: 2
    Dernier message: 26/05/2007, 17h33

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