Autor Beitrag
Jagg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 635



BeitragVerfasst: Fr 26.09.03 17:53 
Hallo Leute !

Ich habe ein Programm geschrieben,das den Quelltext einer HTML-Seite anzeigt !
Jetzt will ich in dem Quelltext einen Suchvorgang starten,das nach allen E-Mails sucht und die dann in einem Memofeld ausgibt !
Wie kann ich sowas realisieren ???

Jagg !
MSCH
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1448
Erhaltene Danke: 3

W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
BeitragVerfasst: Fr 26.09.03 18:15 
meinst du E-Mail adressen ? Wenn ja, einfach parsen nach @.
grez
msch

_________________
ist das politisch, wenn ich linksdrehenden Joghurt haben möchte?
Jagg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 635



BeitragVerfasst: Fr 26.09.03 18:59 
Ja,ich meine E-Mail Adressen !
Nehmen wir mal an,ich habe das "@" gefunden,dann muss ich noch die Zeichen davor und danach suchen und die dann als vollstädige E-Mail Adresse ausgeben !
...aber es gibt ja die endungen ".de,.com,.net usw !
Wie filtere ich das heraus ???
Was muss noch beachtet werden bei der Richtigkeit einer E-Mail ???
Kann ich das alles mit der Funktion "Pos()" machen ???

Jagg !
focus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 187

XP, 2k, 98, Me
D6 Prof
BeitragVerfasst: Fr 26.09.03 19:34 
die kürzel sind vordefiniert, danach lässt sich suchen, und vor dem @ suchst du einfach das letzte leerzeichen ach und vor dem kürzel muss ein "." sein
ja mit pos lässt sich da gut arbeiten
gruss
michael
Jagg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 635



BeitragVerfasst: Fr 26.09.03 23:57 
Danke für die Kürzel !
So,da wäre jetzt ein Problem mit Pos()
Code :
ausblenden Quelltext
1:
Suchstring := pos('@',Text);					

Beim 1.Durchgang suche ich dem Text nach dem Zeichen @......Das Zeichen @ wird auch gefunden...
Beim 2. Durchgang wird das Zeichen @ auch gefunden usw.
.....aber nach dem 1.Durchgang beginnt er mit der Suche immer von vorne,so das immer eine Endlosschleife ensteht und ich nicht bis zum Ende des Textes suchen kann.
Kann man dieses Problem nur mit Pos() lösen oder geht das auch anders ???

Jagg !
Jagg Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 635



BeitragVerfasst: Sa 27.09.03 16:44 
Diese Funktion,die ich brauche kann man vergleichen mit der Funktion "Weitersuchen" im FindDialog !
lemming
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 470

Mac OS 10.3.1
Delphi 6 Pro, Kylix 3
BeitragVerfasst: Di 30.09.03 09:03 
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
bla bla bla bla bla bla bla bla bla bla bla bla bla bla 
bla bla fish@fish.com bla bla bla bla bla bla bla bla 
bla bla bla bla bla bla bla bla bla bla bla bla bla bla 
bla bla bla bla bla bla hansi@fish.com bla bla bla bla 
bla bla schnarch.zapfen@gmx.de bla bla bla bla bla 
bla bla bla


Und was stellen wir fest? Jede email Adresse ist mit @ zu finden.
Alles was vor dem @ kommt gehört zur email adresse bis ein leerzeichen kommt. Das gleiche gilt auch für was danach kommt.

So schwer ist das doch ned, oder?



ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
procedure TForm1.Button1Click(Sender: TObject);
var
  iCipher: Integer;
  sChunk: String;
  iStart: Integer;
  iEnds: Integer;
begin
  for iCipher := 0 To Length(Memo1.Text) - 1 do
  begin
    if Copy(Memo1.Text, iCipher, 1) = '@' then
    begin
      for iEnds := iCipher to (iCipher + 100do
      begin
        if Copy(Memo1.Text, iEnds, 1) = ' ' then
        begin
          ShowMessage(IntToStr(iEnds - iCipher));
          sChunk := Copy(Memo1.Text, iCipher, iEnds - iCipher);
          break;
        end;
      end;

      for iStart := iCipher downto (iCipher - 100do
      begin
        if Copy(Memo1.Text, iStart, 1) = ' ' then
        begin
          sChunk := Copy(Memo1.Text, iStart + 1, iCipher - (iStart + 1)) + sChunk;
          break;
        end;
      end;

      Memo2.Lines.Add(sChunk);
    end;
  end;
end;


Eine noch leichtere methode wäre evtl. davon auszugehen das jedes Wort eine email Adresse ist und dann mit Pos() geprüft wird ob sie ein @ und einen . hat. Wenn beide True oder >0 ist dann ist es höchstwahrscheinlich eine email Adresse.

-lemmi
barfuesser
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 324



BeitragVerfasst: Di 30.09.03 09:45 
lemming hat folgendes geschrieben:
Und was stellen wir fest? Jede email Adresse ist mit @ zu finden.
Alles was vor dem @ kommt gehört zur email adresse bis ein leerzeichen kommt. Das gleiche gilt auch für was danach kommt.

So schwer ist das doch ned, oder?

Wahrscheinlich doch:
ausblenden Quelltext
1:
<a href="mailto:addressee@domain.tld>Mail an mich</a>					

liefert dann als Ergebnis: href="mailto:addressee@domain.tld>Mail an mich</a>

barfuesser
lemming
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 470

Mac OS 10.3.1
Delphi 6 Pro, Kylix 3
BeitragVerfasst: Mi 01.10.03 14:24 
Umso besser.

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
procedure TForm1.Button1Click(Sender: TObject); 
var 
  iCipher: Integer; 
  sChunk: String
  iStart: Integer; 
  iEnds: Integer; 
begin 
  for iCipher := 0 To Length(Memo1.Text) - 1 do 
  begin 
    if Copy(Memo1.Text, iCipher, 1) = '@' then 
    begin 
      for iEnds := iCipher to (iCipher + 100do 
      begin 
        if Copy(Memo1.Text, iEnds, 1) = '"' then 
        begin 
          ShowMessage(IntToStr(iEnds - iCipher)); 
          sChunk := Copy(Memo1.Text, iCipher, iEnds - iCipher); 
          break; 
        end
      end

      for iStart := iCipher downto (iCipher - 100do 
      begin 
        if Copy(Memo1.Text, iStart, 1) = ':' then 
        begin 
          sChunk := Copy(Memo1.Text, iStart + 1, iCipher - (iStart + 1)) + sChunk; 
          break; 
        end
      end

      Memo2.Lines.Add(sChunk); 
    end
  end
end;