Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Aufteilen eines Strings in mehrere Zeilen (Leerzeichen) (https://www.delphipraxis.net/81948-aufteilen-eines-strings-mehrere-zeilen-leerzeichen.html)

Nils_13 5. Dez 2006 19:37


Aufteilen eines Strings in mehrere Zeilen (Leerzeichen)
 
Hi,

wie kann man aus
asd bla

das machen:
asd
bla

?

Ich habe bereits zu dieser Aufspaltung diesen Code:
Delphi-Quellcode:
procedure TLexer.ScanLine(s : String);
var i : Integer;
begin
  i := Pos(s, ' ');
  if s[i + 1] = ' ' then
    WriteLn('Mehrere Leerzeichen')
  else
    WriteLn('Ein Leerzeichen');
end;
Der Code durchsucht nach Leerzichen und überprüft, ob mehrere Leerzeichen vorhanden sind, da nicht jedes Leerzeichen gleich eine neue Zeile sein soll, sondern z.B. zwei Leerzeichen (direkt hintereinander) nur eine neue Zeile ergeben sollen. Mein Problem ist jetzt, das Ausgeben von "asd" und "bla" (soll wie oben aussehen). Wie könnte man dies lösen ?

EDatabaseError 5. Dez 2006 19:47

Re: Aufteilen eines Strings in mehrere Zeilen (Leerzeichen)
 
Öhm warum ersetzt du nicht alle zwei leerzeichen durch ein #13+#10 ???

Dazu gibts aber auch schon einiges im Forum ;-)

St.Pauli 5. Dez 2006 20:01

Re: Aufteilen eines Strings in mehrere Zeilen (Leerzeichen)
 
Ja können maximal 2 Leerzeichen hintereinander stehen oder ist die mögliche Anzahl der Leerzeichen nach oben offen? Wenn nein, dann mach doch einfach:

Delphi-Quellcode:
  s := StringReplace(s, ' ', #13 + #10, [rfReplaceAll]);
s := StringReplace(s, ' ', #13 + #10, [rfReplaceAll]);
writeln(s);

Maja Jessica 5. Dez 2006 20:05

Re: Aufteilen eines Strings in mehrere Zeilen (Leerzeichen)
 
Hi,

oder von Hand (jedenfalls so in etwa):

Delphi-Quellcode:
procedure TForm1.ScanLine(zeile : String);
var i : integer;
    neu : string;
begin
  Memo1.Clear;
  neu := '';
  for i := 1 to length(zeile) do
  begin
    if zeile[i] <> ' ' then neu := neu + zeile[i];
    if (i > 1) AND (zeile[i] = ' ') AND (zeile[i-1] <> ' ') OR (i = length(zeile)) then
      begin
      Memo1.Lines.Add(neu);
      neu := '';
    end;
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  Scanline(edit1.Text);
end;
Alle Angaben ohne Gewehr :wink:

MJ

SirThornberry 5. Dez 2006 20:08

Re: Aufteilen eines Strings in mehrere Zeilen (Leerzeichen)
 
der Ansatz von Maja Jessica ist nicht schlecht. Allerdings würde ich nicht ständig ein Zeischen an den String anhängen sondern den Buffer gleich auf die maximal mögliche größe setzen und am Ende einmal die größe korrigieren. Ist bedeutend schneller da nicht jedesmal neu speicher angefordert werden muss und der String umkopiert werden muss (was so intern zwangsläufig passiert)


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:33 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-2025 by Thomas Breitkreuz