Seite 1 von 1

Email-Adresse extrahieren

Verfasst: Fr 12. Feb 2016, 10:40
von scientific
Hi Leute!

Ich hab schon gefunden, dass ich Perl-Code verwenden sollte für mein Anliegen...
Aber das müsste ja auch mit Starbasic gehen.

Ich hab ein Feld mit Teilnehmern. Das ist mit einer ";"-getrennten Liste (ein einziger String) gefüllt. Zwischen den Strings stehen entweder Kürzel, die ich per Skript aus einer eigenen Tabelle in Email-Adressen und Namen umwandle, und "Vorname Nachname <vorname.nachnahme@emailprovider.invalid>" oder nur email-Adressen mit Semikolon getrennt.

Mit Split sprenge ich den String in ein Array. Und aus dem Array möchte ich einerseits die Email-Adressen (so eine im Feld ist), und andererseits den Namen (so einer im Feld ist) in ein Array mit Email-Adressen und eines mit den Namen eintragen. Dazu brauch ich ein Codeschnippsel, welches mir die einzelnen Felder wieder in Namen und Email-Adresse splittet.

Hat zufällig jemand von euch so ein Codeschnippsel?

lg scientific

Re: Email-Adresse extrahieren

Verfasst: Fr 12. Feb 2016, 11:05
von karolus
Hallo

Zum "Sprengen" benutzt man Sprengstoff....

Ja, auch StarBasic kennt die Runtime-funktion `split`

Code: Alles auswählen

Sub Main

for each part in split("a;b;c;d",   ";" )
print part
next

End Sub

Re: Email-Adresse extrahieren

Verfasst: Fr 12. Feb 2016, 11:12
von scientific
karolus hat geschrieben:Hallo

Zum "Sprengen" benutzt man Sprengstoff....

Ja, auch StarBasic kennt die Runtime-funktion `split`

Code: Alles auswählen

Sub Main

for each part in split("a;b;c;d",   ";" )
print part
next

End Sub
Split ist der Sprengstoff für Strings :)

Ich kenne die Funktion Split, und ich verwende sie auch, wie ich schon schrieb.

Aber ich brauche ein Codeschnippsel, welches mir aus einem String (den ich zuvor mit split aus einem größeren String geholt habe), die Email-Adresse bzw. den Namen ausspuckt.

Regular Expressions in Makros sind ja nicht so vorhanden...

lg scientific

Re: Email-Adresse extrahieren

Verfasst: Fr 12. Feb 2016, 13:40
von karolus
Aha -- und woran liegts jetzt?

Tausch doch mal das zweite Argument von split ...

Re: Email-Adresse extrahieren

Verfasst: Fr 12. Feb 2016, 14:24
von gogo
dazu musst Du entweder
  • wissen wie die Mailadressen vom restlichen Text abgetrennt sind oder
  • Du suchst ausgehend von den @
Wenn Du weißt, wie die Adressen abgetrennt sind (z.B. Leerzeichen) splittest Du mit Leerzeichen und checkst dann jeden Substring

Code: Alles auswählen

sub MailExtr
dim i, sText, aText(), sMailSammlung
sText="meinLangerMailstringwoherauchimmer"

sMailSammlung=""
aText=split(sText," ")

for i =lbound(aText) to ubound(aText)
	if TOOL_CheckEmailString(aText(i)) then
		sMailSammlung = sMailSammlung & ";" & aText(i)
	end if
next i

if sMailSammlung <> "" then
	msgbox cstr(ubound(split(sMailSammlung,";")) +1 ) &  "Mails in diesem String: " & sMailSammlung
else
	msgbox "Nix gefunden!"
end if

end sub

Code: Alles auswählen

Function TOOL_CheckEmailString(sEmail)
TOOL_CheckEmailString = false
dim a()
a()=split(sEmail,"@")
if ubound(a) <> 1 then exit function
a()=split(a(1),".")
if ubound(a) <  1 then exit function
if len(a(ubound(a))) < 2 then exit function
if instr(1,sEmail," ",1) then exit function
if instr(1,sEmail,"(",1) then exit function
if instr(1,sEmail,")",1) then exit function
if instr(1,sEmail,"<",1) then exit function
if instr(1,sEmail,">",1) then exit function
if instr(1,sEmail,",",1) then exit function
if instr(1,sEmail,";",1) then exit function
if instr(1,sEmail,":",1) then exit function
if instr(1,sEmail,"\",1) then exit function
if instr(1,sEmail,"[",1) then exit function
if instr(1,sEmail,"]",1) then exit function
if instr(1,sEmail,"/",1) then exit function
if instr(1,sEmail,chr(10),1) then exit function
if instr(1,sEmail,chr(13),1) then exit function
if instr(1,sEmail,chr(34),1) then exit function
if instr(1,sEmail,chr(39),1) then exit function
' Testet auf : ( ) < > @ , ; : \ " . [ ]
TOOL_CheckEmailString = true
END FUNCTION
Für den letzteren Fall musst Du mit den "@" splitten und dann vom @ ausgehend nach "vorne" und "hinten" suchen bis zum ersten ungültigen Zeichen, und außerdem noch checken ob "hinten" auch irgendwo mindestens ein Punkt drin ist

ad REGEX:

MySQL kann das

Code: Alles auswählen

select 'ich@da.de' regexp '@';
Wenn Du ein Regex für gültige Mailadressen hast funktioniert das dann ohne Spaghetti-Basic-Code

Re: Email-Adresse extrahieren

Verfasst: So 14. Feb 2016, 10:11
von scientific
Vielen Dank für den Input!

Ich habs jetzt so gelöst, dass ich mit split die einzelnen Adressaten noch einmal in die Bestandteile auflöse. Dann diese Bestandteile in einer Schleife durchlaufen lasse. Ist ein "@" enthalten, so ist es die Email-Adresse, ist keines enthalten, werden diese Teile wieder zu einem ganzen zusammengefügt und sind dann der Name. Die Namensbestandteile werden in der Reihenfolge zusammengesetzt, wie sie auch im Original sind. Steht dort also Mist, ergibt das auch Mist.

lg sicentific