Results 1 to 12 of 12

Thread: TStringList CRLF en LF

  1. #1
    Win32.Trojan.Heur.Herby
    Join Date
    Dec 2003
    Location
    Nuenen of all places
    Posts
    160

    TStringList CRLF en LF

    vanuit mijn applicatie maak ik meerdere bestanden aan.
    Dit doe ik door een StringList te vullen welke ik dan later weg schrijf.

    Nu blijkt het dat ik een bestand moet aanmaken met zowel CR als CR met LF.

    Kan dit uberhaupt wel met een TStringList of moet ik zelf met writeln oid aan de slag?

    Click image for larger version. 

Name:	Capture.PNG 
Views:	30 
Size:	46.8 KB 
ID:	7826

    Code:
      SL := TStringList.Create;
      try
        SL.Add('Variant20 = "17210"');
        SL.Add('Variant21 = "17220"');
        if RadioButton2.Checked then
        begin
          SL.Add('Variant22 = "47213"');
          SL.Add('Variant23 = "47214"');
        end;
        SL.Add('Region = "Europe"');
        SL.Add('Region2 = "RoW"');
        SL.Add('Region3 = "USA"');
        SL.Add('');
        SL.Add('[Signature]');
        SL.Add('signature1 = "9880af1b5d5456de15affd708b3b74b2"');
        SL.Add('signature2 = "3cf0dbe1d0baf902e43229a07cfb9281"');
        SL.Add('signature3 = "3c76dea04775d174ac4f937445ae538b"');
        SL.Add('signature4 = "84d056d12279144f13341a7ccec3a7a2"');
        SL.Add('signature5 = "39120b41cbf137351aa6a08c732b3521"');
        SL.Add('signature6 = "5a224666234d8700e6c46bf2a943452c"');
        SL.Add('signature7 = "b06daa662fc8d9a1aee981c0a5df7c1a"');
        SL.Add('signature8 = "4bcd566ead66604069d58ab0a9f77d14"');
        SL.SaveToFile(FileName);
      finally
        SL.Free;
      end;

  2. #2
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,377
    Het antwoord staat hier met de property linebreak.
    Delphi is great. Lazarus is more powerfull

  3. #3
    Win32.Trojan.Heur.Herby
    Join Date
    Dec 2003
    Location
    Nuenen of all places
    Posts
    160
    Dat had ik geprobeerd en geldt dan voor de gehele file, niet per regel.
    Ik moet het in de mix gebruiken

  4. #4
    Dat lukt inderdaad niet zomaar met een TStringList. Hoe zou die moeten weten welke regel een LF moet hebben, en welke CRLF?

    Overigens is dit wel heel vreemd. Weet je zeker dat het zo moet en dat het niet een foutje is in het voorbeeldbestand?

    Hoe dan ook. Het kan eventueel wel met een TStringList, want de individuele items van een TStringList kunnen wel degelijk enters bevatten als je die expliciet toevoegt:

    Delphi Code:
    1. TStringList.Add('Test'#10); // LF
    2. TStringList.Add('Test'#13#10); // CRLF

    Maar dan moet je vervolgens niet de Text property van de stringlist gebruiken, maar de items één voor één uitlezen en wegschrijven. De vraag is dan nog waar je de stringlist voor nodig hebt.

    Ik zou eerlijk gezegd 'gewoon' een TFileStream gebruiken. Of als je het eerst in memory op wilt bouwen, kijk dan eens naar TStringBuilder. Daarmee kan je op een efficiente manier strings aan elkaar plakken (zonder constante tussentijdse herallocatie van de string). Uiteindelijk kan je met TFile.WriteAllText de resultante van de stringbuilder naar een bestandje schrijven.

    De code ziet er dan bijna hetzelfde uit, behalve natuurlijk de expliciete enters erin. Even System.IOUtils toevoegen voor TFile, als je die zou willen gebruiken.

    Delphi Code:
    1. var
    2.   SB: TStringBuilder;
    3. begin
    4.   SB := TStringBuilder.Create;
    5.   try
    6.     SB.Append('Variant20 = "17210"'#13#10);
    7.     SB.Append('Variant21 = "17220"'#13#10);
    8.     if RadioButton2.Checked then
    9.     begin
    10.       SB.Append('Variant22 = "47213"'#13#10);
    11.       SB.Append('Variant23 = "47214"'#13#10);
    12.     end;
    13.     SB.Append('Region = "Europe"'#13#10);
    14.     SB.Append('Region2 = "RoW"'#13#10);
    15.     SB.Append('Region3 = "USA"'#13#10);
    16.     SB.Append(''#13#10);
    17.     SB.Append('[Signature]'#10);
    18.     SB.Append('signature1 = "9880af1b5d5456de15affd708b3b74b2"'#10);
    19.     SB.Append('signature2 = "3cf0dbe1d0baf902e43229a07cfb9281"'#10);
    20.     SB.Append('signature3 = "3c76dea04775d174ac4f937445ae538b"'#10);
    21.     SB.Append('signature4 = "84d056d12279144f13341a7ccec3a7a2"'#10);
    22.     SB.Append('signature5 = "39120b41cbf137351aa6a08c732b3521"'#10);
    23.     SB.Append('signature6 = "5a224666234d8700e6c46bf2a943452c"'#10);
    24.     SB.Append('signature7 = "b06daa662fc8d9a1aee981c0a5df7c1a"'#10);
    25.     SB.Append('signature8 = "4bcd566ead66604069d58ab0a9f77d14"');
    26.     TFile.WriteAllText(filename, SB.ToString);
    27.   finally
    28.     SB.Free;
    29.   end;
    Last edited by GolezTrol; 19-Nov-18 at 09:59.
    1+1=b

  5. #5
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,328
    Ik kan mij eerlijk gezegd ook niet voorstellen dat LFen CRLF een speciale
    betekenis hebben binnen een bestand; waarschijnlijk hebben ze het voorbeeld
    gedeeltelijk door (bijvoorbeeld) een Linuxprogramma laten generen en daarna
    dit bestand (onder Windows) met de hand aangepast.

    Ik ben er vrij zeker van dat je gewoon een TIniFile kunt gebruiken (zo ziet de
    indeling in je plaatje er in ieder geval uit) en dat alles dan gewoon werkt.
    TMemoryLeak.Create(Nil);

  6. #6
    Win32.Trojan.Heur.Herby
    Join Date
    Dec 2003
    Location
    Nuenen of all places
    Posts
    160
    Quote Originally Posted by GolezTrol View Post
    Dat lukt inderdaad niet zomaar met een TStringList. ..
    Ik zal dit vanavond eens proberen. De navigatie in Volkswagen, Seat,Skoda etc zijn erg kritisch.
    De import mislukt nu terwijl de inhoud (op CR en CRLF na) hetzelfde zijn.
    Last edited by GolezTrol; 19-Nov-18 at 18:26.

  7. #7
    Win32.Trojan.Heur.Herby
    Join Date
    Dec 2003
    Location
    Nuenen of all places
    Posts
    160
    Quote Originally Posted by VideoRipper View Post
    Ik kan mij eerlijk gezegd ook niet voorstellen dat LFen CRLF een speciale
    betekenis hebben binnen een bestand; waarschijnlijk hebben ze het voorbeeld
    gedeeltelijk door (bijvoorbeeld) een Linuxprogramma laten generen en daarna
    dit bestand (onder Windows) met de hand aangepast.

    Ik ben er vrij zeker van dat je gewoon een TIniFile kunt gebruiken (zo ziet de
    indeling in je plaatje er in ieder geval uit) en dat alles dan gewoon werkt.
    Vaak zie je dat de navigatie devices onder water op Linux draaien, wellicht dat het daar over valt.
    Ook zitten er lege regels in de file, die inderdaad verdacht veel op een ini file lijkt, geen idee ofdat die ook hierover valt.
    Dit was de reden dat ik eeen StringList gekozen had.

  8. #8
    In plaats van de Append kun natuurlijk ook SL.Add() gebruiken met LineBreak op #10
    en dan voor de regels waar je ook de #13 moet hebben, deze er zelf achter zetten.

    Het is wel een idioot systeem als er binnen één bestand gebruik wordt gemaakt van verschillende linebreaks.

  9. #9
    Win32.Trojan.Heur.Herby
    Join Date
    Dec 2003
    Location
    Nuenen of all places
    Posts
    160
    Ja het was voor mij ook een verrassing.
    Ook zijn ze zelf niet erg consequent.

    Heb files met alleen LF
    Heb files met CRLF
    Heb Files met LF en CRLF
    Last edited by GolezTrol; 19-Nov-18 at 18:25.

  10. #10
    heb je al eens met een hexeditor gekeken naar de header van je file?

    Kan het zijn dat je niet een issue hebt met crlf / lf maar alleen met de laatste regel? Daar staat zo te zien geen lf of crlf achter.

  11. #11
    Win32.Trojan.Heur.Herby
    Join Date
    Dec 2003
    Location
    Nuenen of all places
    Posts
    160
    Quote Originally Posted by Benno View Post
    heb je al eens met een hexeditor gekeken naar de header van je file?

    Kan het zijn dat je niet een issue hebt met crlf / lf maar alleen met de laatste regel? Daar staat zo te zien geen lf of crlf achter.
    Ik had er een screenshot bij gedaan van notepad++. Als je daar symbols aanzet zie je direct wat er overal staat, ontzettend handig.

  12. #12
    Win32.Trojan.Heur.Herby
    Join Date
    Dec 2003
    Location
    Nuenen of all places
    Posts
    160
    Goleztrol,

    Jouw aanpassing werkt prima.... moet wel het nodige gaan aanpassen maar dat komt wel goed.
    Bedankt voor je hulp, overigens kende ik TStringBuilder nog niet

    notepad++
    Click image for larger version. 

Name:	Capture.PNG 
Views:	12 
Size:	23.1 KB 
ID:	7827

Thread Information

Users Browsing this Thread

There are currently 2 users browsing this thread. (0 members and 2 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •