[PROJEKT] Automatisierter Download und Verarbeitung von Audiodateien

  • Wenn ich das in der Hilfe richtig gelesen habe, reicht es ja dafür den "Functions" Teil in eine neue .au3 zu kopieren und mit #Include einzubinden?

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)

  • hmpf ... :(

    Nun hab ich den Functionsteil in eine .au3 ausgegliedert aber ein Problem.

    Im Hauptscript rufe ich ja die ganzen Includes auf und auch die ReadIni für das config-File. Und obwohl ich jetzt die config.ini vor den Includes auslesen lasse und die Variablen als "Global" declariert habe bringt er mir im Fungionsscript die Meldung, dass die Variablen nicht declariert wären. :(

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)

  • Also ....

    Ich habe ja nun einige Funktionen ausgegliedert und bekomme in den ausgegliederten Funktionen die Meldung, dass diverse Variablen noch nicht declariert sind.

    Im Hauptscript rufe ich zuerst die config.ini auf:

    Spoiler anzeigen
    [autoit]

    #Region ### INI-READ ###
    Global $sInifile = @ScriptDir & "\data\config.ini"
    ;~ [Program-Info]

    [/autoit] [autoit][/autoit] [autoit]

    ;~ [Options]
    Global $sOptFtpZugang = IniRead($sInifile, "Options", "OptFtpZugang", "default")
    Global $sOptFtpServer = IniRead($sInifile, "Options", "OptFtpServer", "default")
    Global $sOptFtpUser = IniRead($sInifile, "Options", "OptFtpUser", "default")
    Global $sOptFtpPasswd = IniRead($sInifile, "Options", "OptFtpPasswd", "default")

    [/autoit] [autoit][/autoit] [autoit]

    usw.....

    [/autoit]

    Danach rufe ich die Includes auf:

    Spoiler anzeigen
    [autoit]

    #Region ### INCLUDES ###
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <EditConstants.au3>
    #include <GDIPlus.au3>
    #Include <WinAPI.au3>
    #include <GroupEx.au3>

    [/autoit] [autoit][/autoit] [autoit]

    usw....

    [/autoit]

    Das Script scheint soweit auch zu funktionieren, aber ich bekomme eben die Error-Meldungen.

    Setze ich nun die Include-Gruppe vor die IniRead-Gruppe, werden andere Variable als nicht declariert angezeigt.

    Das ist wie: "Wer war zuerst da, das Hihn oder das Ei?" :cursing:

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)

  • Nachdem ich feststellen mußte, dass ich mit meinem Wissen über einige Basics noch schwer hinterherhinke habe ich mich noch mal auf die Variablen gestürzt. Beim abarbeiten der Hilfe bin ich über folgendes Beispiel gestolpert und ein Teil will sich mir nicht so recht erschließen.

    [autoit]

    Local $w = Number(1 + 2 + 10) ; Gibt 13 zurück
    Local $x = Number("3.14") ; Gibt 3.14 zurück
    Local $y = Number("24/7") ; Gibt 24 zurück
    Local $z = Number("tmp3") ; Gibt 0 zurück

    [/autoit]

    1, 2 und 4 sind mir klar, aber bei 3 habe ich ein Problem. Warum bekommt man hier nicht 24/7 als Wert zurück, sondern nur 24 ?

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)

  • Das ist siweit schon klar, aber warum gibt das nicht auch "0" zurück, dann müßte "tmp3" ja auch "3" zurückgeben ?

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)

  • Verdamt, warum übersehe ich soclhe einfachen Sachen ständig? :(

    So blind kann man doch normal nicht sein ... Sorry, aber danke für die Hilfe.

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)

  • Nun hab ich nochmal eine blöde Frage.... :pinch:

    Es geht noch immer um die Declaration der Variablen.

    In einem au3-Script, in dem ich einige Funktionen ausgelagert habe, stellt sich innerhalb der ersten Funktion folgender Ablauf dar.

    1. Funktion: Nachrichten
    - Wochentagabfrage
    - Uhrzeitabfrage incl. aufrufen einer weiteren Funktion für die Uhrzeit
    - aufrufen der Funktion für den ersten Download
    - aufrufen der Funktion für die Ini-Read der Zugangsdaten
    - Download des zusätzlichen Contents mit den Zugangsdaten
    - Normalisierung der Daten
    usw...

    2. Funktion erster Download
    3. Funktion: auslesen der Zugangsdaten

    Vorab, das Script funktioniert soweit, der erste Download wird ausgeführt aus der mit geladenen ini-Datei werden die Zugangsdatenausgelesen und der zweite Download vollzogen.

    Trotzdem aber alles funktioniert, bekomme ich in der 1. Funktion unter Punkt "Download des zusätzlichen Contents" die Errormeldung [WARNING: §xmedia_user: possibly used before declaration]. Kann es sein, dass diese Warnug nur deshalb kommt, weil die Variablen chronologisch im Script vor der Funktion stehen in dem sie declariert werden und kann ich diese Warnung ignorieren?

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)

  • Trotzdem aber alles funktioniert, bekomme ich in der 1. Funktion unter Punkt "Download des zusätzlichen Contents" die Errormeldung [WARNING: §xmedia_user: possibly used before declaration]. Kann es sein, dass diese Warnug nur deshalb kommt, weil die Variablen chronologisch im Script vor der Funktion stehen in dem sie declariert werden und kann ich diese Warnung ignorieren?


    Ja, solltest ignorieren können.
    Wenn das Skript mal kompiliert ist, kommt sowieso keine Warnung mehr.

    There's a joke that C has the speed and efficieny of assembly language combined with readability of....assembly language. In other words, it's just a glorified assembly language. - Teh Interwebz

    C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, you blow off your whole leg. - Bjarne Stroustrup
    Genie zu sein, bedeutet für mich, alles zu tun, was ich will. - Klaus Kinski

  • Ich bin gerade dabei das ganze Script nochmal zu überarbeiten und übersichtlicher zu gestalten, auch um eventuelle Fehlerquellen auszuschließen.

    Allerdings verweigert diese Function trotz korrekter Übergabe der Variablen noch ihren Dienst.

    [autoit]

    #Region ### DOWNLOAD ###
    Func _NewsDownload($sOpener, $sCloser)
    Local $_S1_Conn = ("ftp://" & $sOptFtpUser & ":" & $sOptFtpPasswd & "@" & $sOptFtpServer)
    Local $hDownload = InetGet($_S1_Conn & "News/" & $sOpener, "temp" & "Opener.mp3", 1, 1)
    Local $hDownload = InetGet($_S1_Conn & "News/" & $sCloser, "temp" & "Closer.mp3", 1, 1)
    Local $hDownload = InetGet($_S1_Conn & "News/" & $sOptFtpZugang, "temp" & $sOptFtpZugang, 1, 1)
    EndFunc
    #EndRegion ### DOWNLOAD ###

    [/autoit]

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)

  • Du speicherst alle 3 Downloads in der gleichen Variable ->Das heißt, die überschreiben sich gegenseitig
    Sind $sOptFtpUser, $sOptFtpPasswd, $sOptFtpServer global? Sonst musst du sie als Parameter in der Funktion aufnehmen.
    ich würde das so machen:

    Spoiler anzeigen
    [autoit]


    Func _NewsDownload($sOpener, $sCloser)
    Local $_S1_Conn = ("ftp://" & $sOptFtpUser & ":" & $sOptFtpPasswd & "@" & $sOptFtpServer)
    Local $hDownload[3]
    $hDownload[0] = InetGet($_S1_Conn & "News/" & $sOpener, "temp" & "Opener.mp3", 1, 1)
    $hDownload[1] = InetGet($_S1_Conn & "News/" & $sCloser, "temp" & "Closer.mp3", 1, 1)
    $hDownload[2] = InetGet($_S1_Conn & "News/" & $sOptFtpZugang, "temp" & $sOptFtpZugang, 1, 1)
    Return $hDownload
    EndFunc

    [/autoit]


    (freihand)

  • Leider noch immer nicht :(

    Ich frage mich gerade ob es am Passwort des Zugangs liegen kann, denn das enthält dummerweise ein :-Zeichen. Das aber ja auch gerade beim FTP als Trenner zwischen Passwort und User verwendet wird.

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)

  • Hast du dich schonmal mit dem Thema "Escapen" beschäftigt? Bestimmte "Sonderzeichen" verhalten sich in den Programmiersprachen nicht wie manchmal angenommen als normales Zeichen. Sprich du musst deinem Passwort dann quasi sagen "Das Minus ist ein minus und das soll so übernommen werden.", ansonsten wird er das Minus als Sonderzeichen/Steuerzeichen interpretieren.

    Escapen tut man u.a. mit \

    #Edit: Ich hab den Doppelpunkt nicht gesehen. Gilt dort aber genauso.

    Grüße Yaerox

    Grüne Hölle

  • hmmm ...

    Wenn ich über eine MsgBox $_S1_Conn anzeigen lasse wirds korrekt angezeigt. Übernehe ich in der config.ini beim Passwort ein \ vor dem Doppelpunkt, wird auch der mit angezeigt.

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)

  • Das ist klar, wenn du den in die ini schreibt den Backslash, dann wird er mit angezeigt.

    Ich würde mir den gesamten Befehl wie du ihn brauchst mal ausgeben lassen also z.B.

    [autoit]

    ConsoleWrite($_S1_Conn & "News/" & $sCloser, "temp" & "Closer.mp3" & @CR)

    [/autoit]

    Dann schaust du dir an was dabei rauskommt (also ohne / oder \). Wenn du siehst wie es in der Konsole ausschaut siehst du ja ob der Befehl richtig ist oder nicht. Somit kannst du dann Zeichen in den Variablen möglicherweise ausschließen.

    Grüße Yaerox

    Grüne Hölle

  • Ich habe das jetzt mal noch mit eingebaut.

    Zu sehen bekam ich, dass vor und nach den Verzeichnissen noch die Slshes bzw. Backslashes gefehlt haben. Diese habe ich jetzt inkl. @ScriptDir mit eingebaut. In der Console bekomme ich jetzt den korrekten Pfad zum file inkl. aller Zugangsdaten ausgegeben. Wenn ich diesen kopiere und im FF einfüge, lande ich auch sofort an der korrekten Stelle und bekomme das File.

    Trotzdem will die Funktion nicht arbeiten.
    Aktuell:

    [autoit]

    Func _NewsDownload($sOpener, $sCloser)
    Local $_S1_Conn = ("ftp://" & $sOptFtpUser & ":" & $sOptFtpPasswd & "@" & $sOptFtpServer)
    ConsoleWrite($_S1_Conn & "/News/" & $sCloser & @ScriptDir & "\temp" & "Closer.mp3" & @CRLF)
    Local $hDownload[3]
    $hDownload[0] = InetGet($_S1_Conn & "/News/" & $sOpener, @ScriptDir & "\temp" & "Opener.mp3", 1, 1)
    $hDownload[1] = InetGet($_S1_Conn & "/News/" & $sCloser, @ScriptDir & "\temp" & "Closer.mp3", 1, 1)
    $hDownload[2] = InetGet($_S1_Conn & "/News/" & $sOptFtpZugang, @ScriptDir & "\temp" & $sOptFtpZugang, 1, 1)
    Return $hDownload
    EndFunc

    [/autoit]

    Ich frag mich was den Unterschied ausmacht, denn die alte Funktion mit der integrierten Progressbar läuft nachwievor.

    Spoiler anzeigen
    [autoit]

    #Region ### DOWNLOAD ###
    Func _NewsDownload($sOpener, $sCloser)
    Local $_S1_Open = _FTP_Open('MyFTP Control')
    Local $_S1_Conn = _FTP_Connect($_S1_Open, $sOptFtpServer, $sOptFtpUser, $sOptFtpPasswd, 0, $INTERNET_DEFAULT_FTP_PORT, $INTERNET_SERVICE_FTP, 0)
    ProgressOn ( "News Download", "Aktuelles OnAirDesign wird geladen")
    _FTP_ProgressDownload($_S1_Conn, "temp" & "Opener.mp3", "News/" & $sOpener, "_UpdateProgress")
    Sleep(1000)
    ProgressOff ( )
    ProgressOn ( "News Download", "Aktuelles OnAirDesign wird geladen")
    _FTP_ProgressDownload($_S1_Conn, "temp" & "Closer.mp3", "News/" & $sCloser, "_UpdateProgress")
    Sleep(1000)
    ProgressOff ( )
    _FTP_ProgressDownload($_S1_Conn, "temp" & $sOptFtpZugang, "../_func/" & $sOptFtpZugang, "_UpdateProgress")
    Sleep(1000)
    _FTP_Close($_S1_Open)
    EndFunc
    #EndRegion ### DOWNLOAD ###

    [/autoit]

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)

    4 Mal editiert, zuletzt von AnMa (19. September 2013 um 14:43)

  • Es wäre gut wenn du mal beschreiben könntest was denn nicht gehen mag, da wir es ja leider nicht testen können. Wenn du sagst das ConsoleWrite zeigt zu 100% das richtige an, dann sag uns mal was die 3 InetGets zurückgeben.

    Hast du die Hilfe dazu auch schon genau glesen? besonders Remarks etc.?

    Grüße Yaerox

    Grüne Hölle