[PROJEKT] Automatisierter Download und Verarbeitung von Audiodateien

  • Nun möchte ich gern nochmal das Wochentagproblem angehen, hier wurde mir ja naheglegt das über ein Array zu lösen. Ich habe mich nun in die Array's etwas reingelesen und hoffe, dass ich das System dahinter verstehe.

    Um anstatt der englischen Wochentagsnamen den entsprechenden duteschen Tag zu bekommen.

    Irgendwie ist das mit den Arrays und Dim und Const aber gerade noch sehr verwirrend für mich und bevor ich mich mal wieder verrenne, frag ich einfach mal ob ich auf dem richtigen Weg bin :)

    In dem Fall ist Dim const aufjedenfall der richtige Anfang oder und da die Woche 7 Tage hat muß oder sollte das Array $sWeekdays[6] heißen?
    Aber für diese Geschichte muß ich wohl ein mehrdimensionles Array verwenden. hier komm ich jetzt aber ins stocken.

    Muß ich beim declarieren eines mehrdimensionalen Arrays danna uch entsprechend viele Indexnummern angeben?
    Bsp:
    $sWeekdays[6][6] <--- für die Verknüpfung Monday-Montag / Tuesday-Diensteg
    Aber irgendwie kommt mir das schon wieder reichlich kompliziert und falsch vor.

    Oder ist es dann sinnvoll das über zwei Arrays zu lösen $sWeekdays[0] bis $sWeekdays[6] entsprechend befüllt mit Monday bis Sunday und $sWochentage[0] bis $sWochentage[6] entsprechend declariert mit Montag bis Sonntag.

    Irgendwie bin ich grad total lost :D

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

  • Also erstens solltest du unter keinen Umständen Dim verwenden, sondern wie bei anderen Variablen auch Local oder Global.
    Da die Woche 7 Tage hat musst du beim Deklarieren des Arrays auch $asWeekdays[7] verwenden, 6 wäre zu wenig.

    Bei dem Rest kann ich dir momentan nicht helfen, da ich nicht weiß, wofür genau du das zweidimensionale Array brauchst.

    • Offizieller Beitrag

    Schau mal in meine Signatur, da findest du ein Tut zu Arrays.

    Ich hab mal eine Lösungsvariante gebastelt. Probier erst mal selber, dann guck in den Spoiler:

    Spoiler anzeigen
    [autoit]

    #include <Date.au3>

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

    ConsoleWrite('Heute ist: ' & _WeekDay_GE(@YEAR, @MON, @MDAY) & @LF)

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

    Func _WeekDay_GE($_iYYYY, $_iMM, $_iDD)
    Local $aWDays[8] = ['','Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag']
    Local $iDay = _DateToDayOfWeek($_iYYYY, $_iMM, $_iDD) ; So = 1, ... Sa = 7
    Return $aWDays[$iDay]
    EndFunc

    [/autoit]
  • James: hmmm ... ich dachte [0] würde auch soch zählen? ... Also [0] bis [6] = 7 ?? ...OK, also [7].

    Das mut der Dim hatte ich aus der Online-Hilfe

    Zitat


    Bevor man ein Array in einem Skript verwenden kann, muss man mit dem Schlüsselwort 'Dim' dessen Grenzen definieren.


    Das Array soll wie gesagt dazu dienen die Wochentage in deutscher Sprache auszugeben.

    Bsp:
    eine Messagebox "Heute ist Mittwoch"

    @Bugdix:
    Schau ich mir gleich mal an :)

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

  • hmmm ... ich dachte [0] würde auch soch zählen? ... Also [0] bis [6] = 7 ?? ...OK, also [7].

    Beim deklarieren musst du [7] schreiben, da du ja 7 Elemente in dem Array haben willst. Der Zugriff auf diese 7 Elemente erfolgt dann durch [0] bis [6].

    Das mut der Dim hatte ich aus der Online-Hilfe

    Irgendwo anders steht aber, dass Dim veraltet ist und nichtmehr benutzt werden sollte. Ich finde die Stelle aber gerade auch nicht. :D


    Das Array soll wie gesagt dazu dienen die Wochentage in deutscher Sprache auszugeben.

    Bsp:
    eine Messagebox "Heute ist Mittwoch"

    Dann würde ich es wie BugFix machen, außerdem brauchst du dafür ja kein mehrdimensionales Array.

  • Hier mal das Schnipsel für das Menu, das bei mir leider rechtsbündig angezeigt wird und ich lieber linksbündig hätte.

    Spoiler anzeigen
    [autoit]

    #Region ### MAIN GUI - MENU ###
    $sMenuFile = GUICtrlCreateMenu("Datei")
    $sMenuOpt = GUICtrlCreateMenu("Optionen")
    $sMenuHelp = GUICtrlCreateMenu("?")

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

    $sItemExit = GUICtrlCreateMenuItem("Beenden", $sMenuFile)

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

    $sItemConnect = GUICtrlCreateMenuItem("Verbindung testen", $sMenuOpt)
    $sItemTrenner_1 = GUICtrlCreateMenuItem("", $sMenuOpt)
    $sItemState = GUICtrlCreateMenuItem("Statusanzeige", $sMenuOpt)
    $sItemEinst = GUICtrlCreateMenuItem("Einstellungen", $sMenuOpt)

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

    $sItemHelp = GUICtrlCreateMenuItem("Hilfe", $sMenuHelp)
    $sItemAbout = GUICtrlCreateMenuItem("Info", $sMenuHelp)
    #EndRegion ### MAIN GUI - MENU ###

    [/autoit]

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

    • Offizieller Beitrag

    2 Sachen
    1. Bitte poste immer ein lauffähiges Skript. Kaum jemand hat Lust, da eine GUI herumzubasteln.
    2. Was genau soll linksbündig sein? Die Menüpunkte innerhalb der GUI (das ist der Fall) oder der Text in einem Menü-Item (auch der ist linksbündig)

  • Genaugenommen findet nur in diesem Bereich irgendwas statt was das Menu verändern sollte :(

    Ich habe mal alles rausgeschnitten und das Script auf ein Minimum reduziert, selbst hier ist bei mir das Menu rechtsbündig. Allerdings ist mir auch aufgefallen, dass da Menu vom AI3-Editor selbst auch rechtsbündig ist.

    Spoiler anzeigen
    [autoit]

    #Region ### INCLUDES ###
    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <GDIPlus.au3>
    #Include <WinAPI.au3>
    #include <GroupEx[0.7].au3>
    #include <FTPEx.au3>
    #include <Debug.au3>
    #include <Winamp_Library.au3>
    #EndRegion ### INCLUDES ###

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

    #Region #################### MAIN GUI ####################

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

    #Region ### MAIN GUI - DECLARATION OF VARS ###
    $sGuiMain = GUICreate("BeCast Downloader V. ", 800, 550, 20, 20)
    #EndRegion ### MAIN GUI - DECLARATION OF VARS ###

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

    #Region ### MAIN GUI - GUI OPTIONS ###
    GUISetBkColor(0x000000)
    GUICtrlSetState(-1, $GUI_DISABLE)
    #EndRegion ### MAIN GUI - GUI OPTIONS ###

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

    #Region ### MAIN GUI - MENU ###
    $sMenuFile = GUICtrlCreateMenu("Datei")
    $sMenuOpt = GUICtrlCreateMenu("Optionen")
    $sMenuHelp = GUICtrlCreateMenu("?")

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

    $sItemExit = GUICtrlCreateMenuItem("Beenden", $sMenuFile)

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

    $sItemConnect = GUICtrlCreateMenuItem("Verbindung testen", $sMenuOpt)
    $sItemTrenner_1 = GUICtrlCreateMenuItem("", $sMenuOpt)
    $sItemState = GUICtrlCreateMenuItem("Statusanzeige", $sMenuOpt)
    $sItemEinst = GUICtrlCreateMenuItem("Einstellungen", $sMenuOpt)

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

    $sItemHelp = GUICtrlCreateMenuItem("Hilfe", $sMenuHelp)
    $sItemAbout = GUICtrlCreateMenuItem("Info", $sMenuHelp)
    #EndRegion ### MAIN GUI - MENU ###

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

    #EndRegion #################### MAIN GUI ####################

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

    GUISetState(@SW_SHOW, $sGuiMain)

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

    #Region ### WORKAROUND ###
    While 1
    $nMsg = GUIGetMsg(0)
    Switch $nMsg
    Case $sItemExit, $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    #EndRegion ### WORKAROUND ###

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

    Exit

    [/autoit]


    EDIT:
    Nur nochmal zur Erklärung:
    Unter den Menupunkten werden ja die Items aufgelistet und diese sind alle in einer Box dargestellt. Eben diese Box ist dann rechtsbündig zu dem Menupunkt. Die Items selbst innerhalb der Box sind schon linksbündig.

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

    • Offizieller Beitrag

    Auch mit diesem Skript ist alles linksbündig.

    PS: Bitte benenne die GroupEx[0.7].au3 um zur GroupEx.au3. "[0.7]" ist nur die Programmversion, die ich beim Veröffentlichen im Dateinamen mit angebe.

    EDIT: "...Eben diese Box ist dann rechtsbündig zu dem Menupunkt."
    DAS kannst du nicht beeinflussen. Das hat auch nichts mit der Ausrichtung von Menü oder Menü-Item zu tun.
    Wenn du das anders möchtest, musst du dir ein eigenes Fenster basteln mit Menüpunkten, das du dann an gewünschter Position einbindest.

  • GroupEx geändert :)

    OK, ich dachte es gäbe da evtl.e ine Option zu. Ist ja auch kein Drama, nur ein optisches Mängel, wenn man das überhaupt so nennen kann :D

    Danke erstmal.


    Dein Tutorial bezüglich Arrays ist sehr gut geschrieben. Ich muß da aber wohl trotzdem erstmal irgendwelche Beispiele erarbeiten, da ich bis jetzt noch nicht mal einen Ansatzpunkt gefunden habe das auf meine Übersetzung der Wochentage anzuwenden. Vermutlich denke ich mal wieder nur zu kompliziert. :)

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

  • So, nachdem ich mir das Tutorial von BugFix nochmal durchgelesen habe, glaube ich dies als den richtigen Lösungsweg zu haben um die engleichen Wochentage in deutsch ausgeben zu lassen.

    Aber irgendwo habe ich noch einen groben Denkfehler :( Denn in meiner Schleife bekomme ich einen Syntax Error.

    Spoiler anzeigen
    [autoit]


    #include <Date.au3>

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

    Local $arWochentag = "Montag|Dienstag|Mittwoch|Donnerstag|Freitag|Samstag|Sonntag"
    Local $arWeekday = "Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday"
    Local $sWeekday = _DateDayOfWeek(@WDAY)

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

    $arWochentagSplit = StringSplit($arWochentag, "|")
    $arWeekdaySplit = StringSplit($arWeekday, "|")

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

    For $i = 1 To 7
    If $sWeekday = $arWeekdaySplit[i] Then
    $sWochentag = $arWochentagSplit[i]
    EndIf
    Next

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

    MsgBox(4096, "Wochentag", "Heute ist " & $sWochentag)

    [/autoit]

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

    • Offizieller Beitrag

    Warum so kompliziert?
    Du weisst doch an welcher Stelle in deinem Array der Wochentag steht (ACHTUNG Array angepasst!), also doch einfach nur

    [autoit]


    Local $arWochentag = "Sonntag|Montag|Dienstag|Mittwoch|Donnerstag|Freitag|Samstag"

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

    $arWochentagSplit = StringSplit($arWochentag, "|")
    $sWochentag = $arWochentagSplit[@WDAY]

    [/autoit]
  • Wie gemein :D

    Ich war schon so stolz das so hinbekommen zu haben .. *lach*

    Tja, ich denke oft noch viel zu kompliziert. ... Danke für den Tipp. :)

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

  • *rofl*

    und wenn es jetzt noch jemand schafft das ganze ohne irgendeine Zeile zu schreiben, dann hock ich mich ins Flugzeug, fliege in die Karibik an einen schnen Strand und denke mir von dort aus die genialsten Programme, wähend ich Coktails mit Schirmchen und Annanas schlürfe :)

    MfG
    Anna

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

  • Ich habe nochmal eine grundlegende Frage zum Scriptaufbau.

    Das anfänglich kleine Progrämmchen wird ja nun immer größer und größer und je mehr ich mich in die Materie einarbeite um so mehr Ideen kommen mir, um aus dem Tool ein Programm entstehen zu lassen. Aber ich muß aufpassen, dass das Ganze übersichtlich bleibt.

    Auf anraten habe ich ja nun alles in folgender Reihenfolge in ein Script gepackt
    - Includes
    - Ini-Read
    - Startscreen
    - Main Gui
    - Option Gui
    - Workaround
    - Free Recources
    Exit
    - Funtions

    Das alles habe ich mit Region und #EndRegion in übersichtliche Bereiche eingeteilt und zusätliche Regionen darin eingerichtet, wenn ein Teil besonders umfangreich ist.

    Aber:
    Das reicht so langsam nicht mehr um das Script übersichtlich zu halten, ständiges scrollen, offenen und schließen von Regionen wird langsam zu Last. Gerade die Funktionen werden immer größer.

    Macht es wirklich Sinn weiter alles in ein einziges Script zu packen?
    oder
    Ist es doch sinnvoll einen Teil auszulagern und was wäre dann die beste Lösung?

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