AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Stringlist ohne Zeilenumbruch speichern

Ein Thema von BMI · begonnen am 30. Mai 2018 · letzter Beitrag vom 31. Mai 2018
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von BMI
BMI

Registriert seit: 16. Jul 2010
58 Beiträge
 
Delphi 2 Desktop
 
#1

Stringlist ohne Zeilenumbruch speichern

  Alt 30. Mai 2018, 12:49
Delphi-Version: 5
Hallo, ich würde gerne eine Stringlist speichern, ohne daß hinten noch ein Zeilenumbruch drangepappt wird.

Delphi-Quellcode:
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
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)
also ohne #13#10 ganz unten dran.

Delphi-Quellcode:
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
gibt mir aus:
Zitat:
1
2
3
4
_
_ steht hier für den Zeilenumbruch

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.
eine Signatur? - in 2022? - WOZU ?!!!

Geändert von BMI (30. Mai 2018 um 12:56 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.007 Beiträge
 
Delphi 12 Athens
 
#2

AW: Stringlist ohne Zeilenumbruch speichern

  Alt 30. Mai 2018, 14:13
Aktuelle Delphi-Versionen kannst du mit SL.TrailingLineBreak := False dazu bewegen.

Zitat:
When TrailingLineBreak property is True (default value) then Text property
will contain line break after last line. When it is False, then Text value
will not contain line break after last line. This also may be controlled
by soTrailingLineBreak option.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#3

AW: Stringlist ohne Zeilenumbruch speichern

  Alt 30. Mai 2018, 14:55
Ich hatte zuletzt mit TFile.WriteAllText('dat.ei', TrimRight(SL.Text));
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von BMI
BMI

Registriert seit: 16. Jul 2010
58 Beiträge
 
Delphi 2 Desktop
 
#4

AW: Stringlist ohne Zeilenumbruch speichern

  Alt 30. Mai 2018, 19:03
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?
http://docwiki.embarcadero.com/Libra...ilingLineBreak

oder hatte das damals evtl. Speicher/Ladetechnische Gründe?
aber eigentlich leuchtet mir das nicht ein.
eine Signatur? - in 2022? - WOZU ?!!!
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.007 Beiträge
 
Delphi 12 Athens
 
#5

AW: Stringlist ohne Zeilenumbruch speichern

  Alt 30. Mai 2018, 20:29
Immerhin hat dann jede Zeile garantiert ein LineBreak am Ende.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Stringlist ohne Zeilenumbruch speichern

  Alt 30. Mai 2018, 20:39
2) und wozu ist/ war die Funktion ("auch bei StringListen unten immer #13#10 anhängen") damals gut/ implementiert worden?
Vielleicht damit man über "f: File" ein "ReadLn(f)" machen kann?
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;
Gruß vom KodeZwerg

Geändert von KodeZwerg (30. Mai 2018 um 21:20 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Stringlist ohne Zeilenumbruch speichern

  Alt 30. Mai 2018, 20:57
Aber nen sinnvollen Grund seitens Borland/aka Emba gab/gibt es für die Implementierung der Nachgelagerten Zeile nicht, oder?
Das ist ein Mißverständnis.
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.
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector

Geändert von p80286 (30. Mai 2018 um 21:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Stringlist ohne Zeilenumbruch speichern

  Alt 30. Mai 2018, 21:09
Das Ende einer "Textzeile" wird durch x0D0A definiert.
EOL / End Of Line
EOF / End Of File

was Du da schreibst ist ein Zeilenumbruch (CRLF).

für IOResult mußt Du aber unbedingt {$I-} nutzen, und das ist nicht immer bei allen Programmen der Fall.
Habs nachgebessert, Danke.
Gruß vom KodeZwerg

Geändert von KodeZwerg (30. Mai 2018 um 21:13 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#9

AW: Stringlist ohne Zeilenumbruch speichern

  Alt 31. Mai 2018, 08:11
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.


https://de.wikipedia.org/wiki/Steuerzeichen

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.685 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Stringlist ohne Zeilenumbruch speichern

  Alt 31. Mai 2018, 08:41
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.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz