TTStringList, Zeilenumbruch ?

Rund um die LCL und andere Komponenten
Antworten
Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

TTStringList, Zeilenumbruch ?

Beitrag von Mathias »

Wieso gibt es nach jeder Ziffer einen Zeilenumbruch ?

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var
  sl: TStringList;
begin
  sl := TStringList.Create;
 
  sl.Text := sl.Text + '1';
  sl.Text := sl.Text + '2';
  sl.Text := sl.Text + '3';
  sl.Text := sl.Text + '4';
  sl.Text := sl.Text + '5';
 
  WriteLn(sl.Text);
  WriteLn(Length(sl.Text));
 
  sl.Free;
end;   


Ausgabe:

Code: Alles auswählen

1
1
2
3
4
5
 
10


Ich will aber gerne, das

Code: Alles auswählen

12345
kommt.

Nachtrag: wen ich TMemo anstelle TStringList nehme, dann kommt es richtig.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: TTStringList, Zeilenumbruch ?

Beitrag von theo »

Das ist Delphi kompatibel.

Warum nimmst du dafür nicht einen normalen String?

http://stackoverflow.com/questions/1864 ... line-break

Erwin
Beiträge: 286
Registriert: Mi 16. Sep 2009, 14:15
OS, Lazarus, FPC: Xubuntu 22.04 / x86_64_linux-gtk 2 / L 2.2.0 / FPC 3.2.2

Re: TTStringList, Zeilenumbruch ?

Beitrag von Erwin »

StringList ist nun mal kein String. Ich vermute mal, die Entwickler haben sich halt gedacht, wenn Jemand bei StringList mit + neues hinzufügt, dass dann gleich ein neuer Satz/Zeile etc. sozusagen gemeint ist. So wie eben bei der ListBox mit Add. Anders gesagt: + ist bei StringList teils nichts anderes als ein Add Befehl. Wenn Du willst, dass alles in einer Zeile hinzugefügt wird (wobei Zeile vermutlich nicht der Richte Begriff in dem Fall ist), dann musst es im Befehlen es in der gleichen Zeile hinzuzufügen:

Code: Alles auswählen

 
procedure TForm1.Button1Click(Sender: TObject);
var sl: TStringList;
begin
  sl := TStringList.Create;
 
  sl.Add(''); // Damit wird eine Zeile hinzugefügt. Ansonsten gibt es keine und die nächste Code-Zeile würde sofort zur Fehlermeldung führen. Weil es außerhalb der Listenlänge dann wäre.
  sl[0] := sl[0]+'1'; // Somit wird in der Zeile 0 der Inhalt von Zeile 0 plus die 1 hinzu gefügt.
  sl[0] := sl[0]+'2';
  sl[0] := sl[0]+'3';
  sl[0] := sl[0]+'4';
  sl[0] := sl[0]+'5';
 
  WriteLn(sl.Text);
  WriteLn(Length(sl.Text));
 
  sl.free;
end;
 

Dies sollte dann funktionieren.

Edit:
Sinnvoller wäre aber am Schluss dann vermutlich dieser Code:

Code: Alles auswählen

 
  WriteLn(sl[0]);
  WriteLn(Length(sl[0]));
 

Also '[0]' anstelle von '.Text'.
Lazarus 2.2.0 / FP 3.2.4

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: TTStringList, Zeilenumbruch ?

Beitrag von Mathias »

Warum nimmst du dafür nicht einen normalen String?

Ich wollte die StringList als Buffer von einem COM-Port verwenden.
Ich habe es aber unterdessen anders gelöst.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten