Daten aus e-mail Thunderbird in OO Base Tabelle übernehmen?

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Daten aus e-mail Thunderbird in OO Base Tabelle übernehmen?

Re: Daten aus e-mail Thunderbird in OO Base Tabelle übernehm

von Lord Nelson » So, 07.08.2011 01:00

Und wie geht es jetzt weiter?

Re: Daten aus e-mail Thunderbird in OO Base Tabelle übernehm

von Lord Nelson » Do, 21.07.2011 15:48

Will mir denn keiner mehr hier weiterhelfen? Würde mich sehr freuen.

Re: Daten aus e-mail Thunderbird in OO Base Tabelle übernehm

von Lord Nelson » Do, 14.07.2011 09:59

Also, die Positionen stimmen meiner Meinung nach jetzt, denn ich kriege ja haargenau die richtigen Werte. Was ich nur noch nicht richtig verstehe, ist warum mir nicht: Titel:003 und Name: Zustellername angezeigt wird.

Re: Daten aus e-mail Thunderbird in OO Base Tabelle übernehm

von Lord Nelson » Do, 14.07.2011 09:46

Hallo Winfried,

ähm... Tschuldigung. Am Anfang wußte ich ja nicht, was Du genau vorhattest und da habe ich in Ermangelung eines Bildschirmscanners, die e-mail in meiner vermeindlich richtigen Reihenfolge einfach abgetippt. War wohl nicht ganz richtig. :(

Dann habe ich mir das Script ausführen lassen und versucht zu verstehen was da passiert. Das hatte ich ja dokumentiert. Als mir klar wurde, was Case-Zeilen bedeuten und machen, habe ich die kopierte Thunderbird-email genommen in einem Editor die Stellen rausgesucht, die ich brauche und diese Zahlen eingefügt und mich so gefreut, daß die Ergebnisse, bei mehreren e-mails immer richtig waren.

Hier mal die Original-email. Als Text abgespeichert:
Betreff:
REKLAMATION
Von:
logistik@prospekte.de
Datum:
13 Jul 2011 14:07:31 UT
An:
Peter@t-online.de




Reklamation-Nr.: 36084
Zustellungsdatum: 06.07.11 Titel: 003 Bezirk: 12345
Straße: Reklamations Str. Haus Nr.:4 Name: Reklamant Telefon-Leser:
Zusteller: 7777 Name: Zustellername, Zustellervorname Telefon: 0111/2222222
Die Zeitung gehört in den Briefkasten,
Zeitungsrohr oder Türschlitz.
Nicht in den Vorgarten/Treppenstufen werfen!
Nicht in Zäune/Hecken stecken!

Da konnte ich dann auch erst sehen, dass der erste Doppelpunkt wo anders anfängt, da die abgespeicherten e-mails als Txt-Datei anders aufgebaut sind, als das, was ich in Thunderbird vormals gesehen habe.

Klar kann ich vertehen, dass Du denkst, ich wollte Dich evtl. verarsch..., aber dem ist nicht so! Lediglich ein Fehler meinerseits.

Grüße Peter

Re: Daten aus e-mail Thunderbird in OO Base Tabelle übernehm

von komma4 » Do, 14.07.2011 08:33

Lord Nelson hat geschrieben:Habe ein wenig an den Nummern hinter Case rumprobiert
Schön, dass Du etwas probieren willst... allerdings solltest Du auch verstehen, was Du änderst.

Die Anweisung

Code: Alles auswählen

iPosDoppelpkt = INSTR( 7, sZeile, ":" )
ist im Code dokumentiert mit:

' Position des ersten Doppelpunktes

In einer Zeile, die mit Zustellungsdatum: beginnt, ist dies Stelle 17

Bei der Zeile Zusteller: ist das Position 10.

Da kann dann CASE 20 oder 13 nicht greifen.


Das Problem, was ich nun mit Dir habe, ist dass Du unterschiedliche Anforderungen stellst.

In Deiner 1. Beispielmail war Deine erste Zeile Reklamation-Nr.: 12345, nun ist das Betreff:REKLAMATION - von der Rekl.-Nr., die ja als DB-Primärschlüssel dienen soll nichts zu sehen.

1. Testdaten: Zustellungsdatum:, nun Zustelldatum:

Im ersten Beispiel "Straße:" zum Zeilenbeginn, nun in am Ende einer Zeile.

Wo ist nun Dein "Zusteller"?



So kann nur mit VIEL MEHR Aufwand ein Parser geschrieben werden (indem alle möglichen Schreibweisen und Positionen berücksichtigt werden).
Und dazu ist mir meine Zeit zu schade...

Solltest Du Interesse und die Muse haben, das selbst umzusetzen, helfen wir gerne.
Das Prinzip sollte klar sein: mit der Funktion FindPartString bekommst Du die Zeichen zwischen zwei angegebenen Begrenzern.

Re: Daten aus e-mail Thunderbird in OO Base Tabelle übernehm

von Lord Nelson » Do, 14.07.2011 00:05

Habe ein wenig an den Nummern hinter Case rumprobiert, jetzt sieht es so aus:
Sub de48860

sMakroName = "Mail nach Datenbank"
sMakroVersion = "2011-07-13"

GlobalScope.BasicLibraries.loadLibrary( "Tools" )

' 2011-07-13

' hier anpassen ! ! ! ! !
'
sTempDatei = "C:\Users\Peter\Favorites\Zusteller/REKLAMATION.txt"

On Error Goto ERR_1
iNumber = Freefile

On Error Resume Next


Open sTempDatei For Input As iNumber

While not EOF( iNumber)

Line Input #iNumber, sZeile

' Position des ersten Doppelpunktes
iPosDoppelpkt = INSTR( 7, sZeile, ":" )


' bestimmt den Typ der Zeile
Select Case iPosDoppelpkt

Case 16 ' "Reklamation-Nr.:"
idRekla = _
MID( sZeile, iPosDoppelpkt+2 , LEN (sZeile)-iPosDoppelpkt+1 )

Case 20 ' "Zustellungsdatum:"
dZustell = FindPartString( sZeile, "Zustellungsdatum: ", " Titel: ", 1 )
iPosBezirk = INSTR( sZeile, "Bezirk: " )
iBezirk = TRIM ( MID( sZeile, iPosBezirk+6 ) )

Case 10 ' "Straße"
sStrasse = FindPartString( sZeile, "Straße: ", "Haus Nr.:", 1 )
iHausNr = FindPartString( sZeile, "Haus Nr.:", "Name:", 1 )
sAnrufer = FindPartString( sZeile, "Name:", "Telefon-Leser", 1 )
iPosTelLeser = INSTR( sZeile, "Telefon-Leser" )
sTelLeser = MID( sZeile, iPosTelLeser+14 )

Case 13 ' "Zusteller:"
sPersNr = FindPartString( sZeile, "Zusteller:", "Name:", 1 )
iPosTel = INSTR( sZeile, "Telefon:" )
sZustTel = MID( sZeile, iPosTel+9 )

Case Else
sBemerk = sBemerk & sZeile & " "
End Select

WEnd

Close #iNumber


print "rekl " & idRekla
print "datum " & dZustell
print "bezirk " & iBezirk
print "str " & sStrasse
print "hnr " & iHausNr
print "anrufer " & sanrufer
print "telLeser " & sTelLeser
print "PersNr " & sPersNr
print "Tel " & sZustTel
print sbemerk

Exit Sub
' ------------------------------------------------------------------

ERR_1:


MsgBox _
"Fehler beim Versuch eine Dateinummer zu erhalten." & CHR(10) _
& CHR(10) & "Erklärung:" _
& CHR(10) & "Zu viele geöffnete Dateien."_
& CHR(10) & "Makro " & sMakroName & "wird nun beendet." _
, 48 , sMakroName & sMakroVersion

End Sub

Sub Main

End Sub
Ich bekomme jetzt die einzelnen Daten in den Fenstern richtig angezeigt. Nur bei Case 20 wird der Titel und bei Case 13 komplett ignoriert.

Re: Daten aus e-mail Thunderbird in OO Base Tabelle übernehm

von Lord Nelson » Mi, 13.07.2011 22:49

Okay, jetzt habe ich genau verstanden, wo der letzte Script hinsollte. :D

Jetzt bekomme ich nacheinander 10 Fenster, die ich mit Okay oder Abbrechen schließen kann:
1. Fenster= rekl 1234 Name:Richtiger Name Telefon:01234-1234567 = richtig

rekl ist aber als Ergebnis die Personal-nr. des Zustellers.

2.datum = leer

3.bezirk = leer

4. str = leer

5.hnr= leer

6. anrufer = leer

7. telLeser = 7:04:36 UT

8. PersNr = leer

9. Tel ion-Nr: 36058 (das ist aber die Reklamationsnr.)

10. Betreff:REKLAMATION Von:logitik@prospekte.de Datum: An: Peter@t-online.de
Zustelldatum:09,07.11 Titel:021 Bezirk:11146 Straße:StraßenStr. HausNr.:21
Name:Leser Telefon-Leser:0123/1234565
Wiederholte Reklamation: 2 in 1 Woche Achtung!Hier muss auch regelmäßig
zugestellt werden!Zeitung muss bis 16 Uhr verteilt werden!!!!

Re: Daten aus e-mail Thunderbird in OO Base Tabelle übernehm

von komma4 » Mi, 13.07.2011 19:34

Lord Nelson hat geschrieben:
SubsMakroName = "Mail nach Datenbank"
sMakroVersion = "2011-07-13"de48860

Code: Alles auswählen

Sub de48860

sMakroName = "Mail nach Datenbank"
sMakroVersion = "2011-07-13"

Re: Daten aus e-mail Thunderbird in OO Base Tabelle übernehm

von Lord Nelson » Mi, 13.07.2011 19:04

Wenn ich oben das so eingetragen habe:
SubsMakroName = "Mail nach Datenbank"
sMakroVersion = "2011-07-13"de48860

GlobalScope.BasicLibraries.loadLibrary( "Tools" )...

Kriege ich folgende Fehlermeldung:
Basic Syntaxfehler erwartet: Sub
Wenn ich die obere Zeile weglasse und nur den zuerst von Dir beschriebenen Absatz unter Print einfüge, dann kommen einige Meldungen, die ich mit Okay beantworten kann und zum Schluss öffnet sich ein Fenster, indem der Zusteller mit Name und Telefon vermerkt ist und auch der Grund der Reklamation. Das müsste auch noch getrennt werden.

Re: Daten aus e-mail Thunderbird in OO Base Tabelle übernehm

von komma4 » Mi, 13.07.2011 10:54

Lord Nelson hat geschrieben:Richtig?
Richtig.
Basic-Syntaxfehler Label ERR_1 undefiniert
Der Abschnitt ist beim Kopieren verloren gegangen.

Füge ein -nach den PRINT Anweisungen- :

Code: Alles auswählen

Exit Sub
' ------------------------------------------------------------------

ERR_1:


MsgBox _
		"Fehler beim Versuch eine Dateinummer zu erhalten." & CHR(10) _
		& CHR(10) & "Erklärung:" _
		& CHR(10) & "Zu viele geöffnete Dateien."_
		& CHR(10) & "Makro " & sMakroName & "wird nun beendet." _
		, 48 , sMakroName & sMakroVersion

Die letzte Zeile lautet dann End Sub

Und dazu am Anfang, direkt nach dem SUB

Code: Alles auswählen

sMakroName = "Mail nach Datenbank"
sMakroVersion = "2011-07-13"
Damit sollte es laufen... teste bitte

Re: Daten aus e-mail Thunderbird in OO Base Tabelle übernehm

von Lord Nelson » Mi, 13.07.2011 10:40

Hallo Winfried,

okay
a) "Haus Nr." können nach meiner Erfahrung auch lauten: "10-12" oder "1a": Datentyp ZAHL ungeeignet; nimm TEXT
b) "Telefon-Leser": mit dem Trenner "/" nicht als ZAHL speicherbar, auch geht die Vorwahl-Null verloren; nimm TEXT
c) desgleichen für "Zustellername Telefon"


Das habe ich geändert. Danke für den Tipp.

Jetzt wird es für mich etwas schwieriger zu verstehen. Ich habe das jetzt so verstanden, dass ich in OO ein Makro bauen muss. Richtig? Also habe ich unter

Makros - verwalten-Open Office Basic-NEU

ein neues Makro geöffnet und Deine Arbeit hineinkopiert.

Anschließend habe ich 1. erledigt und 2. das Script mit meinem Pfad angepasst. Allerdings: C:\Users\NAME\Favorites\NN\Bezirke-Zusteller/REKLAMATION.txt (Windows Vista)

Das dann abgespeichert als de48860 und ausführen lassen.

Ergebnis:
Ich bekomme die Fehlermeldung:
Basic-Syntaxfehler Label ERR_1 undefiniert
Gruß

Peter

Re: Daten aus e-mail Thunderbird in OO Base Tabelle übernehm

von komma4 » Mo, 11.07.2011 18:44

Zunächst mal ein paar Anmerkungen zu Deinem Tabellenentwurf:

Lord Nelson hat geschrieben: Haus Nr.:12 -> nach -> Haus-Nr. [Zahl]
[...]
Telefon-Leser: 01234/12345 -> nach -> Telefon [Zahl]
[...]
Zustellername Telefon: 12345/12345 -> nach -> Telefon Zust. [Zahl]

a) "Haus Nr." können nach meiner Erfahrung auch lauten: "10-12" oder "1a": Datentyp ZAHL ungeeignet; nimm TEXT
b) "Telefon-Leser": mit dem Trenner "/" nicht als ZAHL speicherbar, auch geht die Vorwahl-Null verloren; nimm TEXT
c) desgleichen für "Zustellername Telefon"



Der Rest ist Fleissarbeit gewesen.
Bei manchen Spaltenwerten habe ich die Position des Bezeichners ermittelt und den Wert dann ausgeschnitten.
Bei anderen Werten konnte ich eine Hilfsroutine aus der Bibliothek TOOLS nutzen, die einen Teilstring, eingefasst durch zwei bekannte Zeichenketten, ausschneidet.

Das sieht dann so aus:

Code: Alles auswählen

Sub de48860

GlobalScope.BasicLibraries.loadLibrary( "Tools" )

' 2011-07-11

' hier anpassen ! ! ! ! ! 
' 
sTempDatei = "/home/BENUTZER/testdata/thunderbird.txt"

On Error Goto ERR_1
iNumber = Freefile

On Error Resume Next


Open sTempDatei For Input As iNumber

While not EOF( iNumber)
 
 Line Input #iNumber, sZeile
 
 ' Position des ersten Doppelpunktes
 iPosDoppelpkt = INSTR( 1, sZeile, ":" )


 ' bestimmt den Typ der Zeile
 Select Case iPosDoppelpkt
 
    Case 16 ' "Reklamation-Nr.:"
       idRekla = _
       MID( sZeile, iPosDoppelpkt+2 , LEN (sZeile)-iPosDoppelpkt+1 )

    Case 17 ' "Zustellungsdatum:"
       dZustell =  FindPartString( sZeile, "Zustellungsdatum: ", " Titel: ", 1 )
       iPosBezirk = INSTR( sZeile, "Bezirk: " )
       iBezirk = TRIM ( MID( sZeile, iPosBezirk+6 ) )

    Case 7 ' "Straße"
       sStrasse = FindPartString( sZeile, "Straße: ", "Haus Nr.:", 1 )
       iHausNr = FindPartString( sZeile, "Haus Nr.:", "Name:", 1 )
       sAnrufer = FindPartString( sZeile, "Name:", "Telefon-Leser", 1 )
       iPosTelLeser = INSTR( sZeile, "Telefon-Leser" )
       sTelLeser = MID( sZeile, iPosTelLeser+14 )
       
    Case 10 ' "Zusteller:"
       sPersNr = FindPartString( sZeile, "Zusteller: ", "Name:", 1 )
       iPosTel = INSTR( sZeile, "Telefon:" )
       sZustTel = MID( sZeile, iPosTel+9 )

    Case Else
       sBemerk = sBemerk & sZeile & " "
 End Select

WEnd
 
Close #iNumber


print "rekl " & idRekla
print "datum " & dZustell
print "bezirk " & iBezirk
print "str " & sStrasse
print "hnr " & iHausNr
print "anrufer " & sanrufer
print "telLeser " & sTelLeser
print "PersNr " & sPersNr
print "Tel " & sZustTel
print sbemerk


End Sub

Bedeutet für Dich erstmal:
1) Nachricht aus Thunderbird als Text speichern (bspw. unter "c:\temp\thunderbird.txt") - immer am gleichen Ort und mit gleichem Namen
2) den Dateinamen im Skript anpassen !
3) die Routine de48860 in/aus OOo abrufen



Bekommst Du damit bei Deinen Testdaten (nimm zum Testen verschiedene Datensätze) die richtigen Ergebnisse?

Dann machen wir im nächsten Schritt mit den Befehlen zum Einfügen in die Datenbank weiter.

Re: Daten aus e-mail Thunderbird in OO Base Tabelle übernehm

von Lord Nelson » Mo, 11.07.2011 11:48

Okay,

so sieht meine Tabelle aus:

Reklamationsnr. | Datum | Grund | Anrufer | Straße |Haus-Nr.| Ort | Telefon | Bezirk | Zusteller | Pers.Nr. | Telefon Zust. | erledigt |
[Primärschlüssel] [Date] [TXT] [TXT] [TXT] [Zahl] [TXT] [Zahl] [Zahl] [TXT] [Zahl] [Zahl] [Ja/Nein]

