![]() |
Anfängerfrage - Mehere Zeilen auslesen
Hallo,
ich habe in ein Memofeld eine Textdatei (Liste) geladen. Diese Textdatei hat folgendes Format:
Code:
u.s.w. Die Schüsselworte sind immer gleich - die Datensätze sind natürlich verschieden. Das ganze kann sich beliebig oft wiederholen.
Zeile mit Schlüsselwort 1
Nun kommen mehere Zeilen unterschiedlicher Anzahl und Länge Zeile mit Schlüsselwort 2 Wieder mehere Zeilen unterschiedlicher Anzahl und Länge Zeile mit Schlüsselwort 3 Wieder mehere Zeilen unterschiedlicher Anzahl und Länge Zeile mit Schlüsselwort 1 Wieder mehere Zeilen unterschiedlicher Anzahl und Länge Zeile mit Schlüsselwort 2 Wieder mehere Zeilen unterschiedlicher Anzahl und Länge Zeile mit Schlüsselwort 3 Wieder mehere Zeilen unterschiedlicher Anzahl und Länge Zeile mit Schlüsselwort 1 Wieder mehere Zeilen unterschiedlicher Anzahl und Länge Zeile mit Schlüsselwort 2 Wieder mehere Zeilen unterschiedlicher Anzahl und Länge Zeile mit Schlüsselwort 3 Wieder mehere Zeilen unterschiedlicher Anzahl Ich möchte einzelne Zeilen in ein zweites Memofeld laden und dabei folgendes Format erzielen:
Code:
Bisher habe ich folgendes versucht, aber ich komme nicht weiter.
Schlüsselwort 1
Text zwischen Schlüsselwort 2 und Schlüsselwort 3 Schlüsselwort 1 Text zwischen Schlüsselwort 2 und Schlüsselwort 3 Schlüsselwort 1 Text zwischen Schlüsselwort 2 und Schlüsselwort 3
Delphi-Quellcode:
Wie kann ich den Text zwischen Schlüsselwort 2 und 3 in mehrmals nacheinander auslesen ?
var i: integer;
m: integer; // Zeilennummer Schlüsselwort 2 q: integer; // Zeilennummer Schlüsselwort 3 ti: string; // Zeileninhalt Schlüsselwort 1 begin for i := 0 to Memo1.Lines.Count - 1 do begin if Pos('Schlüsselwort 1' , Memo1.Lines.Strings[i]) <> 0 then begin ti:= Memo1.Lines.Strings[i]; Memo2.Lines.Add(ti); end; if Pos('Schlüsselwort 2' , Memo1.Lines.Strings[i]) <> 0 then begin m:= i; Memo2.Lines.Add ('m ' +(intToStr(i))); // Zeilen-Nr. SW2 end; if Pos('Schlüsselwort 3' , Memo1.Lines.Strings[i]) <> 0 then begin q:= i; Memo2.Lines.Add ('q ' +(intToStr(i))); // Zeilen-Nr. SW3 end; if (i > m) and (i < q) then begin Memo2.Lines.Add(intToStr(i)); end; end; end; Ich wäre für jeden Tipp dankbar. |
Re: Anfängerfrage - Mehere Zeilen auslesen
Betrachte nicht die einzelen Zeilen, sondern den gesamten Text des Memos.
|
Re: Anfängerfrage - Mehere Zeilen auslesen
Herzlich willkommen in der Delphi-PRAXiS, gerry22.
Ich sehe da einen Standardanwendungsfall für einen Zustandsautomaten.
Delphi-Quellcode:
Freundliche Grüße
const
S_KEY1 = 'Schlüsselwort 1'; S_KEY2 = 'Schlüsselwort 2'; S_KEY3 = 'Schlüsselwort 3'; type TTransformState = (xsWait1, xsWait2, xsWait3); procedure Transform(sIn, sOut: TStrings; const keywords: array of string); var xs: TTransformState; i: Integer; begin xs := xsWait1; Assert(Length(keywords) = 3); sOut.BeginUpdate; sOut.Clear; for i := 0 to Pred(sIn.Count) do case xs of xsWait1: // wait for keyword 1 begin Inc(xs, Ord(AnsiContainsText(sIn[i], keywords[Ord(xs)]))); if xs = xsWait2 then sOut.Add(sIn[i]); end; xsWait2: // wait for keyword 2 begin Inc(xs, Ord(AnsiContainsText(sIn[i], keywords[Ord(xs)]))); end; xsWait3: // wait for keyword 3 if AnsiContainsText(sIn[i], keywords[Ord(xs)]) then xs := xsWait1 else sOut.Add(sIn[i]); end; sOut.EndUpdate; end; // Test: Transform(Memo1.Lines, Memo2.Lines, [S_KEY1, S_KEY2, S_KEY3]); |
Re: Anfängerfrage - Mehere Zeilen auslesen
Vielen Dank für die Antworten.
-zu mkinzler Ich dachte ich muß das Memofeld zeilenweise durchsuchen lassen. Wenn die entsprechenden if-Abfragen ein Ergebnis in der Zeile finden dann soll es in Memofeld 2 übernommen werden. Mein Fehler liegt eindeutig in der vierten if-Abfrage. Dort haben die Variablen s und q wahrscheinlich gar keinen Wert. Kann ich die if-Abfragen eventuell mehr in einander verschachteln ? in der Art:
Delphi-Quellcode:
Welchen Wert liefert eigentlich der Befehl Pos ?
if Pos('Schlüsselwort 2' , Memo1.Lines.Strings[i]) > 0 and
Pos('Schlüsselwort 3' , Memo1.Lines.Strings[i]) < 0 then begin Memo2.Lines.Add(intToStr(i)); end; -zu marabu Was ist ein Zustandsautomat ? Das ist leider (noch) ein wenig zu hoch für mich. Ich werde es natürlich testen und mich genau über die Fünktionen belesen. Nochmals vielen Dank und viele Grüße |
Re: Anfängerfrage - Mehere Zeilen auslesen
Moin,
der ![]() Freundliche Grüße |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:40 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 by Thomas Breitkreuz