Erledigt VBScript Befehl auf mehrere Zeilen aufteilen

Dieses Thema im Forum "Tech & FAQ Forum" wurde erstellt von Belvedere Jehosaphat, 29 Dezember 2018.

  1. Belvedere Jehosaphat

    Belvedere Jehosaphat Bekanntes Mitglied

    Registriert seit:
    22 Februar 2014
    Beiträge:
    902
    Liebe Gemeinde,

    ich bin gerade dabei ein VBScript zu erstellen und benötigt Hilfe bei der Syntax. Es geht darum, einen Befehl so umzubrechen, daß er über mehrere Zeilen verteilt werden kann. Dies dient einfach der Übersichtlichkeit.

    Konkret geht es um die Zeile mit "absender = Array(..."

    Funktionierendes Beispiel:
    Code:
    Dim absender
    absender = Array(Array("Empfänger TLD 1", "Absenderadresse 1"), Array("Empfänger TLD 2", "Absenderadresse 2"), Array("Empfänger TLD 3", "Absenderadresse 3"))
    
    for i = 0 to ubound(absender)
       msgbox(absender(i)(0) & " " & absender(i)(1))
    next

    Leider nicht mehr funktionierendes Beispiel. Der Code sollte so ähnlich wie hier gezeigt über mehrere Zeilen verteilt werden:
    Code:
    Dim absender
    absender = Array(Array("Empfänger TLD 1", "Absenderadresse 1"), &_
           Array("Empfänger TLD 2", "Absenderadresse 2"), &_
           Array("Empfänger TLD 3", "Absenderadresse 3"))
    
    for i = 0 to ubound(absender)
       msgbox(absender(i)(0) & " " & absender(i)(1))
    next
    Etwa 30 Absender müssen da rein, aber alles in einer Zeile ist sehr unpraktisch. Wer kann mir hier weiterhelfen?



    PS: Lösung gefunden:

    Code:
    Dim absender
    absender = Array(Array("Empfänger TLD 1", "Absenderadresse 1"), _
           Array("Empfänger TLD 2", "Absenderadresse 2"), _
           Array("Empfänger TLD 3", "Absenderadresse 3"))
    
    for i = 0 to ubound(absender)
       msgbox(absender(i)(0) & " " & absender(i)(1))
    next
    Wie banal...
    Zuletzt bearbeitet: 29 Dezember 2018
  2. RichyZuHause

    RichyZuHause Alter mit Ego

    Registriert seit:
    2 Juni 2001
    Beiträge:
    1.952
    Die Zeilenverlängerung mit " _" ist m.W. beschränkt auf eine bestimmte Länge.
    Zumindest in VBA ist das so.
    Den Max-Wert kenne ich aber nicht.
  3. EchtAtze

    EchtAtze Bekannter Mitglied

    Registriert seit:
    9 Juni 2001
    Beiträge:
    5.045
    RichyZuHause sagt Danke.
  4. RichyZuHause

    RichyZuHause Alter mit Ego

    Registriert seit:
    2 Juni 2001
    Beiträge:
    1.952
    Gute Idee.

    Oder - um beim Array zu bleiben - eine kleine Funktion schreiben, die ein Array um Einträge "verlängert".
    Nutzung dann etwa so (ohne Klassendefinition, was besser wäre):
    absender = arrAdd(absender, "Empfänger TLD 4", "Absenderadresse 4")
    absender = arrAdd(absender, "Empfänger TLD 5", "Absenderadresse 5")
  5. Belvedere Jehosaphat

    Belvedere Jehosaphat Bekanntes Mitglied

    Registriert seit:
    22 Februar 2014
    Beiträge:
    902
    @EchtAtze
    Dictionary... sieht interessant aus. Habe es im Script mittlerweile ähnlich gelöst, d.h. Empfänger- und Absenderpaare werden aus einer ini Datei ausgelesen und in ein Array gepackt.

    @RichyZuHause
    Bei jedem Schleifendurchlauf das Array um einen Eintrag zu erweitern hat sich in anderen Sprachen als nachteilig bzgl. der Performance erwiesen, deshalb lasse ich vor erstellen des Arrays die benötigten Zeilen berechnen.

    Code:
    function iniReadSectionToArray(sectionName)
       Dim fso
       Set fso = WScript.CreateObject("Scripting.FileSystemObject")
       Set myFile = fso.OpenTextFile("test.ini")
    
       aText = Split(myFile.ReadAll, "[" )
       myFile.Close
    
       for each strSection in aText
         if strSection <> "" then
           aTemp = Split(strSection, "]")
           If Ucase(aTemp(0)) = Ucase(sectionName) Then
             strSectionText = aTemp(1)
             exit for
           End If
         End if
       Next
    
       insertCounter = -1
       arrLines = Split(strSectionText, vbCrLf)
       for each line in arrLines
         if (len(line) > 0) then
           insertCounter = insertCounter + 1
         end if
       next
    
       Dim addressArray()
       redim addressArray(insertCounter, 1)
       insertCounter = -1
       for each line in arrLines
         if (len(line) > 0) then
           insertCounter = insertCounter + 1
           aLine = Split(line, "=")
           addressArray(insertCounter,0) = aLine(0)
           addressArray(insertCounter,1) = aLine(1)
         end if
       next
    
       iniReadSectionToArray = addressArray
    end function
    Leider hat sich dann herausgestellt, daß ich das Problem doch nicht wie gedacht lösen kann, denn es besteht die Möglichkeit, daß der gleiche Empfänger auch von mehreren unterschiedlichen Absendern angemailt werden kann, was bei einer strikten 1:1 Zuordnung zu falschen Ergebnissen führen würde.
    Zuletzt bearbeitet: 1 Januar 2019
  6. dr_tommi

    dr_tommi alter Oldie

    Registriert seit:
    26 April 2001
    Beiträge:
    12.785
    Vielleicht könnten wir dir helfen wenn du uns mitteilen würdest, was du eigentlich mit dem Script erreichen willst.
  7. Belvedere Jehosaphat

    Belvedere Jehosaphat Bekanntes Mitglied

    Registriert seit:
    22 Februar 2014
    Beiträge:
    902
    Das ursprüngliche Problem der Aufteilung eines Kommandos auf mehrere Zeilen wurde bereits gelöst. Das zuletzt angesprochene Problem wird sich wohl nicht lösen lassen, aber Ihr könnts gerne versuchen ;)

    Jedem Dienst, mit dem ich im Internet zu tun habe, habe ich ein individuelles Alias bei meinen Mailadressen eingerichtet. Meine bei den Diensten hinterlegten Mailadressen lauten daher z.B. "Empfängeradresse-A@domain.tld" für Amazon oder "Empfängeradresse-E@domain.tld" für eBay. Sinn und Zweck ist es, mitzubekommen, wann sich welcher Dienst hat seine Daten klauen lassen oder sie auch selbst weitergegeben hat, denn kommen über eine Adresse, die exklusiv nur einem Dienst zugewiesen ist auch Mails von anderen Absendern rein, weiß ich daß da was faul ist.

    Zu Hause betreibe ich einen eigenen Mailserver (hMailServer), der regelmäßig den externen Mailanbieter abfragt, Mails abholt und beim Anbieter löscht und mir auf all meinen Geräten per IMAP zur Verfügung stellt. In den Mailversand kann ich per VBScript (Vorgabe von hMailServer) eingreifen und u.A. auch die Header von ein- und auch ausgehenden Nachrichten verändern.

    Eingehende Nachrichten sind soweit kein Problem. Kommt eine Nachricht an "Empfängeradresse-A@domain.tld" rein, wird sie im IMAP Ordner für Anbieter A abgelegt. Kommt eine Nachricht an "Empfängeradresse-B@domain.tld" rein, wird sie im IMAP Ordner für Anbieter B abgelegt, usw. Soweit alles bestens.

    Will ich eine Nachricht an Anbieter A schicken, bei dem ich nur mit einem Konto registriert bin, ist alles klar. Mein Script tauscht im Email Header die Adresse meines Hauptkontos, unter dem die Aliase liegen, gegen den diesem Anbieter zugewiesenen Absender-Alias aus und verschickt die Mail. Immer noch alles bestens.

    Bei Anbieter B jedoch bin ich mit mehreren Konten und daher zwangsläufig auch mit mehreren Aliasen registriert. Wenn ich jetzt per Thunderbird eine Mail an Anbieter B schicke, in dem vom Script zu verarbeitenden Mailheader aber nur die Adresse meines Email Hauptkontos drinsteht, kann es nicht herausfinden, welches der diesem Anbieter zugewiesenen Aliase es verwenden soll.

    Natürlich kann ich in Thunderbird mit Identitäten arbeiten und bei jeder ausgehenden Mail den Absender manuell vorgeben. Dazu brauche ich aber das Script nicht. Das einzige, was ich machen könnte, wäre die Mail zurückbouncen zu lassen, wenn für einen Anbieter mehrere Aliase vorhanden sind, quasi als Erinnerung an mich, doch eine entsprechende Vorauswahl zu treffen.
  8. RichyZuHause

    RichyZuHause Alter mit Ego

    Registriert seit:
    2 Juni 2001
    Beiträge:
    1.952
    Das liegt daran, dass das neue Array mit Redim Preserve erst aus dem alten kopiert wird.
    Bei nur ca. 30 Einträgen solltest Du allerdings nicht bis Neujahr warten müssen. ;-)