![]() |
Zeilen in Memo löschen
Hallo,
manchmal ist man einfach zu vernagelt: Ich möchte ein Memo nach Leerzeilen durchsuchen und diese löschen. Zusätzlich können die zu löschenden Zeilen aber auch (nach x Leerschritten) noch Text beinhalten. Ergo soll jede Zeile entweder direkt gelöscht werden, wenn ein darin nur ein Zeilenumbruch enthalten ist, oder sie soll gelöscht werden, wenn mehr als 5 Leerzeichen am Anfang stehen. Irgendwie habe ich am Wochenende zuviel in PHP herumgespielt, ich komme einfach nicht dahinter :wall: Könnte mir mal jemand unter die Arme greifen? Danke Opa |
Re: Zeilen in Memo löschen
kleiner tipp: such hier einfach mal (heißer tipp : unter pos(fürs zeichen finden) oder delete(löschen eines gewissentextbereiches)) :angel2:
mfg Nico |
Re: Zeilen in Memo löschen
|
Re: Zeilen in Memo löschen
Ich habe gedacht, das schreib ich schnell, aber Pustekuchen, kann mir einer sagen, wieso das nicht geht?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i: integer; LineCount: integer; begin LineCount := Memo1.Lines.Count; for i := 0 to LineCount - 1 do begin if (Memo1.Lines[i] = '') or (Pos(' ', Memo1.Lines[i]) = 1) then begin Memo1.Lines.Delete(i); dec(LineCount); end; end; end;
Delphi-Quellcode:
Wird nicht ausgeführt (es befindet sich kein blauer Punkt beim Kompilieren vor der Zeile).
dec(LineCount);
Gehört zwar nicht direkt zum Thema, würde mich aber schon interessieren. |
Re: Zeilen in Memo löschen
Hallo,
Machs doch so:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i: integer; begin for i := Memo1.Lines.Count - 1 downto 0 do begin if (Memo1.Lines[i] = '') or (Pos(' ', Memo1.Lines[i]) = 1) then begin Memo1.Lines.Delete(i); end; end; end; |
Re: Zeilen in Memo löschen
@Matze:
Es ist immer ein Fehler in einem Array etwas löschen zu wollen wenn die Schleife von 0 bis zum ende des Arrays läuft. Wenn in deinem Memo 10 Zeilen stehen läuft deine Schleife von 0 bis 9. Wenn Du nun die Zeile 5 (index 4) löschst sind in deinem Memo nur noch 9 Zeilen (0 bis 8); deine Schleife würde aber noch immer bis 9 laufen. Und da knallt es dann. Dein Fehler kommt daher das Du in einer FOR-Do Schleife die Zählervariable nicht verändern darfst/kannst. |
Re: Zeilen in Memo löschen
Danke Sharky, aber wieso knallt es bzw. wieso kann ich LineCount nicht herunterzählen? Das wollte ich ja extra deshalb machen. Und knallen tut es gar nicht, ich muss den Button nur 2x klickn, bis das erwünschte Ergebnis eintritt.
Edit: Habe deinen letzten Satz übersehen, jetzt kappier ich's so halb ^^ danke. *blubb* |
Re: Zeilen in Memo löschen
Hallo,
mach es doch so - dann spielt es auch keine Rolle, ob nach >5 Zeichen noch Text kommt. Der ganze Text (egal wo), wird dann "gesichert":
Delphi-Quellcode:
Macht dann aus:
procedure TForm1.Button1Click(Sender: TObject);
var i: Integer; begin for i := Memo1.Lines.Count - 1 downto 0 do begin if Trim(Memo1.Lines[i]) = '' then Memo1.Lines.Delete(i); Memo1.Lines[i] := Trim(Memo1.Lines[i]); end; end; ================================================== ===== Dies ist ein **************kleiner Test. ******Alles sollte nun weg und linksbündig sein... ================================================== ===== dieses hier: ================================================== ===== Dies ist ein kleiner Test. Alles sollte nun weg und linksbündig sein... ================================================== ===== |
Re: Zeilen in Memo löschen
Sharky sagte:
Zitat:
läßt sich im Nachhinein nicht verändern. Der Endwert wird nur beim Schleifenstart ausgewertet. Grüße Frank |
Re: Zeilen in Memo löschen
Zitat:
MfG Binärbaum |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:11 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