AGB  ·  Datenschutz  ·  Impressum  







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

Text durchsuchen

Ein Thema von Thomas F · begonnen am 3. Jan 2009 · letzter Beitrag vom 5. Jan 2009
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#11

Re: Text durchsuchen

  Alt 5. Jan 2009, 10:21
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: Strings trennen.

Ein Aufruf könnte ungefähr so aussehen (ich habe das nur anhand des Beispiels aus der CL zusammengetippt):

Delphi-Quellcode:
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;
Wie gesagt, das ist komplett ungetestet, doch ich könnte mir vorstellen, dass es in der Art funktioniert.

Grüße, Matze
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#12

Re: Text durchsuchen

  Alt 5. Jan 2009, 10:38
Hi!

Fehlt das Zeichen immer nur, wenn es quasi auch das letzte Zeichen der Datei war?


Ciao, Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Thomas F

Registriert seit: 3. Sep 2008
Ort: Nürnberg
281 Beiträge
 
Delphi 2005 Architect
 
#13

Re: Text durchsuchen

  Alt 5. Jan 2009, 10:51
Zitat von fkerber:
Hi!

Fehlt das Zeichen immer nur, wenn es quasi auch das letzte Zeichen der Datei war?

Ciao, Frederic
STIMMT !

Immer wenn das Zeichen das letzte Zeichen in der Datei ist , fehlt es !
Ansonsten kein Fehler mehr !
Gruß

Thomas
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#14

Re: Text durchsuchen

  Alt 5. Jan 2009, 10:55
Hi!

Dann sollte diese Veränderung wohl die gewünschte Lösung sein:

while (... stop <= length(aValue) Ciao, Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#15

Re: Text durchsuchen

  Alt 5. Jan 2009, 10:55
Zitat von Thomas F:
Zitat von fkerber:
Hi!

Fehlt das Zeichen immer nur, wenn es quasi auch das letzte Zeichen der Datei war?

Ciao, Frederic
STIMMT !

Immer wenn das Zeichen das letzte Zeichen in der Datei ist, fehlt es !
Ansonsten kein Fehler mehr !
Ja.

Weil diese Schleife (und die davor übrigens auch)

Zitat von Thomas F:
Delphi-Quellcode:
  stop := at+1;
  while (aValue[stop] in permittedChar) and (stop < length(aValue)) do
  begin
    Inc (stop)
  end;
Aufhört, wenn an der Endposition ein falsches Zeichen gefunden wird, oder das Ende des Textes erreicht wurde. Somit ist bei aValue[stop] immer entweder ein falsches Zeichen oder der Ende des Textes

Besser:
Delphi-Quellcode:
  stop := at;
  while (aValue[stop+1] in permittedChar) and (stop < length(aValue)) do
  begin
    Inc (stop)
  end;
P.S. Dann aber beim Copy() bitte nichts mehr abschneiden
  Mit Zitat antworten Zitat
Thomas F

Registriert seit: 3. Sep 2008
Ort: Nürnberg
281 Beiträge
 
Delphi 2005 Architect
 
#16

Re: Text durchsuchen

  Alt 5. Jan 2009, 11:04
Ja, Danke für die Hilfe !

An diesem Fehler hab ich jetzt schon 2 Tage rumgebastelt !
Gruß

Thomas
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#17

Re: Text durchsuchen

  Alt 5. Jan 2009, 12:27
Also dieser Code ist arg bösartig:

Delphi-Quellcode:
  
stop := at;
while (aValue[stop+1] in permittedChar) and (stop < length(aValue)) do
begin
  Inc (stop)
end;
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.

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);
Uwe Raabe
  Mit Zitat antworten Zitat
Thomas F

Registriert seit: 3. Sep 2008
Ort: Nürnberg
281 Beiträge
 
Delphi 2005 Architect
 
#18

Re: Text durchsuchen

  Alt 5. Jan 2009, 15:17
Zitat von Uwe Raabe:

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);
Dieser Code funktioniert leider auch nicht , habs getestet.

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 );
Gruß

Thomas
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#19

Re: Text durchsuchen

  Alt 5. Jan 2009, 17:45
Aber da hat er schon recht, es wäre besser, wenn du die beiden Abfragen vertauschen würdest.

Also so:
Delphi-Quellcode:
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 );
Und schlate ruhig die Bereichsprüfung ein

P.S. "funktioniert nicht" ist irgendwie ne doofe Fehlerbeschreibung
  Mit Zitat antworten Zitat
Thomas F

Registriert seit: 3. Sep 2008
Ort: Nürnberg
281 Beiträge
 
Delphi 2005 Architect
 
#20

Re: Text durchsuchen

  Alt 5. Jan 2009, 18:12
Zitat von jfheins:

P.S. "funktioniert nicht" ist irgendwie ne doofe Fehlerbeschreibung
...mit dem Code hab ich wieder diesselben Probleme.
An die Email wird noch ein Anführungszeichen gehängt, wenn ich ein Zeichen abziehe ,
dann fehlt manchmal wieder ein Zeichen
Ich habs x-mal getestet, der Code oben ist der einzige , bei dem alles funkt.
Gruß

Thomas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 18:35 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