Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Ausblenden von Zeilen beim füllen eines Memo's mit Daten (https://www.delphipraxis.net/7461-ausblenden-von-zeilen-beim-fuellen-eines-memos-mit-daten.html)

Helpliner 12. Aug 2003 22:05


Ausblenden von Zeilen beim füllen eines Memo's mit Daten
 
Hi Leute,

ich lade über

Delphi-Quellcode:
Memo1.Lines.LoadFromFile('Datei');
eine Textdatei in ein Memo, das klappt auch soweit.
Nun möchte ich aber alle Zeilen die an erster Stelle ein "#" haben nicht im Memo anzeigen (Sie müssen nach dem bearbeiten aber wieder mit in die Datei geschrieben werden)

Da ich absoluter Newbie bin, wäre eine kleine Erklärung nett (wenn sowas überhaupt geht)

imp 12. Aug 2003 22:40

Re: Ausblenden von Zeilen beim füllen eines Memo's mit Daten
 
Bleibt dir wohl nichts anderes übrig als die Zeilen manuell zu löschen :D . Ich bin mir nicht sicher ob es beim Memo BeginUpdate und EndUpdate gibt deshalb würde ich dir empfehlen die Datei in eine StringList zu laden, die entsprechenden Zeilen aus dieser zu löschen und dann die StringListe dem Memo zuzuweisen.

Yheeky 12. Aug 2003 23:28

Re: Ausblenden von Zeilen beim füllen eines Memo's mit Daten
 
Hi,

also das geht so:

Erst lädst du deine Datei in dein Memo, wie du es schon beschrieben hattest. Dann benötigst du noch eine StringList, die die ursprüngliche Datei zwischenspeichert, weil du ja die Zeilen mit einem # aus der Memo rauslöschen musst. Das sieht dann bis hierhin so aus:

Code:
private
   Temp : TStringList;

[...]
procedure ...;
begin
Temp := TStringList.Create;
Memo1.Lines.LoadFromFile('Datei');
Temp := Memo1;

end;
So, jetzt hast du den Inhalt in der Temp-StringList gespeichert. Jetzt musst du überprüfen, welche Zeile ein # am Anfang hat. Das geht so:

Code:
var Zeile : Byte;
begin
for Zeile := 0 to Memo1.Lines.Count-1 do
if Copy(Memo1.Lines[Zeile],0,1) = '#' then
Memo1.Lines.Delete(Zeile);
So, das wäre es dann soweit. Wenn du jetzt den alten Zustand widerherstellen möchtest, musst du einfach die Temp-Stringlist in das Memo laden:

Code:
Memo1.Text := Temp.Text;
Am Ende, solltest du noch den Speicher der Temp-Stringlist freigeben:

Code:
procedure TForm1.FormDestroy(Sender: TObject);
begin
Temp.Free;

end;
Das war´s...wenn du noch Fragen hast, her damit *g*.

Gruß Yheeky

Illuminator-23-5 12. Aug 2003 23:37

Re: Ausblenden von Zeilen beim füllen eines Memo's mit Daten
 
ich hab mir da folgendes überlegt:
sobald du alle zeilen löschst, die ein # am anfang haben, bringt er sicher eine fehlermeldung (außer da is keine solche zeile vorhanden)

wenn du hingegen die schleife rückwärts laufen lässt, dürfte es funktionieren, sprich:
Delphi-Quellcode:
var
  i: integer;
begin
  for i := Memo1.Lines.Count-1 to 0 do
  if Memo1.Lines[i][1] = '#' then
    Memo1.Lines.Delete(i);
end;
damit müsste es dann funktionieren

Helpliner 12. Aug 2003 23:56

Re: Ausblenden von Zeilen beim füllen eines Memo's mit Daten
 
Erstmal vielen Dank euch dreien,

ich probiere das morgen mal aus und sollte ich noch Fragen haben (was ich für ziemlich wahrscheinlich halte) bin ich so frei diese hier zu posten :-)

Helpliner 13. Aug 2003 14:39

Re: Ausblenden von Zeilen beim füllen eines Memo's mit Daten
 
OK bin gerade am testen und stehe schon im ersten Block vor einem Problem.

Wenn ich versuche der TStringList den Inhalt des Memos zuzuweisen:

Delphi-Quellcode:
private
   Temp : TStringList;

[...]
procedure ...;
begin
Temp := TStringList.Create;
Memo1.Lines.LoadFromFile('Datei');
Temp := Memo1; <-- da wird gemeckert

end;
bekomme ich die FM das TStringList und TMemo inkompatible Typen sind, das selbe passiert auch wenn ich es per:

Delphi-Quellcode:
Temp := Memo1.Lines;
oder

Delphi-Quellcode:
Temp := Memo1.Text;
versuche, was mach ich da jetzt falsch ?

Tpercon 13. Aug 2003 14:44

Re: Ausblenden von Zeilen beim füllen eines Memo's mit Daten
 
Probier mal:
Delphi-Quellcode:
Temp.Text := Memo1.Text;

Chewie 13. Aug 2003 14:52

Re: Ausblenden von Zeilen beim füllen eines Memo's mit Daten
 
Sehr interessant :wink:

Jetzt verwendet ihr schon eine zweite Strringliste, und dann ladet ihr die Datei trotzdem in die Stringliste des Memos.

Ich würde so vorgehen:

1. In eine temporäre Stringliste wird per LoadFromFile die Datei geladen.
2. Eine Schleife von StringList.Count-1 bis 0. In der wird die Zeile gelöscht, falls das erste Zeichen ein # ist.
3. Diese Stringlist der Stringliste des Memos zuweisen und die temporäre Liste freigeben
4. fertig

Also Code:
Delphi-Quellcode:
var
  temp: TStringList;
  i: Integer;
begin
  temp := TStringLList.Create;
  try
    temp.LoadFromFile('test.txt');
    for i := temp.Count - 1 downto 0 do
      if temp[i][0] = '#' then Delete(i);
    Memo1.Lines.Assign(temp);
  finally
    temp.Free;
end;


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