![]() |
AW: TStringList, Pos, PosEx usw.311
Ginge es nicht sinngemäß auch so mit einer Verwaltung der RichEdits?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
function IsSameText(const str1, str2: string): Boolean; begin Result := AnsiStrIComp(PChar(str1), PChar(Str2)) = 0; end; var load: tstringlist; switch, i: integer; RE : Array of TRichEdit; begin load := tstringlist.create; try load.loadfromfile('C:\1.txt'); switch := 0; Re[0]:=RichEdit1; Re[1]:=RichEdit2; For i=0 To load.count-1 do begin If IsSameText('hallo eins:', load[i]) Then switch:=0; If IsSameText('hallo zwei:', load[i]) Then switch:=1; Re[switch].Lines.Add(load[i]) end finally load.Free; end; end; |
AW: TStringList, Pos, PosEx usw.311
Damit würdest Du aber auch alle Zeilen vor "hallo eins" ins erste RichEdit kopieren, wenn ich das richtig sehe (switch steht ja initial auf 0).
|
AW: TStringList, Pos, PosEx usw.311
Überarbeitete Version:
Delphi-Quellcode:
Aber geht das so tatsächlich, mit einem Array für Controls? Und muss ich das nicht irgendwo noch createn oder mit SetLenght dimensionieren?
procedure TForm1.Button1Click(Sender: TObject);
function IsSameText(const str1, str2: string): Boolean; begin Result := AnsiStrIComp(PChar(str1), PChar(Str2)) = 0; end; var load: tstringlist; switch, i: integer; RE : Array of TRichEdit; begin load := tstringlist.create; try load.loadfromfile('C:\1.txt'); switch := -1; Re[0]:=RichEdit1; Re[1]:=RichEdit2; For i=0 To load.count-1 do begin If IsSameText('hallo eins:', load[i]) Then switch:=0; If IsSameText('hallo zwei:', load[i]) Then switch:=1; If switch >= 0 then Re[switch].Lines.Add(load[i]) end finally load.Free; end; end; |
AW: TStringList, Pos, PosEx usw.311
Wenn Du weißt, dass es 2 Elemente sind, dann ist ein dynamisches Array ja witzlos, Du könntest also auch bei einem statischen bleiben. Außerdem müsstest Du nach dem Befüllen des 2. RichEdits aus der Schleife springen, sonst kopierst Du die anschließenden Abschnitte ja mit ("hallo eins" kommt in dem Beispiel ja mehrfach vor).
[edit] Rein akademische Überlegung (würde ich persönlich nicht so machen):
Delphi-Quellcode:
Ich weiß allerdings nicht, ob das wirklich so funktioniert, das müsste man mal ausprobieren. [/edit]
procedure TForm1.Button1Click(Sender: TObject);
function IsSameText(const str1, str2: string): Boolean; begin Result := AnsiStrIComp(PChar(str1), PChar(Str2)) = 0; end; var load: tstringlist; switch, i: integer; RE : Array[0..1] of TRichEdit; begin load := tstringlist.create; try load.loadfromfile('C:\1.txt'); switch := -1; Re[0]:=RichEdit1; Re[1]:=RichEdit2; For i=0 To load.count-1 do begin If IsSameText('hallo eins:', load[i]) Then inc(switch); If IsSameText('hallo zwei:', load[i]) Then inc(switch); If switch in [0..1] then Re[switch].Lines.Add(load[i]) end finally load.Free; end; end; [edit2] Nee, würde nicht klappen, wenn die Reihenfolge in der Datei nicht stimmt. [/edit2] |
AW: TStringList, Pos, PosEx usw.311
Zitat:
Zu Punkt 2: Ich dachte das wäre so gewollt, dass immer hin und her gewechselt wird.:gruebel: |
AW: TStringList, Pos, PosEx usw.311
Ich habe mir den Ausgangspost noch einmal genau durchgelesen und Du könntest Recht haben. Dann wäre Deine Vorgehensweise zumindest nicht falsch, wenn auch etwas umständlich ;). Man könnte ja auch das Array weglassen und stattdessen eine einfache RichEdit-Variable deklarieren und mit nil initialisieren. Bei Treffer dann auf das passende RichEdit switchen, weiter unten auf Assigned abfragen und schreiben.
|
AW: TStringList, Pos, PosEx usw.311
JaJa. Am einfach arbeite ich ja noch:-D.
Statt immer ein Array zu switchen, einfach immer das Objekt auf das die Variable zeigt switchen. Klingt einfacher. |
AW: TStringList, Pos, PosEx usw.311
@Jumpy #13:
Zitat:
|
AW: TStringList, Pos, PosEx usw.311
Die Fehlermeldungen verstehe ich nicht, rein syntaktisch ist der Code IMO in Ordnung. Hast Du ihn denn auch exakt kopiert? Achja, mach aber aus dem dynamischen Array lieber wieder ein statisches. Und es wäre nett, wenn Du noch aufklären könntest, was nach dem Schreiben in das 2. RichEdit passieren soll (siehe die Posts vor Deinem).
|
AW: TStringList, Pos, PosEx usw.311
ja, habe alles richtig kopiert. sollte das nicht auch
Delphi-Quellcode:
und nich
For i := 0 To load.count-1 do
Delphi-Quellcode:
heissen? ich mein, ich weiss eh nich viel, aber das scheint mir logischer. genau da setzt der cursor auch an, wenn ich f9 drücke.
For i=0 To load.count-1 do
und wie ein statisches array aus einem dynamischen machen? ^^ und das programm soll einfach ALLES, was in 1.txt unter "hallo 1" steht (kommt mehrmals vor, hintereinander abwechselnd!), in richedit1 hineinschreiben (also schleifenmäßig) und das gleiche, nur mit "hallo 2" und richedit2 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:54 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