![]() |
Ausblenden von Zeilen beim füllen eines Memo's mit Daten
Hi Leute,
ich lade über
Delphi-Quellcode:
eine Textdatei in ein Memo, das klappt auch soweit.
Memo1.Lines.LoadFromFile('Datei');
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) |
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.
|
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:
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:
private
Temp : TStringList; [...] procedure ...; begin Temp := TStringList.Create; Memo1.Lines.LoadFromFile('Datei'); Temp := Memo1; end;
Code:
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:
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);
Code:
Am Ende, solltest du noch den Speicher der Temp-Stringlist freigeben:
Memo1.Text := Temp.Text;
Code:
Das war´s...wenn du noch Fragen hast, her damit *g*.
procedure TForm1.FormDestroy(Sender: TObject);
begin Temp.Free; end; Gruß Yheeky |
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:
damit müsste es dann funktionieren
var
i: integer; begin for i := Memo1.Lines.Count-1 to 0 do if Memo1.Lines[i][1] = '#' then Memo1.Lines.Delete(i); end; |
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 :-) |
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:
bekomme ich die FM das TStringList und TMemo inkompatible Typen sind, das selbe passiert auch wenn ich es per:
private
Temp : TStringList; [...] procedure ...; begin Temp := TStringList.Create; Memo1.Lines.LoadFromFile('Datei'); Temp := Memo1; <-- da wird gemeckert end;
Delphi-Quellcode:
oder
Temp := Memo1.Lines;
Delphi-Quellcode:
versuche, was mach ich da jetzt falsch ?
Temp := Memo1.Text;
|
Re: Ausblenden von Zeilen beim füllen eines Memo's mit Daten
Probier mal:
Delphi-Quellcode:
Temp.Text := Memo1.Text;
|
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