![]() |
Delphi-Version: 5
Stringlist ohne Zeilenumbruch speichern
Hallo, ich würde gerne eine Stringlist speichern, ohne daß hinten noch ein Zeilenumbruch drangepappt wird.
Delphi-Quellcode:
Was ich eigentlich haben möchte ist eine Stringlist, die eine 4 Zeilen Datei erzeugt, mit den Zahlen von 1-4 untereinander. (ggf später mehr)
function Zaehl():Boolean ;
var i, j, Max : INteger; s: String; SL: TStringlist; begin SL := TStringlist.create; s := ''; Max := 4; for i := 0 to Max-1 do begin ////////////// steht unten /////////////////// end; sl.Clear; // << SELBST hier bei kommt eine Datei mit 2 Zeichen (=Zeilenumbruch) raus. SL.Add(s); sl.SaveToFile ('.\Zahldatei.txt'); SL.free; END; // function also ohne #13#10 ganz unten dran.
Delphi-Quellcode:
gibt mir aus:
function Zaehl():Boolean ;
var i, j, Max : INteger; s: String; SL: TStringlist; begin SL := TStringlist.create; s := ''; Max := 4; for i := 0 to Max-1 do begin // if i < Max -1 then // bei -1 pappt er die 3 direkt an die 4 und dann kommt nocho ein Zeilenumbruch. S:= S + inttostr(i+1) // + #13#10 else S:= S + inttostr(i+1); // end; SL.Add(s); sl.SaveToFile ('.\Zahldatei.txt'); SL.free; END; // function Zitat:
1) Wie kann ich das abstellen? 2) und wozu ist/ war die Funktion ("auch bei StringListen unten immer #13#10 anhängen") damals gut/ implementiert worden? Ich hatte mich da nur beim Memo immer über den angehängten Zeilenumbruch geärgert + gewundert, aber daran gewöhnt, da der bei der Verarbeitung von memo.text nie auftauchte und nur bei der Ausgabe im Memo wieder auftauchte. Wenn ich Einstellungen einer Datei speicherte, war mir das immer egal, denn alles funktionierte auch später beim Laden in eine Stringlist. Ich wüßte aber jetzt auch nicht, unter welchem Stichwort ich nacsuchen/nachschlagen müßte. |
AW: Stringlist ohne Zeilenumbruch speichern
Aktuelle Delphi-Versionen kannst du mit
Delphi-Quellcode:
dazu bewegen.
SL.TrailingLineBreak := False
Zitat:
|
AW: Stringlist ohne Zeilenumbruch speichern
Ich hatte zuletzt mit
Delphi-Quellcode:
:oops:
TFile.WriteAllText('dat.ei', TrimRight(SL.Text));
|
AW: Stringlist ohne Zeilenumbruch speichern
Dank Euch.
Allerdings sollte die Stringlist dann bei TrimRight(SL.Text)) aber wohl besser auch nicht zu lang (z.B. ein paar hundert MB oder gar GB) sein, oder? (damit das nicht dadurch gebremst wird) Aber nen sinnvollen Grund seitens Borland/aka Emba gab/gibt es für die Implementierung der Nachgelagerten Zeile nicht, oder? ![]() oder hatte das damals evtl. Speicher/Ladetechnische Gründe? aber eigentlich leuchtet mir das nicht ein. |
AW: Stringlist ohne Zeilenumbruch speichern
Immerhin hat dann jede Zeile garantiert ein LineBreak am Ende.
|
AW: Stringlist ohne Zeilenumbruch speichern
Zitat:
Theoretisch kannst Du mit Read/ReadLn bzw Write/WriteLn das ganze locker hinbekommen. hier nur mal so hingekritzelt, kann sein das was falsch ist....
Delphi-Quellcode:
function SchreibDasFile (const DateiName: String; const SL : TStringlist): Boolean;
// Parameter 1 = Ein valider Dateiname // Parameter 2 = Eine StringList var Datei: TextFile; Cnt: Byte; // wenn Deine SL mehr als 255 Einträge hat solltest Du das hier erweitern (!) begin Result := False; try AssignFile(Datei, DateiName); Rewrite(Datei); if {$I-}IOResult = 0{$I+} then begin for Cnt := 0 to SL.Count -2 do writeln(Datei, SL[Cnt]); // <- hier wird alles mit Zeilenumbruch geschrieben write(Datei, SL[SL.Count -1]); // <- hier nicht CloseFile(Datei); end; finally Result := True; end; end; |
AW: Stringlist ohne Zeilenumbruch speichern
Zitat:
Das Ende einer "Textzeile" wird durch x0D0A definiert. Ersatzweise ist ein x1A für die letzte Zeile zulässig. Das was Du als "nachgelagerte Zeile" identifizierst ist die die erste Position einer noch zu schreibenden Zeile. Gruß K-H @KodeZwerg für IOResult mußt Du aber unbedingt {$I-} nutzen, und das ist nicht immer bei allen Programmen der Fall. |
AW: Stringlist ohne Zeilenumbruch speichern
Zitat:
EOF / End Of File was Du da schreibst ist ein Zeilenumbruch (CRLF). Zitat:
|
AW: Stringlist ohne Zeilenumbruch speichern
Wie ist denn "EOL" definiert?
Wie wir ja alle wissen ist es reine Interpretationsfrage wie die Steuercodes genutzt werden. Das "CarriageReturn Linefeed" war ja für viele Drucker/Fernschreiber die Sequenz mit der der Cursor in die 1. Position der nächsten Zeile bewegt wurde. Andere interpretierten das "LineFeed" alleine als die notwendige Aufforderung. Auf diesen Geräten wurde dann gerne "VerticalTab" x0B als reiner Zeilenvorschub genutzt. Das gilt ja auch nur für Systeme die auf der TTY-Philosophie aufbauen. In HTML oder bei fixen Satzlängen werden die Steuerzeichen meist nur als Whitespaces interpretiert. vgl. ![]() ![]() Gruß K-H |
AW: Stringlist ohne Zeilenumbruch speichern
Ich will auf gar keinen Fall stänkern oder klugscheissen, aber loswerden will ichs trotzdem irgendwie.
EOL = es gibt dafür keine eindeutige Bytesequenz, es sind Faktoren. Angenommen Du erstellst mit Notepad einen Einzeiler OHNE CRLF. Wie ist da EOL definiert? Richtig, über EOF :-) Kommen CR oder LF vor, kann das auch ein EOL bedeuten, je nachdem wie die folgebytes ausschauen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:17 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz