Autor Beitrag
Steven
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 57



BeitragVerfasst: Di 24.06.03 18:45 
hallo ich muss folgenden string (kommt öfters vor)
ausblenden Quelltext
1:
<a href="mailto:name@domain.de">name@domain.de</a>					

aus einer html-datei herausfiltern weil ich diese austauschen muss.
das will mir mit dem code unter aber nicht ganz glücken, schwierigkeiten machen irgendwelche tags z.b. <br>usw.... die am ende dranhängen und die ich einfach nicht rausgefiltert kriege.
nein, ich will mir keinen spider bauen ;)
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
 for i := 0 to Memo4.Lines.Count - 1 do
      begin
        if Pos('<a href="mailto:', Memo4.Lines.Strings[i]) > 0 then
        begin
          s := '';
          for p := Pos('<a href="mailto:', Memo4.Lines.Strings[i]) to
            Length(Memo4.Lines.Strings[i]) do
            if Memo4.Lines.Strings[i][p] <> '</a>' then
              s := s + Memo4.Lines.Strings[i][p]
            else
              break;
         // while Pos(s[Length(s)], '..;!")]}?''><`´/' + '</br>' + '</p>' + '</a>' + ('a..z')) > 0 do
           // Delete(s, Length(s), 1);
          Memo5.lines.Add(s);
        end;
      end;
    end;


Moderiert von user profile iconTino: Titel geändert & Topic verschoben.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 24.06.03 20:11 
Eventuell ist ja StringReplace was für dich.
Steven Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 57



BeitragVerfasst: Di 24.06.03 20:16 
dachte ich auch schon...nur weiß ich aber nie so genau was nach dem letzten </a> kommt ...
hast du ne idee wie ich das machen könnte?
eigendlich müßte nach dem </a> ein neuer tag beginnen.
wenn ich alle html-tags replace, sind ja auch die tags weg die ich behalten will, hmm.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 24.06.03 20:20 
Du willst doch nur die E-Mail-Adresse ersetzten. Laß doch die Tags in Ruhe die haben damit doch gar nichts am Hut.
Steven Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 57



BeitragVerfasst: Di 24.06.03 20:22 
nein...das stimmt nicht ich muss dieses mailto auch austauschen, mein mailto setzt sich aus javascript zusammen, deshalb
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 24.06.03 20:50 
Steven hat folgendes geschrieben:
mein mailto setzt sich aus javascript zusammen, deshalb

Wie sieht das aus?
Steven Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 57



BeitragVerfasst: Di 24.06.03 20:56 
ausblenden Quelltext
1:
2:
3:
4:
<script language="javascript">
document.write("<a href=\"mailto:")
 document.write("info@web.de\">info@web.de<\/a>")
</script>

so siehts aus...
Tweafis
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 647

WinXP + fbsd
Delphi 5 Prof
BeitragVerfasst: Di 24.06.03 20:58 
Das kommt doch auf exact das gleiche raus ob du das machst oder direkt den <a>-Tag änderst...

_________________
.: Es wird der Tag kommen, an dem wir es nicht mehr ändern können :.
Steven Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 57



BeitragVerfasst: Di 24.06.03 21:02 
:think:
ich brauche ja nur das mailto:info@web.de zu replacen aber mir ist nicht ganz klar wie ich das machen kann weil nach dem
<a href="mailto;info@web.de">info@web.de</a>
ja wieder ein tag kommt und ich weiss auch nicht welche emailadressen vorkommen... wenn ich die emaiadresse weiß, dann funktioniert das ja so:
ausblenden Delphi-Quelltext
1:
 Memo4.text:=Stringreplace(Memo4.text,'<a href="mailto;info@web.de">info@web.de</a>',''+neu.text+'',[rfReplaceAll]);					
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 24.06.03 21:14 
Ist dass denn so schwer? :roll:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var
  s : String;
begin
  s := Memo1.Text;
  s := StringReplace(s, 
    '<a href="mailto;info@web.de">info@web.de</a>',
    '<a href="mailto;foo@bar.de">foo@bar.de</a>,'
    [rfReplaceAll];
  Memo1.text := s;


Dann gehst du alt den Text so lange durch bis du alles hast:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
var
  s : String;
  i : Integer;
  sl : TStringList;
begin
  s := Memo1.Text;
  sl := TStringList.Create;
  // sl mit den neuen Adressen füllen
  try
    for i := 0 to sl.Count-1 do
      s := StringReplace(s, 
        '<a href="mailto;info@web.de">info@web.de</a>',
        sl.Strings[i],
        [rfReplaceAll];
  finally
    sl.Free;
  end;
    Memo1.Text := s;


Zuletzt bearbeitet von Luckie am Di 24.06.03 21:19, insgesamt 1-mal bearbeitet
Steven Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 57



BeitragVerfasst: Di 24.06.03 21:17 
aber wenn ich die emailadreesen vorher doch nicht kenne!
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 24.06.03 21:20 
Aber wenn du sie ersetzen willst, muß du sie ja irgendwann kennen, sonst kannst du nichts ersetzen.
Steven Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 57



BeitragVerfasst: Di 24.06.03 21:23 
schau dir bitte mein erstes posting in diesem thread an.
damit habe ich versucht die mailto's auszulesen (sozusagen "kennenzulernen")
und in der reihenfolge wie sie ausgelesen werden auch wieder zu ersetzen...
zumindestens war das mein ansatz
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 24.06.03 21:42 
Moment. Ich darf mal kurz gedanklich nachvollziehen, was du da vor hast.

Die Adressen stehen so im Text:

mpuff@luckie-online.de
foo@luckie-online.de
bar@luckie-online.de

In der Reihenfolge und noch mit dem ganzen HTML-Gedönse drumrum.

Jetzt extrahierst du sie aus dem Text und hast sie dann wegen mir in einer Stringliste stehen.

Und jetzt, und jetzt hapert es bei mir etwas, was du jetzt vor hast. Jetzt willst du eine dir bekannte E-Mail Adresse mit den extrahierten ersetzen? Was bedeutet "in dieser Reihenfolge"?
Steven Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 57



BeitragVerfasst: Di 24.06.03 21:54 
Zitat:
Jetzt extrahierst du sie aus dem Text und hast sie dann wegen mir in einer Stringliste stehen.

genau das ist der punkt an dem ich nicht weiter komme.
bei mir hängen immer noch irgendwelche tags oder so'n müll dran.


Zitat:
Jetzt willst du eine dir bekannte E-Mail Adresse mit den extrahierten ersetzen? Was bedeutet "in dieser Reihenfolge"?


1 mpuff@luckie-online.de
2 foo@luckie-online.de
3 bar@luckie-online.de

ja, sollen halt wieder an der gleichen stelle stehen, nicht vertauscht ...
eigendlich soll alles so bleiben wie es ist, nur das
ausblenden Quelltext
1:
<a href="mailto:mpuff@luckie-online.de ">mpuff@luckie-online.de </a>					

soll durch:
ausblenden Quelltext
1:
2:
3:
4:
<script language="javascript"> 
document.write("<a href=\"mailto:") 
document.write("mpuff@luckie-online.de \">mpuff@luckie-online.de <\/a>") 
</script>
ersetzt werden...
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 24.06.03 21:58 
Dann mach es doch so:

alter String: <a href="mailto:mpuff@luckie-online.de ">mpuff@luckie-online.de </a>

neuer String: <script language="javascript">
document.write("<a href=\"mailto:")
document.write("mpuff@luckie-online.de \">mpuff@luckie-online.de <\/a>")
</script>

Und das ganze mit StringReplace.
Steven Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 57



BeitragVerfasst: Di 24.06.03 22:03 
ok...ist klar
damit ist aber nicht meine frage beantwortet, was wenn es verschiedene emailadressen sind?
drücke ich mich so undeutlich aus....? :autsch:
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 25.06.03 00:33 
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 GetEMails(s: String; sl: TStrings);
var
  MailAddy: String;
  p: PChar;
  Start: PChar;
begin
  p := PChar(s);
  while p^ <> #0 do
  begin
    { '@' gefunden }
    if p^ = #64 then
    begin
      { zurückgehen bis ein Leerzeichen oder Zeilenumbruch kommt }
      while (p^ <> #32and (p^ <> #13and (p^ <> #10do
        Dec(p);
      { Anfang gefunden -> merken }
      Start := p+1;
      { eine Schritt nach vorne gehen, sonst hängen wir }
      p := p+1;
      { wieder nach vorne gehen bis zum nächsten Leerzeichen }
      while (p^ <> #32do
        Inc(p);
      { gefunden }
      SetString(MailAddy, Start, p-Start);
      sl.Add(MailAddy);
    end;
    Inc(p);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  GetEMails(Memo1.Text, Listbox1.Items);
end;

Probier es mal damit. Das holt dir alle E-Mail Adresse aus einem Text raus. Du mußt es nur etwas anpassen. Wenn ein @ gefunden wurde mußt du nicht bis zum ersten Leerzeichen zurückgehen, sondern bis zum nächsten ":". Und dann auch wieder nicht bis zum nächsten Leerzeichen nach vorne gehen, sondern bis zum nächsten " " ".
Über geben kannst du alternativ zu Listbox1.Items auch eine Stringliste.

So, ich hoffe jetzt konnte ich dir helfen. :?
Steven Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 57



BeitragVerfasst: Mi 25.06.03 07:59 
vielen dank für deine bemühungen mir helfen zu wollen,
leider kommt nun doch ein "ABER"...
dein code macht die gleichen "fehler" wie mein erster.
was wenn keine leerzeichen da sind? :idea:
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 25.06.03 08:31 
Steven hat folgendes geschrieben:
dein code macht die gleichen "fehler" wie mein erster.

Und funktioniert auch nicht bei Email-Adressen wie dieser hier:
ausblenden Quelltext
1:
2:
3:
<a href="mailto:mpuff%40 ...">
Michael
</a>

:)

@Steven: Du solltest dir diesen Beitrag vielleicht mal ansehen.