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 Zustandsautomat ist ein Begriff aus der Automatentheorie. Wenn du den Beispielcode (ich habe einen DFSA = Deterministic Finite State Automaton implementiert, zu Deutsch DEA = Deterministischer Endlicher Automat) verstehst, dann kannst du diesen Begriff auch erstmal wieder verdrängen. Ansonsten hast du jetzt ein paar Suchwörter, unter denen du sicher weitergehende Informationen finden wirst, wenn dich das Thema wirklich interessiert. Freundliche Grüße |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:54 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