Autor Beitrag
Aya
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: Mi 29.01.03 01:01 
Hi,

gibt es eine schnellere Methode um ASCII Text zu Parsen als mit Copy(), Pos() und Delete()...??

Au'revoir,
Aya
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 29.01.03 01:34 
Pack den text in eine Variable vom Typ PChar und geh dann durch, in dem du den Zeiger inkrementierst.

Folgender Code extrahiert E-Mail-Adressen aus einen Text:
ausblenden 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:
procedure TForm1.GetEMails;
var
  MailAddy: String;
  p: PChar;
  Start: PChar;
begin
  p := PChar(Memo1.Text);
  while p^ <> #0 do
  begin
    { '@' gefunden }
    if p^ = #64 then
    begin
      { zurückgehen bis ein Leerzeichen oder Zeilenumbruch kommt }
      while (p^ <> #32) and (p^ <> #13) and (p^ <> #10) do
        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^ <> #32) do
        Inc(p);
      { gefunden }
      SetString(MailAddy, Start, p-Start);
      ListBox1.Items.Add(MailAddy);
    end;
    Inc(p);
  end;
end;

Ist schon älter. keien Ahnung für wen ich das mal gemacht habe.


Zuletzt bearbeitet von Luckie am Mi 29.01.03 01:36, insgesamt 1-mal bearbeitet
Aya Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: Mi 29.01.03 01:36 
Zeiger Inkremen... was??? :oops:
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 29.01.03 01:39 
inkrementieren, erhöhen. Was meinst du, woher der Name von Inc() herkommt.
Aya Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: Mi 29.01.03 01:43 
achsoooo...... :oops: :oops: :oops:
matze
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 4613
Erhaltene Danke: 24

XP home, prof
Delphi 2009 Prof,
BeitragVerfasst: Mi 29.01.03 13:24 
also bevor du mit POS() copy() usw rumstöpelst würd ich das so machen wie luckie in seinem besp test gezeigt hat.

wenn du allerdings nur wörter suchst bist du mit pos() recht gut bedient !!!

_________________
In the beginning was the word.
And the word was content-type: text/plain.
Sivar
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 40



BeitragVerfasst: Mi 29.01.03 13:30 
@Luckie:

Beim Überfliegen des Codes ist mir was aufgefallen:
ausblenden Quelltext
1:
2:
3:
4:
5:
      ...
      { wieder nach vorne gehen bis zum nächsten Leerzeichen } 
      while (p^ <> #32) do 
        Inc(p); 
      ...


Wenn die E-Mail jetzt aber am Ende des Textes ist, gibt es evtl. kein #32 mehr!? An dieser Stelle sollte auch auf #0 abgefragt werden.

Gruß
Sivar
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 29.01.03 13:32 
Der Code war nur für jemanden schnell zusammen gekloppt. :roll: