![]() |
Re: Text durchsuchen
Hallo,
mal ein ganz anderer Ansatz: Du könntest den kompletten String an bestimmten Trennzeichen auftrennen und die dazwischen liegenden Einträge bsp. in eine TStringList schreiben. Die gehst du durch und prüfst auf das @-Zeichen (falls dies zur Feststellung einer E-Mail-Adresse für dich ausreicht. Da gibt es zum Beispiel diese Prozedur in der Code-Library: ![]() Ein Aufruf könnte ungefähr so aussehen (ich habe das nur anhand des Beispiels aus der CL zusammengetippt):
Delphi-Quellcode:
Wie gesagt, das ist komplett ungetestet, doch ich könnte mir vorstellen, dass es in der Art funktioniert.
procedure ShowEmails(const s: string); // s ist dein dein zu durchsuchender Text (Memo1.Text)
var StrList, NewList: TStringlist; i: Integer; begin StrList := TStringlist.Create; NewList := TStringlist.Create; try // Hinzufügen aller Trennzeichen StrList.Append(','); StrList.Append(';'); StrList.Append('|'); StrList.Append('"'); StrList.Append(' '); StrList.Append(#13#10); DivideString(s, StrList, NewList); // Prüfen auf eine E-Mail-Adresse for i := 0 to NewList.Count - 1 do begin // E-Mail-Adressen ausgeben if Pos('@', NewList[i]) > 0 then ShowMessage(NewList[i]); end; finally FreeAndNil(NewList); FreeAndNil(StrList); end; end; Grüße, Matze |
Re: Text durchsuchen
Hi!
Fehlt das Zeichen immer nur, wenn es quasi auch das letzte Zeichen der Datei war? Ciao, Frederic |
Re: Text durchsuchen
Zitat:
Immer wenn das Zeichen das letzte Zeichen in der Datei ist , fehlt es ! Ansonsten kein Fehler mehr ! |
Re: Text durchsuchen
Hi!
Dann sollte diese Veränderung wohl die gewünschte Lösung sein:
Delphi-Quellcode:
Ciao, Frederic
while (... stop <= length(aValue)
|
Re: Text durchsuchen
Zitat:
Weil diese Schleife (und die davor übrigens auch) Zitat:
Besser:
Delphi-Quellcode:
P.S. Dann aber beim Copy() bitte nichts mehr abschneiden ;)
stop := at;
while (aValue[stop+1] in permittedChar) and (stop < length(aValue)) do begin Inc (stop) end; |
Re: Text durchsuchen
Ja, Danke für die Hilfe !
An diesem Fehler hab ich jetzt schon 2 Tage rumgebastelt ! :wall: |
Re: Text durchsuchen
Also dieser Code ist arg bösartig:
Delphi-Quellcode:
weil nämlich im Falle von "stop = length(value)" der Zugriff auf "aValue[stop+1]" einen RangeError auslösen sollte (passiert immer dann, wenn eine Mail-Adresse am Ende von aValue steht). Ditto bei der Suche nach dem Anfang der Mail-Adresse. Deswegen soll man ja auch beim Entwicklen und Debuggen diverse Compiler-Flags wie "Bereichsüberprüfung" und "Überlaufprüfung" einschalten.stop := at; while (aValue[stop+1] in permittedChar) and (stop < length(aValue)) do begin Inc (stop) end; Besser wäre hier (unter der Annahme, daß "Vollst. Boolesche Auswertung" abgeschaltet ist):
Delphi-Quellcode:
start := at-1; while (start > 0) and (aValue[start] in permittedChar) do begin Dec (start) end; { hier steht start vor dem ersten gültigen Zeichen (kann 0 sein) } stop := at+1; while (stop <= length(aValue)) and (aValue[stop] in permittedChar) do begin Inc (stop) end; { hier steht stop nach dem letzten gültigen Zeichen (kann length() + 1 sein) } Mytext:= Copy (aValue, start, stop - start - 1); |
Re: Text durchsuchen
Zitat:
Der einzige Code, der mit allen Dateien fehlerfrei funktioniert
Delphi-Quellcode:
start := at-1;
while (start > 0) and (aValue[start] in permittedChar) do begin Dec (start) end; stop := at; while (aValue[stop+1] in permittedChar) and (stop < length(aValue)) do begin Inc (stop) end; Mytext:= Copy (aValue, start+1, stop - start ); |
Re: Text durchsuchen
Aber da hat er schon recht, es wäre besser, wenn du die beiden Abfragen vertauschen würdest.
Also so:
Delphi-Quellcode:
Und schlate ruhig die Bereichsprüfung ein ;)
start := at-1;
while (start > 0) and (aValue[start] in permittedChar) do begin Dec (start) end; stop := at; while (stop < length(aValue)) and (aValue[stop+1] in permittedChar) do begin Inc (stop) end; Mytext:= Copy (aValue, start+1, stop - start ); P.S. "funktioniert nicht" ist irgendwie ne doofe Fehlerbeschreibung ;) |
Re: Text durchsuchen
Zitat:
An die Email wird noch ein Anführungszeichen gehängt, wenn ich ein Zeichen abziehe , dann fehlt manchmal wieder ein Zeichen :gruebel: Ich habs x-mal getestet, der Code oben ist der einzige , bei dem alles funkt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz