Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zeilen in Memo löschen (https://www.delphipraxis.net/40312-zeilen-memo-loeschen.html)

Opa Knack 14. Feb 2005 08:32


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

Nicodius 14. Feb 2005 08:34

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

Nicodius 14. Feb 2005 08:36

Re: Zeilen in Memo löschen
 
das habe ich mal fürs zeilen löschen gefunden

von Daniel_B <-- vermisse daniel übrigens noch immer

Matze 14. Feb 2005 08:42

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:
dec(LineCount);
Wird nicht ausgeführt (es befindet sich kein blauer Punkt beim Kompilieren vor der Zeile).

Gehört zwar nicht direkt zum Thema, würde mich aber schon interessieren.

Sanchez 14. Feb 2005 08:46

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;

Sharky 14. Feb 2005 08:56

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.

Matze 14. Feb 2005 09:03

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*

Catbytes 14. Feb 2005 09:12

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:
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;
Macht dann aus:
================================================== =====
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...
================================================== =====

Sourcemaker 14. Feb 2005 10:45

Re: Zeilen in Memo löschen
 
Sharky sagte:
Zitat:


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 ; 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.
Er wollte nicht die Zählervariable "i" ändern sondern den höchsten Wert der Zählerschleife und der
läßt sich im Nachhinein nicht verändern. Der Endwert wird nur beim Schleifenstart ausgewertet.

Grüße

Frank

Binärbaum 14. Feb 2005 11:39

Re: Zeilen in Memo löschen
 
Zitat:

Zitat von Sourcemaker
Er wollte nicht die Zählervariable "i" ändern sondern den höchsten Wert der Zählerschleife und der
läßt sich im Nachhinein nicht verändern. Der Endwert wird nur beim Schleifenstart ausgewertet.

Man könnte die For-Schleife ja auch durch eine entsprechende while-Schleife ersetzen, bei der man die Zählvariable "manuell" rauf-/runterzählen muss. Dann kann man auch innerhalb der Schleife den Wert der Zählvariable ändern, ohne dass der Compiler meckert.

MfG
Binärbaum


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:05 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