Autor Beitrag
susi_777
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Mo 23.07.07 17:23 
Hallo zusammen,

habe leider als Anfänger einige Probleme eine Email einzulesen.
Der Aufbau des Textes in der Email ist:

Mitgliedsname: golfspieler
Name: Ludwig Meier
Straße: Rosengarten 21
Ort: usw.

Bei dem Versuch nur die Daten (golfspieler, Ludwig Meier, Rosengarten 21, usw.) in einzelne Felder zu extrahieren, hänge ich an der Festlegung der Begrenzung, daß heißt, bis wie weit nach dem gefunden Suchstring in das Feld kopiert werden soll.
Meine Idee zum Auslesen des Mitgliedsnamen "golfspieler" war, dass nächste eindeutige Feld (Name:) als Begrenzer zu nehmen und dann 5 Zeichen zu subtrahieren - aber das funktioniert leider nicht.
Mein fehlerhafter Code:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
Email_Volltext := Memo1.Text;
suche_nach := 'Mitgliedsname:';
suche_bis := #13#10+'Name:';  // da ich golfspieler auslesen möchte, wollte ich bis zum nächsten eindeutigen Suchstring begrenzen
NewString := '';
NewString := Copy(Email_Volltext, Pos(suche_nach, Email_Volltext)+39, Pos(suche_bis, Email_Volltext)-5);


Kann mir bitte jemand helfen?
Danke und Gruß
Susi
Wonko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 69



BeitragVerfasst: Mo 23.07.07 17:45 
ausblenden Delphi-Quelltext
1:
Copy(S; Index, Count: Integer)					

Count ist die Anzahl der Zeichen. Du übergibst aber die Position des letzten Zeichens, versuche es mal so:
ausblenden Delphi-Quelltext
1:
NewString := Copy(Email_Volltext, Pos(suche_nach, Email_Volltext)+39, Pos(suche_bis, Email_Volltext)-5-Pos(suche_nach, Email_Volltext))					

jetzt sollte der richtige Wert für Count übergeben werden.
Die 39 hat sicher einen Sinn, oder?

Ansonsten solltest Du der Übersicht halber lieber ein paar Variablen mehr definieren, die Du später rausnehmen kannst, wenn alles funktioniert.
Calculon
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 676

Win XP Professional
Delphi 7 PE, Delphi 3 PRO
BeitragVerfasst: Mo 23.07.07 17:55 
Hi,

warum nicht eine TStringlist benutzen?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
var
email: TStringlist;
i: integer;
suche_nach, new_string: string;
begin
  email := TStringlist.Create;
  email.loadfromfile('Email_Volltext.txt'); // <-- das was in deiner Memo1 steht als
                                            //     Textdatei abgespeichert
  suche_nach := 'Mitgliedsname:';
  new_string := '';
    for i := 0 to email.count - 1 do
      begin
        if Ansipos(suche_nach, email.strings[i]) <> 0 then
          begin
            // folgendes kopiert den String beginnend von der Länge von suche_nach + 1
            // bis zur Länge von email.strings[i])
            new_string := copy(email.strings[i], length(suche_nach) + 1, length(email.strings[i]));
            break;
          end;
      end;
  ShowMessage(new_string);
end;


Ist ungetestet, dürfte aber so oder so ähnlich funktionieren.

Gruß

Calculon
bflegel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 193
Erhaltene Danke: 1

Win XP, Win 7, BS2000
D5
BeitragVerfasst: Mo 23.07.07 18:04 
Oder einfach so (getestet): :wink:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure TForm1.Button1Click(Sender: TObject);
var
email_volltext : string;
suche_nach : string;
suche_bis: string;
NewString : string;
begin
Email_Volltext := Memo1.Text;
suche_nach := 'Mitgliedsname:';
suche_bis := 'Name:';  // da ich golfspieler auslesen möchte, wollte ich bis zum nächsten eindeutigen Suchstring begrenzen
NewString := '';
NewString := Copy(Email_Volltext,
                  Pos(suche_nach, Email_Volltext)+15,       // Beginn des Wortes (Länge 15 = 'Mitgliedsname: ')
                  Pos(suche_bis, Email_Volltext)-(2+Pos(suche_nach, Email_Volltext)+15));  // Länge 2 = #13#10
showmessage (Newstring);
end;

end.


bye bflegel

_________________
I know all the jokes about my name
susi_777 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Mo 23.07.07 18:16 
@bflegel, Calculon, Wonko - hat geklappt, vielen Dank und beste Grüße
Susi