Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Text parsen und auswerten (https://www.delphipraxis.net/64264-text-parsen-und-auswerten.html)

emsländer 1. Mär 2006 14:58


Text parsen und auswerten
 
Moin,

ist stehe hier irgendwie vor ner (Gedanken-)Wand und komme nicht weiter. Ich habe einen Text aus dem ich Werte erkennen muss. Nur ist die Frage: WIE?

Der Text sieht so aus:

Ort:
Haus:
von:
bis:
Anzahl Erwachsene: Kinder:
Vorname:
Nachname:
Strasse:
Ort:
Zusatz:
Telefon:
Telefax:
eMail:
Buchungsbestätigung per:

Hinter dem jeweiligen Doppelpunkt können 1 oder mehrer Leerzeichen kommen - oder auch gar nichts. Ich brauche die einzelnen Werte, um diese in eine Datenbank zu "schmeissen".

Ich denke daran, eine Funktion in dieser Form zu stricken:

Delphi-Quellcode:
 stringvar := auswerten("Ort");
und habe dann als Result das, was dort steht. - nur wie :gruebel:

Gruss

EL

TeronG 1. Mär 2006 15:02

Re: Text parsen und auswerten
 
evtl helfen dir ja Pos und Posex weiter.

Sharky 1. Mär 2006 15:06

Re: Text parsen und auswerten
 
Hai emsländer,

ist das richtig das in der Zeile mit "Anzahl Erwachsene: Kinder:". Ein Doppelpunkt nach Erwachsene steht?

EDIT
Wenn es ein versehen mit dem Doppelpunkt ist könntest Du auch einfach mit den Delphi-Referenz durchsuchenValues einer TStringList arbeiten.
Das könnte zum Beispiel so aussehen:

Delphi-Quellcode:
procedure TDemoForm.Button1Click(Sender: TObject);
var
  sl: TStringList;
  filename: String;
begin
  filename := 'c:\demo.txt';
  sl := TStringList.Create;
  try
    sl.LoadFromFile(filename);
    sl.NameValueSeparator := ':';
    ListBox1.Items.Add(Trim(sl.Values['Kinder']));
    ListBox1.Items.Add(Trim(sl.Values['eMail']));
  finally
    sl.Free;
  end;
end;

emsländer 1. Mär 2006 15:18

Re: Text parsen und auswerten
 
Zitat:

Zitat von Sharky
Hai emsländer,

ist das richtig das in der Zeile mit "Anzahl Erwachsene: Kinder:". Ein Doppelpunkt nach Erwachsene steht?

ja. immer nach dem Doppelpunkt beginnt der Wert, welcher durchaus aus mehreren Worten bestehen kann. Ein weiteres Problem ergibt sich bei "Kinder:", denn dieser Bezeichner steht ja in der gleichen Zeile, wie der Wert des vorherigen Bezeichners.

Zitat:


EDIT
Wenn es ein versehen mit dem Doppelpunkt ist könntest Du auch einfach mit den Delphi-Referenz durchsuchenValues einer TStringList arbeiten.
Das könnte zum Beispiel so aussehen:

Delphi-Quellcode:
procedure TDemoForm.Button1Click(Sender: TObject);
var
  sl: TStringList;
  filename: String;
begin
  filename := 'c:\demo.txt';
  sl := TStringList.Create;
  try
    sl.LoadFromFile(filename);
    sl.NameValueSeparator := ':';
    ListBox1.Items.Add(Trim(sl.Values['Kinder']));
    ListBox1.Items.Add(Trim(sl.Values['eMail']));
  finally
    sl.Free;
  end;
end;

Gruss

EL

himitsu 1. Mär 2006 16:59

Re: Text parsen und auswerten
 
Du kannst ja auch jede Zeile einzeln abarbeiten und nach den Wörtern suchen ... in S steht der Zeileninhalt.

Delphi-Quellcode:
S := Trim(S);
i := Pos(':', S);
S2 := AnsiLowwerCase(Copy(S, 1, i));
S := Trim(Copy(S, i + 1, MaxInt);
If S2 = 'ort:' Then Ort := S
Else If S2 = 'haus:' Then Haus := S
...
Else If S2 = 'anzahl erwachsene:' Then Begin
  i := Pos('kinder:', AnsiLowerCase(S));
  Erwachsene := Trim(Copy(S, 19, i - 19));
  Kinder := Trim(Copy(S, i + 7, MaxInt));
End Else If S2 = 'vorname:' Then Vorname := S
Else If S2 = 'nachname:' Then Haus := S
...

emsländer 1. Mär 2006 17:45

Re: Text parsen und auswerten
 
Zitat:

Zitat von himitsu
Du kannst ja auch jede Zeile einzeln abarbeiten und nach den Wörtern suchen ... in S steht der Zeileninhalt.

Delphi-Quellcode:
S := Trim(S);
i := Pos(':', S);
S2 := AnsiLowwerCase(Copy(S, 1, i));
S := Trim(Copy(S, i + 1, MaxInt);
If S2 = 'ort:' Then Ort := S
Else If S2 = 'haus:' Then Haus := S
...
Else If S2 = 'anzahl erwachsene:' Then Begin
  i := Pos('kinder:', AnsiLowerCase(S));
  Erwachsene := Trim(Copy(S, 19, i - 19));
  Kinder := Trim(Copy(S, i + 7, MaxInt));
End Else If S2 = 'vorname:' Then Vorname := S
Else If S2 = 'nachname:' Then Haus := S
...

Gute Idee - werde genau das mal abklopfen! Danke!

Gruss

EL

himitsu 1. Mär 2006 18:22

Re: Text parsen und auswerten
 
Ach ja, bei
Code:
Erwachsene := Trim(Copy(S, [color=#ff0000]19[/color], i - [color=#ff0000]19[/color]));
Kinder := Trim(Copy(S, i + [color=#ff0000]7[/color], MaxInt));
mußt'e mal sehn, ob ich die Werte richtig geschätzt hab und wenn bei den Suchwörtern die Groß-/Kleinschreibung immer stimmt, dann kannst'e natürlich auch die ganzen AnsiLowerCase weglassen, mußt dann natürlich in den Abfragen ebenfalls die Groß-/Kleinschreibung beachten (ansonsten halt alles klein)


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:11 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