Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Problem mit Pos + Copy
susi_777 - Mo 23.07.07 16:23
Titel: Problem mit Pos + Copy
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:
Delphi-Quelltext
1: 2: 3: 4: 5:
| Email_Volltext := Memo1.Text; suche_nach := 'Mitgliedsname:'; suche_bis := #13#10+'Name:'; 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 - Mo 23.07.07 16:45
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:
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 - Mo 23.07.07 16:55
Hi,
warum nicht eine TStringlist benutzen?
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'); suche_nach := 'Mitgliedsname:'; new_string := ''; for i := 0 to email.count - 1 do begin if Ansipos(suche_nach, email.strings[i]) <> 0 then begin 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 - Mo 23.07.07 17:04
Oder einfach so (getestet): :wink:
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:'; NewString := ''; NewString := Copy(Email_Volltext, Pos(suche_nach, Email_Volltext)+15, Pos(suche_bis, Email_Volltext)-(2+Pos(suche_nach, Email_Volltext)+15)); showmessage (Newstring); end;
end. |
bye bflegel
susi_777 - Mo 23.07.07 17:16
@bflegel, Calculon, Wonko - hat geklappt, vielen Dank und beste Grüße
Susi
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!