Aus der e-mail sollen dann die Daten:

e-mail-Inhalt Tabellenspalten

Reklamation-Nr.: 12345 -> nach -> Tabelle Reklamationsnr. [Primärschlüssel]
Zustellungsdatum: 01.02.13 -> nach -> Tabellenspalte Datum [Date]
Bezirk: 12345 -> nach -> Bezirk [Zahl]
Straße: Straßenname -> nach -> Straße [TXT]
Haus Nr.:12 -> nach -> Haus-Nr. [Zahl]
Name: Nachname -> nach -> Anrufer [TXT]
Telefon-Leser: 01234/12345 -> nach -> Telefon [Zahl]
Zusteller: 1234 -> nach -> Pers.Nr. [Zahl]
Zustellername Telefon: 12345/12345 -> nach -> Telefon Zust. [Zahl] Achtung!

Seit Wochen kommt die Zeitung nur 14-Tägig -> nach -> Grund [TXT]
oder gar nicht. Wiederholte Reklamation!

Gespeichert werden sollen also alle im letzten Threadt unterstrichenen Zeichen. Ich hoffe, ich konnte dies so verdeutlichen.

Re: Daten aus e-mail Thunderbird in OO Base Tabelle übernehm

von komma4 » Mi, 06.07.2011 19:20

Lord Nelson hat geschrieben:und hilft einem Halbwissenden
Welche Hälfte weisst Du denn?


Wie ist Deine Tabelle aufgebaut?
Welche Inhalte sollen gespeichert werden?

Re: Daten aus e-mail Thunderbird in OO Base Tabelle übernehm

von Lord Nelson » Di, 05.07.2011 15:15

Okay, dann versuche ich es mal:

Hier die betreffende e-mail: die sehen vom Aufbau immer gleich aus:
Reklamation-Nr.: 12345
Zustellungsdatum: 01.02.13 Titel: 123 Bezirk: 12345
Straße: Straßenname Haus Nr.:12 Name: Nachname Telefon-Leser: 01234/12345
Zusteller: 1234 Name: Zustellername Telefon: 12345/12345
Achtung!
Seit Wochen kommt die Zeitung nur 14-Tägig
oder gar nicht. Wiederholte Reklamation!
Die Unterstreichungen sind immer die wechselnden Daten. Vielleicht ist ja Jemand so nett und hilft einem Halbwissenden.

Gruss Peter

Nach oben