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:
TStringList.Add('Test'#10); // LF
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:
var
SB: TStringBuilder;
begin
SB := TStringBuilder.Create;
try
SB.Append('Variant20 = "17210"'#13#10);
SB.Append('Variant21 = "17220"'#13#10);
if RadioButton2.Checked then
begin
SB.Append('Variant22 = "47213"'#13#10);
SB.Append('Variant23 = "47214"'#13#10);
end;
SB.Append('Region = "Europe"'#13#10);
SB.Append('Region2 = "RoW"'#13#10);
SB.Append('Region3 = "USA"'#13#10);
SB.Append(''#13#10);
SB.Append('[Signature]'#10);
SB.Append('signature1 = "9880af1b5d5456de15affd708b3b74b2"'#10);
SB.Append('signature2 = "3cf0dbe1d0baf902e43229a07cfb9281"'#10);
SB.Append('signature3 = "3c76dea04775d174ac4f937445ae538b"'#10);
SB.Append('signature4 = "84d056d12279144f13341a7ccec3a7a2"'#10);
SB.Append('signature5 = "39120b41cbf137351aa6a08c732b3521"'#10);
SB.Append('signature6 = "5a224666234d8700e6c46bf2a943452c"'#10);
SB.Append('signature7 = "b06daa662fc8d9a1aee981c0a5df7c1a"'#10);
SB.Append('signature8 = "4bcd566ead66604069d58ab0a9f77d14"');
TFile.WriteAllText(filename, SB.ToString);
finally
SB.Free;
end;
Bookmarks