_DayIntervalToDateArray & @Hour & @min

  • Hallo Brauche mal wieder Unterstützung......

    Habe wie folgt mit Unterstützung von Bugfix und allen anderen.

    [ gelöst ] Chekbox in ini eintragen und Uhrzeit....

    diese ini erzeugt:
    [Wochentag]
    tage=80
    [Startzeit]
    Uhr=16:00
    [Quelle-Ziele]
    F:\=C:\
    F:\=x:\
    F:\=y:\

    Jetzt wollte ich ein Script zum laufen bringen der diese ini ausliest und dann eine exe startet wenn alles in frage kommen,
    Also Datum und Stunde und Minuten.
    Und Prüfen Ob Quelle und Ziel verfügbar sind
    Script sollte alle Kriterien alle 30 Sec. Prüfen.

    So sieht mein Script aus komme irgendwie nicht weiter???

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <Date.au3> ; wird für die Funktion benötigt

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

    Local $arCheckBox[7]
    $arCheckBox[6] = "Mo."
    $arCheckBox[5] = "Di."
    $arCheckBox[4] = "Mi."
    $arCheckBox[3] = "Do."
    $arCheckBox[2] = "Fr."
    $arCheckBox[1] = "Sa."
    $arCheckBox[0] = "So."

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

    $ini = IniRead(@ScriptDir & '\save.ini', "sicherung", "tage", 0)
    For $i = 6 To 0 step - 1
    If BitAND($ini, 2^$i) Then$aDate = _DayIntervalToDateArray('Do.')
    $aDate = _DayIntervalToDateArray('Do.')
    _ArrayDisplay($aDate, $arCheckBox[$i])
    ;MsgBox(0, '', )
    ; GUICtrlSetState($arCheckBox[$i], $GUI_CHECKED)

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

    EndIf
    Next

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

    ; Beispiele -Anfang-
    ;$aDate = _DayIntervalToDateArray('Mo-Sa')

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

    ;_ArrayDisplay($aDate, 'Intervall = Mo-Sa')
    ;$aDate = _DayIntervalToDateArray('MI.-fr.', False)
    ;_ArrayDisplay($aDate, 'Intervall = MI.-fr.')
    ;$aDate = _DayIntervalToDateArray('Do.')
    ;_ArrayDisplay($aDate, 'Intervall = Do.')
    ;$aDate = _DayIntervalToDateArray('Do.', False)
    ;_ArrayDisplay($aDate, 'Intervall = letzter Do.')
    ;$aDate = _DayIntervalToDateArray('So.', False, 2009, 12, 24) ; gesucht: Sonntag vor Heiligabend
    ;_ArrayDisplay($aDate, 'Intervall = So. vor Heiligabend')
    ; Beispiele -Ende-

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

    ;===============================================================================
    ; Function Name: _DayIntervalToDateArray($sInterval[, $bTime = True][, $iYear = @YEAR][, $iMonth = @MON][, $iDay = @MDAY])
    ; Description:: gibt ein Array mit Daten zurück, die dem übergebenen Wochentagsintervall entsprechen
    ; Parameter(s): $sIntervall = Wochentag oder ein Intervall (von...bis)
    ; $bTime = False (Vergangenheit) oder True (Zukunft)
    ; $iYear, $iMonth, $iDay = Falls man ein anderes Bezugsdatum angeben will
    ; Requirement(s): #include <Array.au3>
    ; #include <Date.au3>
    ; Return Value(s): nullbasiertes Array
    ; im Fehlerfall: Rückgabe = "0" und @error = 1
    ; Author(s): Oscar (http://www.autoit.de)
    ;===============================================================================
    Func _DayIntervalToDateArray($sInterval, $bTime = True, $iYear = @YEAR, $iMonth = @MON, $iDay = @MDAY)
    Local $aInterval = StringSplit($sInterval, '-')
    If $aInterval[0] > 2 Then Return SetError(1, 0, 0)
    Local $aWeekDay[7][2] = [['Mo', 0],['Di', 1],['Mi', 2],['Do', 3],['Fr', 4],['Sa', 5],['So', 6]]
    Local $aDay[2] = [-1, -1], $aDate[1], $iDateSub, $iTimeFormat
    For $i = 1 To $aInterval[0]
    For $j = 0 To UBound($aWeekDay) - 1
    If StringInStr($aInterval[$i], $aWeekDay[$j][0]) Then
    $aDay[$i - 1] = $aWeekDay[$j][1]
    ExitLoop
    EndIf
    Next
    Next
    If $aDay[0] = -1 Then Return SetError(1, 0, 0)
    If $aDay[1] > -1 Then ; Wenn ein "von-bis-Intervall" übergeben wurde, dann...
    ReDim $aDate[$aDay[1] - $aDay[0] + 1]
    For $i = 0 To $aDay[1] - $aDay[0] ; Alle Wochentage aus dem Intervall
    $iDateSub = ($aWeekDay[$aDay[0] + $i][1] - 6) + (6 - _DateToDayOfWeekISO($iYear, $iMonth, $iDay)); (gesuchter Wochentag - 6) + (6 - heute)
    If $bTime Then
    If $iDateSub < 0 Then $iDateSub += 7 ; wenn der Wochentag kleiner heute, dann nächste Woche
    Else
    If $iDateSub >= 0 Then $iDateSub -= 7 ; wenn der Wochentag größer/gleich heute, dann letzte Woche
    EndIf
    $aDate[$i] = _DateAdd('D', $iDateSub, StringFormat('%04i/%02i/%02i', $iYear, $iMonth, $iDay)) ; Datum vom Wochentag ins Ausgabe-Array
    Next
    Else ; ansonsten wurde nur ein einzelner Wochentag übergeben
    $iDateSub = ($aWeekDay[$aDay[0]][1] - 6) + (6 - _DateToDayOfWeekISO($iYear, $iMonth, $iDay)); (gesuchter Wochentag - 6) + (6 - heute)
    If $bTime Then
    If $iDateSub < 0 Then $iDateSub += 7 ; wenn der Wochentag kleiner heute, dann nächste Woche
    Else
    If $iDateSub >= 0 Then $iDateSub -= 7 ; wenn der Wochentag größer/gleich heute, dann letzte Woche
    EndIf
    $aDate[0] = _DateAdd('D', $iDateSub, StringFormat('%04i/%02i/%02i', $iYear, $iMonth, $iDay)) ; Datum vom Wochentag ins Ausgabe-Array
    EndIf
    _ArraySort($aDate) ; Ausgabe-Array sortieren
    Return $aDate
    EndFunc ;

    [/autoit]

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

    2 Mal editiert, zuletzt von subzero007 (27. September 2009 um 12:11)

  • So hatte den Syntax fehler übersehen jetzt ist er weg.

    aber funktionieren tut es nicht so richtig würde mich für jeden tipp und unterstützung freuen.


    [autoit]

    #include <Array.au3>
    #include <Date.au3> ; wird für die Funktion benötigt
    Local $arCheckBox[7]
    Local $aDate

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

    $arCheckBox[6] = "Mo."
    $arCheckBox[5] = "Di."
    $arCheckBox[4] = "Mi."
    $arCheckBox[3] = "Do."
    $arCheckBox[2] = "Fr."
    $arCheckBox[1] = "Sa."
    $arCheckBox[0] = "So."

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

    $ini = IniRead(@ScriptDir & '\save.ini', "sicherung", "tage", 0)
    For $i = 6 To 0 step - 1
    If BitAND($ini, 2^$i) Then $aDate = _DayIntervalToDateArray($arCheckBox[$i])
    ;$aDate = _DayIntervalToDateArray('Do.')
    _ArrayDisplay($aDate)
    ;MsgBox(0, '', )
    ; GUICtrlSetState($arCheckBox[$i], $GUI_CHECKED)
    Next

    [/autoit]

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Bugfix hatte es mir so beschrieben
    [ gelöst ] Chekbox in ini eintragen und Uhrzeit....

    [autoit]

    #cs - diese Werte speicherst du als Summe für mehrere Tage in der INI
    1 - Sonntag
    2 - Montag
    4 - Dienstag
    8 - Mittwoch
    16 - Donnerstag
    32 - Freitag
    64 - Samstag
    #ce
    ; z.B.
    Local $arCheckBox[7]
    $arCheckBox[0] = GUICtrlCreateCheckbox('Sonntag',...)
    $arCheckBox[1] = GUICtrlCreateCheckbox('Montag',...)
    ; usw.

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

    ; Auslesen
    Local $checked = 0
    For $i = 0 To 6
    If BitAND(GUICtrlRead($arCheckBox[$i]), $GUI_CHECKED) Then
    $checked = BitOR($checked, 2^$i)
    EndIf
    Next
    ; in INI schreiben
    IniWrite($INI, 'sicherung', 'tage', $checked)

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

    #cs Muster-INI
    [sicherung]
    tage=42
    #ce
    ; 2 + 8 + 32 = Mo/Mi/Fr

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

    ; aus INI lesen
    Local $savedays = IniRead($INI, 'sicherung', 'tage', 0)

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

    ; prüfen ob aktueller Tag für Sicherung vorgesehen ist
    If BitAND($savedays, 2^(@WDAY-1)) Then
    ; starte Sicherung
    EndIf

    [/autoit]

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Aso, sorry die ganzen Querverweise aus den zahlreichen Threads hat hier niemand im Kopf ;)

    80 -> zurückwandlen in die Wochentage (hier Do & Sa)
    Diese Tage mit der Funktion in ein Datum umwandlen und mit den Makros (@year, @mon usw.) prüfen ob heute auch wirklich der zurückgegebene Tag ist

  • Genau,

    wie mache ich das?
    Das ist ja das wo ich nicht weiterkomme?

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

    Einmal editiert, zuletzt von subzero007 (25. September 2009 um 20:07)

  • Hey,
    ich scheitere schon beim Zurückwandeln 80 zu Wochentag?? "siehe poste 2"
    und habe keine idee wie ich anschliessend:
    Jahr,Monat, Tag, stunde, Minute und abfrage das alles alle 30 sekunden,
    wenn es in frage kommt eine exe zu starten und dann soll es wieder zurück in die Schleife

    Kann mir jemand mal unter die arme greifen ??

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

    Einmal editiert, zuletzt von subzero007 (26. September 2009 um 16:04)

  • Hey,

    Ich bin dabei mein sicherungstool zu schreiben bin ja auch schon sehr weit gekommen für meine verhältnisse.

    jetzt habe ich vor einen dienst mit srvany.exe zum laufen zu bringen der eine ini datei prüft:

    [Wochentag]
    tage=80
    [Startzeit]
    Uhr=16:00
    [Quelle-Ziele]
    F:\=C:\
    F:\=x:\
    F:\=y:\

    er soll tage=*
    "Montag, Dienstag, Mittwoch, Donnerstag, Freitag, samstag ,Sonntag"

    ..siehe beschreibung von Bugfix :
    [ gelöst ] Chekbox in ini eintragen und Uhrzeit....


    mir ausgeben dann will ich es in die funktion von Oscar übergeben:
    Wochentag(e) nach Datum umwandeln

    Der wandelt wochentage in datum um .

    dann soll er prüfen ob: [Wochentag] und [Startzeit] in frage kommt wenn der zeitpunkt erreicht ist dann soll er eine exe starten er soll er alle 30 sekunden diese prüfung machen.
    die exe macht nichts ausser [Quelle-Ziele] zu kopieren.

    Kann mir jemand unter die Arme greifen ?

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Mann könnte ja auch auf die zweite exe verzichten und es als funktion in die vom dienst packen der datum und uhrzeit prüft .
    dann kann man sich eine exe sparen.
    oder?

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

    • Offizieller Beitrag

    Also, bevor das Autoit Problem angegangen wird.
    Du willst Backups erstellen lassen. Kopien von a nach b.
    Soweit habe ich es verstanden. Aber warum willst du irgendwelche Tage hin und her rechnen und wieder umwandeln?
    Reicht nicht, Datum letzte Sicherung ist x Tage her, also sichern.

    Mega

  • Nein eben nicht,
    es wird eine GUi werden wo zu verschieden tagen der anwender was sichern kann und wo er das auch frei definiren kann,

    und es soll über einen dienst laufen der den job übernimmt.
    Und die Gui wird nur für die config der ini benötigt.

    hier die gui.

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <DateTimeConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <StaticConstants.au3>
    #include <TabConstants.au3>
    #include <TreeViewConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiListView.au3>
    #include <File.au3>
    Local $arCheckBox[7]
    Global $ini = @ScriptDir & '\save.ini'
    Global $path = @ScriptDir & '\lastsave'
    Global $hfile = @ScriptDir & '\lastsave.log'

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

    $Form1 = GUICreate("Sicherung", 918, 457, 219, 121)
    $Tab1 = GUICtrlCreateTab(16, 24, 873, 417)
    GUICtrlSetResizing(-1, $GUI_DOCKWIDTH + $GUI_DOCKHEIGHT)
    $TabSheet1 = GUICtrlCreateTabItem("Backup")
    $arCheckBox[6] = GUICtrlCreateCheckbox("Montag", 24, 361, 57, 17)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    $arCheckBox[5] = GUICtrlCreateCheckbox("Dienstag", 88, 361, 57, 17)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    $arCheckBox[4] = GUICtrlCreateCheckbox("Mittwoch", 152, 361, 65, 17)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    $arCheckBox[3] = GUICtrlCreateCheckbox("Donnerstag", 224, 361, 73, 17)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    $arCheckBox[2] = GUICtrlCreateCheckbox("Freitag", 304, 361, 57, 17)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    $arCheckBox[1] = GUICtrlCreateCheckbox("Samstag", 368, 361, 57, 17)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    $arCheckBox[0] = GUICtrlCreateCheckbox("Sonntag", 432, 361, 65, 17)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")

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

    $Time = GUICtrlCreateDate('15:00', 24, 393, 70, 21, $DTS_TIMEFORMAT)
    ;GUICtrlCreateDate('00:00:00', 10, 10, 100, 30, $DTS_TIMEFORMAT)
    $DTM_SETFORMAT_ = 0x1032
    $style = "HH:mm"
    GUICtrlSendMsg($Time, $DTM_SETFORMAT_, 0, $style)

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

    $hListView = GUICtrlCreateListView("Quelle|Ziel", 24, 73, 850, 246)
    GUICtrlSendMsg(-1, 0x101E, 0, 50)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    $add = GUICtrlCreateButton("+", 24, 321, 75, 25)
    GUICtrlSetFont(-1, 20, 400, 0, "Arial")
    $del = GUICtrlCreateButton("-", 104, 321, 75, 25)
    GUICtrlSetFont(-2, 20, 400, 0, "Arial")
    $Task_Plannen = GUICtrlCreateButton("Task_Planen", 100, 390, 75, 25)
    $Save = GUICtrlCreateButton("Save-Settings", 800, 49, 75, 25)

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

    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    $Quelle = GUICtrlCreateLabel("Quelle", 24, 49, 34, 17)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    $Sichern = GUICtrlCreateButton("Sichern", 184, 321, 75, 25)
    GUICtrlSetFont(-1, 15, 400, 0, "Arial")
    $TabSheet2 = GUICtrlCreateTabItem("Restore")
    $Input2 = GUICtrlCreateInput("Input1", 31, 81, 353, 22)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    $Restore_Ordner = GUICtrlCreateLabel("Restore_Ordner", 24, 57, 79, 17)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    $Quellpfadzeigen = GUICtrlCreateButton("Quellpfadzeigen", 392, 129, 83, 25)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    $TreeView1 = GUICtrlCreateTreeView(40, 137, 345, 241)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    $Wiederherstellen = GUICtrlCreateButton("Wiederherstellen", 392, 353, 83, 25)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    $Button1 = GUICtrlCreateButton("suchen", 392, 81, 43, 25)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    $Verfuegbare_sicherungen = GUICtrlCreateLabel("Verfuegbare_sicherungen", 48, 113, 126, 17)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    $Offnen = GUICtrlCreateButton("Offnen", 392, 321, 83, 25)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    GUICtrlCreateTabItem("")
    GUISetState(@SW_SHOW)

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

    ;if FileExists(@ScriptDir & '\lastsave.log') Then
    ; _format()
    ; EndIf
    If FileExists(@ScriptDir & '\save.ini') Then
    $ini = IniRead(@ScriptDir & '\save.ini', "Wochentag", "tage", 0)
    For $i = 6 To 0 Step -1
    If BitAND($ini, 2 ^ $i) Then
    GUICtrlSetState($arCheckBox[$i], $GUI_CHECKED)
    EndIf
    Next
    Local $aData = IniReadSection(@ScriptDir & "\save.ini", "Quelle-Ziele")
    ; _ArrayDisplay($aData)
    For $i = 1 To UBound($aData) - 1
    GUICtrlCreateListViewItem($aData[$i][0] & "|" & $aData[$i][1], $hListView)
    Next
    EndIf
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE

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

    Exit
    Case $add
    $sfolder = FileSelectFolder("Wählen den zu Sichernden Ordner:", 'c:')

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

    ;if @error Then Return
    $dfolder = FileSelectFolder("Wählen Sie den Ziel Ordner:", 'c:')
    GUICtrlCreateListViewItem($sfolder & '|' & $dfolder, $hListView)
    ;if @error Then Return
    $hWnd = $hListView
    If FileExists($path & ".log") Then FileDelete($path & ".log")
    FileWrite($path & ".log", _GUICtrlListView_Export($hWnd, 1, ','))

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

    Case $del
    _GUICtrlListView_DeleteItemsSelected($hListView)
    $hWnd = $hListView
    If FileExists($path & ".log") Then FileDelete($path & ".log")
    FileWrite($path & ".log", _GUICtrlListView_Export($hWnd, 1, ','))
    Case $Sichern
    _xcopy()
    Case $Task_Plannen
    _iniwrite()
    case $Save
    _iniwrite()

    EndSwitch
    WEnd

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

    Func _iniwrite()
    ;FileDelete($ini)
    IniDelete(@ScriptDir & '\save.ini', 'Quelle-Ziele')

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

    Local $checked = 0
    For $i = 0 To 6
    If BitAND(GUICtrlRead($arCheckBox[$i]), $GUI_CHECKED) Then
    $checked = BitOR($checked, 2 ^ $i)
    EndIf

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

    Next
    For $i = 0 To _GUICtrlListView_GetItemCount($hListView) - 1;hier zählst du die einträge
    $var1 = _GUICtrlListView_GetItemText($hListView, $i, 0)
    $var2 = _GUICtrlListView_GetItemText($hListView, $i, 1)
    ;IniWrite('save.ini', 'Backup', 'Quelle'&$i, $var1)
    ;IniWrite('save.ini', 'Backup', 'Ziel'&$i, $var2)

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

    ;IniWrite('save.ini', 'Quelle-Ziele', $var1&$i, $var2&$i)
    IniWrite(@ScriptDir & '\save.ini', 'Quelle-Ziele', $var1, $var2)

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

    Next
    ; Next
    IniWrite('save.ini', 'Wochentag', 'tage', $checked)
    MsgBox(0, "", $Time)
    IniWrite('save.ini', 'Startzeit', 'Uhr', GUICtrlRead($Time))

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

    EndFunc ;==>_iniwrite

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

    Func _iniread()
    #cs Muster-INI
    [sicherung]
    tage=42
    #ce
    ; 2 + 8 + 32 = Mo/Mi/Fr

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

    ; aus INI lesen
    Local $savedays = IniRead($ini, 'sicherung', 'tage', 0)

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

    ; prüfen ob aktueller Tag für Sicherung vorgesehen ist
    If BitAND($savedays, 2 ^ (@WDAY - 1)) Then
    ; starte Sicherung
    EndIf
    EndFunc ;==>_iniread

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

    Func _GUICtrlListView_Export($hWnd, $exType = 0, $Delim = Default) ; $exType=0 Array / $exType=1 String
    If Not IsHWnd($hWnd) Then $hWnd = GUICtrlGetHandle($hWnd)
    Local $row = _GUICtrlListView_GetItemCount($hWnd)
    If $exType Then
    If $Delim <> Default Then Local $oldDelim = Opt('GUIDataSeparatorChar', $Delim)
    Local $sOut = ''
    For $i = 0 To $row - 1
    $sOut &= _GUICtrlListView_GetItemTextString($hWnd, $i) & @CRLF
    Next
    If $Delim <> Default Then Opt('GUIDataSeparatorChar', $oldDelim)
    Return $sOut
    EndIf
    Local $col = _GUICtrlListView_GetColumnCount($hWnd)
    Local $aOut[$row][$col]
    If $col = 1 Then
    ReDim $aOut[$row]
    For $i = 0 To UBound($aOut) - 1
    $aOut[$i] = _GUICtrlListView_GetItemText($hWnd, $i)
    Next
    Return $aOut
    EndIf
    For $i = 0 To UBound($aOut) - 1
    For $j = 0 To UBound($aOut, 2) - 1
    $aOut[$i][$j] = _GUICtrlListView_GetItemText($hWnd, $i, $j)
    Next
    Next
    Return $aOut
    EndFunc ;==>_GUICtrlListView_Export

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

    Func _Load() ; Datenbank-Datei laden
    _GUICtrlListView_DeleteAllItems($hListView) ; Das Handle eben noch bestimmen (s. Anfang des Threads)

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

    Local $sItem
    ; $FileOpenDialog = FileOpenDialog("Pc Liste Wählen", @ScriptDir & "\", "Pc Liste (*.txt;*.csv)", 1 + 4)
    Local $hfile = FileOpen(@ScriptDir & '\lastsave.log', 0) ; Datei zum lesen öffnen
    If $hfile <> -1 Then ; wenn das öffnen erfolgreich war, dann...
    _GUICtrlListView_BeginUpdate($hListView) ; Listview sperren
    While True ; Endlosschleife
    $sItem = FileReadLine($hfile) ; Zeile aus der Datei lesen
    If @error Then ExitLoop ; wenn das Ende der Datei erreicht ist, dann Endlosschleife verlassen
    GUICtrlCreateListViewItem($sItem, $hListView) ; mit den eingelesenen Daten einen neuen Listview-Eintrag erstellen
    WEnd
    _GUICtrlListView_EndUpdate($hListView) ; Listview wieder freigeben
    FileClose($hfile) ; Datei schließen
    EndIf
    EndFunc ;==>_Load

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

    Func CopyWithProgress($srcDir, $destDir)
    If StringRight($srcDir, 1) = "\" Then $srcDir = StringLeft($srcDir, StringLen($srcDir) - 1)
    If StringRight($destDir, 1) <> "\" Then $destDir = $destDir & "\"
    If Not FileExists($destDir) Then DirCreate($destDir)
    $srcSize = DirGetSize($srcDir, 1)
    $1_percent = $srcSize[0] / 100
    ;Run('XCOPY "'& $srcDir & '" "' & $destDir & '" /D /S /E /V /C /H /R /O /Y')

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

    $lastpath = StringTrimLeft($srcDir, StringInStr($srcDir, "\", "", -1))
    $TSDIS = Run(@ComSpec & " /c " & @SystemDir & '\xcopy ' & $srcDir & ' ' & $destDir & $lastpath & '\ /D /S /E /V /C /H /R /Y', "", @SW_HIDE)
    ProgressOn('Copy ' & $srcDir & ' ' & $destDir & $lastpath, $1_percent & "%", "")
    Do
    $destSize = DirGetSize($destDir & $lastpath, 1)
    ProgressSet(Round($destSize[0] / $1_percent, 2), Round($destSize[0] / (1024 * 1024), 2) & " MB of " & Round($srcSize[0] / (1024 * 1024), 2) & " MB Kopiert" & @CRLF _
    & $destSize[1] & " von " & $srcSize[1] & " Dateien Kopiert." & @CRLF _
    & $destSize[2] & " von " & $srcSize[2] & " Ordner Kopiert.", Round($destSize[0] / $1_percent, 2) & "% - Fertig!")
    Sleep(200)
    Until $destSize[0] >= $srcSize[0]
    ProgressOff()
    EndFunc ;==>CopyWithProgress

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

    Func _xcopy()
    For $i = 0 To _GUICtrlListView_GetItemCount($hListView) - 1;hier zählst du die einträge
    $var1 = _GUICtrlListView_GetItemText($hListView, $i, 0)
    $var2 = _GUICtrlListView_GetItemText($hListView, $i, 1)
    CopyWithProgress($var1, $var2)

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

    Next

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

    EndFunc ;==>_xcopy

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

    Func _format()

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

    Dim $sFilePath = @ScriptDir & '\lastsave.log'
    Dim $outFile = @ScriptDir & '\lastsave.log'
    Dim $aArray
    _FileReadToArray($sFilePath, $aArray) ; datei in Array lesen

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

    For $i = 1 To $aArray[0] ; zeilenweise durchgehen

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

    $aArray[$i] = StringReplace($aArray[$i], ',', '|') ; der String wird ersetzt durch den String mit der Eingabe
    Next

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

    If FileExists($outFile) Then FileDelete($outFile) ; falls Ausgabedatei bereits vorhanden - löschen
    _FileWriteFromArray($outFile, $aArray, 1) ; vom Array in Ausgabedatei schreiben

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

    EndFunc ;==>_format

    [/autoit]

    und hier die exe die gestartet werden soll:


    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    Local $aData = IniReadSection(@ScriptDir & "\save.ini", "Quelle-Ziele")
    ; _ArrayDisplay($aData)
    For $i = 1 To UBound($aData) - 1
    _CopyWithProgress($aData[$i][0], $aData[$i][1])
    ;GUICtrlCreateListViewItem($aData[$i][0] & "|" & $aData[$i][1], $hListView)
    Next

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

    Func _CopyWithProgress($srcDir, $destDir)
    If StringRight($srcDir, 1) = "\" Then $srcDir = StringLeft($srcDir, StringLen($srcDir) - 1)
    If StringRight($destDir, 1) <> "\" Then $destDir = $destDir & "\"
    If Not FileExists($destDir) Then DirCreate($destDir)
    ;$srcSize = DirGetSize($srcDir, 1)
    ;$1_percent = $srcSize[0] / 100
    ;Run('XCOPY "'& $srcDir & '" "' & $destDir & '" /D /S /E /V /C /H /R /O /Y')
    $lastpath = StringTrimLeft($srcDir, StringInStr($srcDir, "\", "", -1))
    $TSDIS = Run(@ComSpec & " /c " & @SystemDir & '\xcopy ' & $srcDir & ' ' & $destDir & $lastpath & '\ /D /S /E /V /C /H /R /Y', "", @SW_HIDE)
    ;ProgressOn('Copy ' & $srcDir & ' ' & $destDir & $lastpath, $1_percent & "%", "")
    EndFunc ;==>CopyWithProgress

    [/autoit]

    Kann mir jemand unter die Arme greifen??

    Danke

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Hey,
    jeweilige beim Auslesen der Tage aus der ini siehe Post 1 und 2
    und abfragen ob jahr monat tag stunde minute in frage kommen wenn ja eine exe starten
    das ganze in einer schleife alle 30 sekunden

    wie mache ich das ?

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • mhh ich würde es komplett anders machen.
    Du solltest in deinem Porgramm eine Option haben , womit man einstellt, wann ein Backup gemacht werden soll!
    Und dann sind das halt mehrere Inputs.
    Jahr / Monat / Tag /Uhrzeit(hh) /Uhrzeit(mm)
    So dann speicherst du das auch so in die Ini.
    z.B so:

    Spoiler anzeigen

    [Zeitpunkt Backup]
    Jahr=2009
    Monat =09
    Tag =30
    Uhrzeithh = 15
    Uhrzeitmm = 22


    So dann prüfst du alle 30 Minuten oder so ob der Zeitpunkt erreicht ist.
    Das heißt, INI auslesen.
    Dann hast du die Wert in den Variabeln gespeichert..
    Dann ließt du das Aktuelle Datum aus, und vergleichst mit dem gespeicherten..
    Fertig :D
    Edit:
    So würde ich das dann abfragen:

    [autoit]

    If $BackUpJahr = $WertJahr AND $BackupMonat = $WertMonat AND $BackupTag = $WertTag AND $BackUpZeithh = $WertZeithh AND $BackUpZeitmm = $WertZeitmm
    Then _Backup()
    EndIf

    [/autoit]

    Einmal editiert, zuletzt von PokerFace (26. September 2009 um 23:07)

  • Hi,
    was ich bisher absolut nicht begriffen habe, was soll dieses "Tage=80" (in meiner Ini steht Tage=64 ).
    Ich würde die INI so aufbauen:


    damit kannst du erstens recht einfach die Liste in der GUI füllen und auch die Abfrage der Zeiten wird einfach:
    Das Dienstprogramm....läuft rund um die Uhr....

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    dim $Wochentag[8]=[7,"Sonntag","Montag","Dienstag","Mitttwoch","Donnerstag","Freitag","Samstag"]

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

    while 1

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

    $heutigerWochentag=$wochentag[@WDAY]
    $aktuelleUhrzeit=@hour&":"&@min

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

    $asections=IniReadSectionnames("backup.ini")

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

    for $i=1 to ubound($asections) -1
    $data=IniReadSection("backup.ini",$asections[$i])
    if stringinstr($data[1][1],$heutigerwochentag) and $data[2][1]=$aktuelleUhrzeit Then ;wenn wochentag und uhrzeit wie in der INI, dann

    ; RUN ("Backupprogramm.exe " &$data[3]&" "&$data[4]) ; backup von quelle nach ziel
    $logline=@mday&"/"&@mon&"/"&@year&" "&$heutigerwochentag&" "&$data[2][1]&" Backup von "&$data[3][1]& " nach "&$data[4][1]
    MsgBox(262144,'Debug line ~' & @ScriptLineNumber,'Selection:' & @lf & '$logline' & @lf & @lf & 'Return:' & @lf & $logline) ;### Debug MSGBOX
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $logline = ' & $logline & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    filewriteline("Backup.log",$logline)
    endif
    next

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

    sleep(60000) ; eine minute warten, damit die Minutenzeit eins höher ist und die backups nicht mehrfach angestossen werden

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

    wend

    [/autoit]

    Und mit deiner GUI fütterst/änderst du nur die INI....

  • [autoit]

    #cs
    64 steht für montag
    32 für dienstag
    16 für mittwoch
    8 für donnerstag
    4 für freitag
    2 für samstag
    1 für sonntag
    #ce
    dim $count
    $ini = 80
    For $i = 6 To 0 step - 1
    $count = BitAND($ini, 2^$i)
    If $count Then
    ConsoleWrite ($count & @CRLF)
    EndIf
    Next

    [/autoit]


    So wandlest du das ganze zurück.
    Ich finde die 2^$n Methode ürbigens ziemlich effektiv.