🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Email-Adresse extrahieren

Alles zur Programmierung im LibreOffice.
Antworten
scientific
Beiträge: 131
Registriert: Do 25. Apr 2013, 17:27

Email-Adresse extrahieren

Beitrag von scientific » Fr 12. Feb 2016, 10:40

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

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2540
Registriert: Fr 10. Dez 2010, 10:01

Re: Email-Adresse extrahieren

Beitrag von karolus » Fr 12. Feb 2016, 11:05

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
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

scientific
Beiträge: 131
Registriert: Do 25. Apr 2013, 17:27

Re: Email-Adresse extrahieren

Beitrag von scientific » Fr 12. Feb 2016, 11:12

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

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2540
Registriert: Fr 10. Dez 2010, 10:01

Re: Email-Adresse extrahieren

Beitrag von karolus » Fr 12. Feb 2016, 13:40

Aha -- und woran liegts jetzt?

Tausch doch mal das zweite Argument von split ...
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

gogo
* LO-Experte *
Beiträge: 1081
Registriert: Sa 5. Feb 2011, 19:07

Re: Email-Adresse extrahieren

Beitrag von gogo » Fr 12. Feb 2016, 14:24

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
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu

scientific
Beiträge: 131
Registriert: Do 25. Apr 2013, 17:27

Re: Email-Adresse extrahieren

Beitrag von scientific » So 14. Feb 2016, 10:11

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


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten