AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Anfängerfrage - Mehere Zeilen auslesen

Ein Thema von gerry22 · begonnen am 24. Jan 2008 · letzter Beitrag vom 25. Jan 2008
Antwort Antwort
gerry22

Registriert seit: 19. Dez 2007
2 Beiträge
 
#1

Anfängerfrage - Mehere Zeilen auslesen

  Alt 24. Jan 2008, 01:19
Hallo,

ich habe in ein Memofeld eine Textdatei (Liste) geladen. Diese Textdatei hat folgendes Format:
Code:
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
u.s.w. Die Schüsselworte sind immer gleich - die Datensätze sind natürlich verschieden. Das ganze kann sich beliebig oft wiederholen.

Ich möchte einzelne Zeilen in ein zweites Memofeld laden und dabei folgendes Format erzielen:
Code:
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
Bisher habe ich folgendes versucht, aber ich komme nicht weiter.
Delphi-Quellcode:
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;
Wie kann ich den Text zwischen Schlüsselwort 2 und 3 in mehrmals nacheinander auslesen ?
Ich wäre für jeden Tipp dankbar.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Anfängerfrage - Mehere Zeilen auslesen

  Alt 24. Jan 2008, 05:36
Betrachte nicht die einzelen Zeilen, sondern den gesamten Text des Memos.
Markus Kinzler
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#3

Re: Anfängerfrage - Mehere Zeilen auslesen

  Alt 24. Jan 2008, 06:11
Herzlich willkommen in der Delphi-PRAXiS, gerry22.

Ich sehe da einen Standardanwendungsfall für einen Zustandsautomaten.

Delphi-Quellcode:
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]);
Freundliche Grüße
  Mit Zitat antworten Zitat
gerry22

Registriert seit: 19. Dez 2007
2 Beiträge
 
#4

Re: Anfängerfrage - Mehere Zeilen auslesen

  Alt 24. Jan 2008, 20:59
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:
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;
Welchen Wert liefert eigentlich der Befehl Pos ?

-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
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: Anfängerfrage - Mehere Zeilen auslesen

  Alt 25. Jan 2008, 06:15
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:49 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