1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. ugt100

Beiträge von ugt100

  • Aus Textfile (liste) einzelne Dateien erzeugen und abspeichern

    • ugt100
    • 21. März 2013 um 12:46

    Hallo zusammen,
    ich habe da eine kleine Challenge zu bewältigen, bei der ich irgendwie nicht so recht den Einstieg finde.
    Ziel ist es, aus einem gegebenen strukturierten Textfile mehrere einzelne Textfiles zu erzeugen und diese
    mit einem ebenfalls im Textfile vorgegebenen Namen abzuspeichern.
    Schematischer Ablauf:
    Zeilen 1-5 ergeben den Inhalt der ersten neuen Datei
    Zeile 6 ist der Dateiname der ersten neuen Datei
    Zeilen 7-11 ergeben den Inhalt der zweiten neuen Datei
    Zeile 12 ist der Dateiname der ersten neuen Datei
    usw...

    Zum besseren Verständnis hier der Aufbau des Textfiles:

    [AAAAA]
    O=Sequential
    R=111:222
    T=A1B2C3
    R=databases\A\123.xxx
    123.zzz
    [BBBBB]
    O=Sequential
    R=123:123
    Title=1SW3BBB
    R=databases\A\mmm.xxx
    mmm.zzz

    (Anm.: alle Lines schliessen mit CRLF ab)

    Theoretisch denke ich, könnte der Ablauf des Scripts so aussehen:
    Textfile öffnen
    Textfile in Array laden

    Do While not Anzahl ArrayElemente = 0
    ArrayElemente 1-5 auslesen und in neue Datei schreiben
    ArrayElement 6 auslesen und den 'Wert' als Dateiname für die (1.) neue Datei verwenden
    Neue Datei abspeichern
    ArrayElemente 1-6 löschen
    WEnd

    Exit

    Mein Problem ist das mit dem Array - ich denke mal da kommt UBound zum Einsatz ..... ????

    So nun hoffe ich mal euf den ein oder anderen Tip / Ansatz der mir hilft
    (das wäre jedenfalls SUPER)

    Danke schon einmal im voraus
    mfg
    ugt100

  • Leere Elemente aus einem (Ergebnis) Array löschen

    • ugt100
    • 26. Februar 2013 um 13:11

    Hi All,

    super und vielen Dank für die klasse Unterstützung.
    Ich habe das mit dem ArraySearch soweit umgesetzt und es funzt soweit.
    Die zweite Lösung von Mars habe ich auch getestet, mangels Masse (sprich zu grossen Unterschiede) kann ich zum Tempo nichts sagen.

    Nochmals DANKE

    Gruss
    UGT100

  • Leere Elemente aus einem (Ergebnis) Array löschen

    • ugt100
    • 26. Februar 2013 um 00:05

    Guten Abend,
    leider komme ich nicht so recht weiter, daher wende ich mich 'vertrauensvoll' hier ans Forum, mit der Hoffnung auf einen Tip ...

    Problem:
    Nach einem rekursiven FileSync zw. zwei Diretories (_RecursiveFileListToArray) und dem Check auf den Sync (mache ich mitttels Vgl. (Verz)Array 1 gegen (Verz)Array 2 ...)
    erhalte ich in dem(Ergebnis) Array je nach Konstellation leere Elemente (Zeilen), was für die Weitergabe bzw.-verarbeitung unschön ist.
    Diese leeren Elemente erzeugen sich immer dann, wenn gefiltert nach file extensions gesucht wird, die auf der einen Seite nicht vorhanden sind.

    Frage:
    Wie lösche ich im Ergebnis (Array) die leeren Elemente ???

    Anm:
    Das Ergebnis Array sieht wie folgt aus (Struktur)

    Row Col0 Col1 Col2 Col3 Col4
    [0] 2 path1 path2 diff
    [1] only on p1
    [2] file only on p2

    nun sollte Element [1] - weil leer - noch entfernt werden


    Danke
    Gruss
    UGT100

  • Rekursive File/Dateisuche mit Filter setzen

    • ugt100
    • 19. Februar 2013 um 13:01

    Hi Errorkid,

    Danke für die 'Blumen' (naja ich denke halt, wenn man was will sollte man es auch ordentlich beschreiben oder ???)

    Tja seltsame Geschichte.
    Klar ist wenn die Suchje auf ein Verzeichnis gemacht wird was nicht existent ist, das dadurch das entsprechende Array nicht erzeugt werden kann und dann das Script auf einen Fehler läuft.

    Dann werde ich im nächsten Step mal den Rechner wechseln und / oder eine portable Version auf einer anderen Maschine testen.
    (denn an den RegEx Filtern kann es ja eher nicht liegen). Vllt ist das auch bedingt durch Win8 .... schaun mer mal ....


    DANKE für die prompte Antwort

  • Rekursive File/Dateisuche mit Filter setzen

    • ugt100
    • 19. Februar 2013 um 11:51

    Hallo zusammen,
    ich drehe mich (mal wieder) im Kreis und finde keine Erklärung zu meinem Effekt/Fehler. Daher wende ich mich hier ans Forum und hoffe auf einen Tip oder gar eine Lösung.

    Beschreibung / Ziel des Ganzen:
    - Rekursiver Vergleich/Suche von Files über zwei beliebig zu wählende Startpunkte
    Tools:
    - UDF - _RecursiveFileListToArray()
    Ablauf (schematisch):
    - Start des Scripts – öffnet GUI zur Auswahl der StartVerzeichnisse und ggf. Filter
    - Suche läuft
    - Ergebnisanzeige mittels _ArrayDispaly()
    Ergebnis:
    Die Differenz der gefundenen Dateien (je nach gesetztem Filter).
    Im Ergebnis Array wird in einer Spalte der Name der Datei aufgeführt und in einer zweiten Spalte in welchem Verzeichnis sich das File befindet

    Problem:
    wie oben beschrieben funktioniert das auch soweit. Die Suche funktioniert mit allen möglichen Filtern (von *.*, über eigene nicht in der Listbox aufgeführte Filter).
    Das Problem taucht nur beim Einsatz genau eines Filters auf – dem für die Excel Files auf (der Letzte der Liste) - WARUM - ich sehe bzw. verstehe es nicht !
    Die Filter (RegEx Format) sehen wie folgt aus:
    .+\.(txt|TXT) - OK
    .+\.(doc|DOC|docx|DOCX) ) - OK
    .+\.(nsf|NSF|ntf|NTF) ) - OK
    .+\.(xls|XLS|xlsx|XLSX|xlsm|XLSM) - FEHLERHAFTER FILTER !

    Fehler:
    (Der Abbruch wird im Script an folgender Stelle erzeugt (Zeile 124))
    ..\cde_file_search_compare_testGUI.au3 (124) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
    $aResult[$iNew][0] = $aReturn2[$i] ^ ERROR ->11:19:38 AutoIT3.exe ended.rc:1

    ScriptSnip Fehlerstelle:
    ;~ _ArrayDisplay($aResult)
    For $i = 1 To $aReturn2[0]
    $aResult[$iNew][0] = $aReturn2[$i]
    $aResult[$iNew][3] = "nur auf '" & $cde_Verz2 & "' vorhanden" ;Kenzeichnung dass Datei nur in 2
    $iNew += 1
    Next
    $aResult[0][0] = $iNew - 1
    ReDim $aResult[$iNew][4]
    $aResult[0][1] = $cde_Verz1
    $aResult[0][2] = $cde_Verz2
    $aResult[0][3] = "Differenz"
    Return $aResult
    EndFunc ;==>_Check
    (Anm.: Natürlich sind in den Testverzeichnissen entsprechende Files (in beliebiger Kombination) vorgehalten.)

    Script:

    [autoit]


    #include <Array.au3>
    #include <ButtonConstants.au3>
    #include <Date.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    Opt("GUIDataSeparatorChar", "¦")

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

    $pattern1 = "*.txt"
    $pattern2 = "*.doc | docx"
    $pattern3 = "*.nsf | ntf"
    $pattern4 = "*.xls | xlsx | xlsm"

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

    ;~ '.+\.(txt|TXT)'
    ;~ '.+\.(doc|DOC|docx|DOCX)'
    ;~ '.+\.(xls|XLS|xlsx|XLSX|xlsm|XLSM)'
    ;~ '.+\.(nsf|NSF|ntf|NTF)'

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

    $Form1 = GUICreate("DirSync / Compare", 317, 232, 471, 156)
    $LabelVZ1 = GUICtrlCreateLabel("Set Directory 1: ", 24, 48, 93, 20)
    GUICtrlSetFont(-1, 9, 800, 0, "Century Gothic")
    $LabelVz2 = GUICtrlCreateLabel("Set Directory 2: ", 24, 80, 93, 20)
    GUICtrlSetFont(-1, 9, 800, 0, "Century Gothic")
    $InputVz1 = GUICtrlCreateInput("d:\test1", 120, 48, 153, 21)
    $InputVz2 = GUICtrlCreateInput("d:\test2", 120, 80, 153, 21)
    ;~ $InputPattern = GUICtrlCreateInput("*.*", 120, 120, 153, 21)
    $LabelFilter = GUICtrlCreateLabel("Set Filter:", 43, 126, 54, 20)
    GUICtrlSetFont(-1, 9, 800, 0, "Century Gothic")

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

    $FilterCombo = GUICtrlCreateCombo("*.*", 120, 120, 153, 21)
    GUICtrlSetFont(-1, 9, 400, 0, "Century Gothic")
    GUICtrlSetData(-1, $pattern1 & '¦' & $pattern2 & '¦' & $pattern3 & '¦' & $pattern4) ; add other item and set a new default
    GUICtrlSetFont(-1, 8, 800, 0, "Century Gothic")

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

    $GroupEingaben1 = GUICtrlCreateGroup(" Recursive Search - Parameter ", 8, 16, 289, 193)
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
    $Button1OK = GUICtrlCreateButton("Start", 40, 168, 97, 25)
    $Button2Cancel = GUICtrlCreateButton("Cancel", 176, 168, 97, 25)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $Button1OK
    $cde_Verz1 = (GUIctrlread($InputVz1))
    $cde_Verz2 = (GUIctrlread($InputVz2))
    $cde_FileExt = (GUIctrlread($FilterCombo))
    If $cde_FileExt = "*.txt" Then
    $cde_FileExtStr = ".+\.(txt|TXT)"
    ElseIf $cde_FileExt = "*.doc | docx" Then
    $cde_FileExtStr = ".+\.(doc|DOC|docx|DOCX)"
    ElseIf $cde_FileExt = "*.xls | xlsx | xlsm" Then
    ;~ $cde_FileExtStr = ".+\.(xls|xlsx)"
    $cde_FileExtStr = ".+\.(xls|xlsx|XLS|XLSX)"
    ElseIf $cde_FileExt = "*.nsf | ntf" Then
    $cde_FileExtStr = ".+\.(nsf|NSF|ntf|NTF)"
    ElseIf $cde_FileExt = "*.*" Then
    $cde_FileExtStr = ""
    Else
    MsgBox(0,"",$cde_FileExt)
    $cde_FileExt = StringReplace($cde_FileExt,'*.', '.+\.')
    MsgBox(0,"",$cde_FileExt)
    $cde_FileExtStr = $cde_FileExt
    EndIf

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

    If $cde_FileExtStr="" Then
    MsgBox(0,"","Vz1 : " & $cde_Verz1 & @CRLF & "Vz2 : " & $cde_Verz2 & @CRLF & "Filter : <NUL>")
    Else
    MsgBox(0,"","Vz1 : " & $cde_Verz1 & @CRLF & "Vz2 : " & $cde_Verz2 & @CRLF & "Filter : " & $cde_FileExtStr)
    EndIf

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

    $aChecked = _Check($cde_Verz1, $cde_Verz2, 0)
    If $cde_FileExtStr = "" Then
    _ArrayDisplay($aChecked,"Datei Abgleich - Filter: [*.*]")
    Else
    _ArrayDisplay($aChecked,"Datei Abgleich - Filter: [" & $cde_FileExtStr & "]")
    EndIf

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

    Case $Button2Cancel
    ExitLoop
    Case $GUI_EVENT_CLOSE

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

    Exit

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

    EndSwitch
    WEnd

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

    Func _Check($cde_Verz1, $cde_Verz2, $iDays)
    ;~ $aReturn1 = _RecursiveFileListToArray($cde_Verz1, '.+\.(txt|TXT|jpg)', 1, 1, @CRLF, $cde_Verz1) ; Alle Dateien im ausgewählten Ordner und Unterordnern)
    ;~ $aReturn2 = _RecursiveFileListToArray($cde_Verz2, '.+\.(txt|TXT|jpg)', 1, 1, @CRLF, $cde_Verz2) ; Alle Dateien im ausgewählten Ordner und Unterordnern)

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

    $aReturn1 = _RecursiveFileListToArray($cde_Verz1, $cde_FileExtStr, 1, 1, @CRLF, $cde_Verz1) ; Alle Dateien im ausgewählten Ordner und Unterordnern)
    $aReturn2 = _RecursiveFileListToArray($cde_Verz2, $cde_FileExtStr, 1, 1, @CRLF, $cde_Verz2) ; Alle Dateien im ausgewählten Ordner und Unterordnern)
    Local $aResult[$aReturn1[0] + $aReturn2[0]][4]
    $iNew = 1

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

    _ArrayDisplay($aReturn1,"Array Vrz1")
    _ArrayDisplay($aReturn2,"Array Vrz2")

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

    For $i = 1 To $aReturn1[0]
    $iPos = _ArraySearch($aReturn2, $aReturn1[$i])
    If $iPos > -1 Then ;datei existiert auch um 2. Verzeichnis
    _ArrayDelete($aReturn2, $iPos) ;damit in $aReturn2 nur Dateien übrigbleiben die nicht i $aReturn1 sind
    $aReturn2[0] -= 1
    Else
    $aResult[$iNew][0] = $aReturn1[$i]
    $aResult[$iNew][2] = ''
    $aResult[$iNew][3] = "nur auf '" & $cde_Verz1 & "' vorhanden" ;Kenzeichnung dass Datei nur in 1
    $iNew += 1
    EndIf
    Next
    ;~ _ArrayDisplay($aResult)
    For $i = 1 To $aReturn2[0]
    $aResult[$iNew][0] = $aReturn2[$i]
    $aResult[$iNew][3] = "nur auf '" & $cde_Verz2 & "' vorhanden" ;Kenzeichnung dass Datei nur in 2
    $iNew += 1
    Next
    $aResult[0][0] = $iNew - 1
    ReDim $aResult[$iNew][4]
    $aResult[0][1] = $cde_Verz1
    $aResult[0][2] = $cde_Verz2
    $aResult[0][3] = "Differenz"
    Return $aResult
    EndFunc ;==>_Check

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

    ;===============================================================================
    ; Function Name: _RecursiveFileListToArray($sPath, $sPattern, $iFlag = 0, $iFormat = 1, $sDelim = @CRLF)
    ; Description:: gibt Verzeichnisse und/oder Dateien (rekursiv) zurück, die
    ; einem RegExp-Pattern entsprechen
    ; Parameter(s): $sPath = Startverzeichnis
    ; $sPattern = ein beliebiges RexExp-Pattern für die Auswahl
    ; $iFlag = Auswahl
    ; 0 = Dateien & Verzeichnisse
    ; 1 = nur Dateien
    ; 2 = nur Verzeichnisse
    ; $iFormat = Rückgabeformat
    ; 0 = String
    ; 1 = Array mit [0] = Anzahl
    ; 2 = Nullbasiertes Array
    ; $sDelim = Trennzeichen für die String-Rückgabe
    ; Requirement(s): AutoIt 3.3.0.0
    ; Return Value(s): Array/String mit den gefundenen Dateien/Verzeichnissen
    ; Author(s): Oscar (http://www.autoit.de)
    ; Anregungen von: bernd670 (http://www.autoit.de)
    ;modified: autoBert um den ursprünglich übergebenen Ordner wegzulassen
    ;===============================================================================

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

    ;~ Pattern zum Filtern - cde ^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w ]*))+\.(nsf|NSF|ntf|NTF)$
    ;~ ^([a-zA-z]:((\\([-*\.*\w+\s+\d+]+)|(\w+)\\)+)(\w+.nsf)|(\w+.NSF)|(\w+.ntf)|(\w+.NTF))$
    ;~ .+\.(nsf|ntf)

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

    Func _RecursiveFileListToArray($sPath, $sPattern, $iFlag = 0, $iFormat = 1, $sDelim = @CRLF, $sExlude = '')
    Local $hSearch, $sFile, $sReturn = ''
    If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
    $hSearch = FileFindFirstFile($sPath & '*.*')
    If @error Or $hSearch = -1 Then Return SetError(1, 0, $sReturn)
    While True
    $sFile = FileFindNextFile($hSearch)
    If @error Then ExitLoop
    If StringInStr(FileGetAttrib($sPath & $sFile), 'D') Then
    If StringRegExp($sPath & $sFile, $sPattern) And ($iFlag = 0 Or $iFlag = 2) Then $sReturn &= $sPath & $sFile & '\' & $sDelim
    $sReturn &= _RecursiveFileListToArray($sPath & $sFile & '\', $sPattern, $iFlag, 0, $sDelim, $sExlude)
    ContinueLoop
    EndIf
    If StringRegExp($sFile, $sPattern) And ($iFlag = 0 Or $iFlag = 1) Then $sReturn &= $sPath & $sFile & $sDelim
    WEnd
    FileClose($hSearch)
    $sReturn = StringReplace($sReturn, $sExlude, "")
    If $iFormat Then Return StringSplit(StringTrimRight($sReturn, StringLen($sDelim)), $sDelim, $iFormat)
    Return $sReturn
    EndFunc ;==>_RecursiveFileListToArray

    [/autoit]

    Jetzt hoffe ich mal auf das Wissen hier und bedanke mich schon mal

    Gruss
    ugt100

  • Listbox Einträge die in sich das '|' (pipe) Zeichen beinhalten ...

    • ugt100
    • 15. Februar 2013 um 09:56

    Hi Veronesi,

    supi ... das ist einfach und löst die Sache ....
    (Asche auf mein Haupt bezüglich der Unkenntnis der Optionen)

    DANKE

    Gruss

    Chris

    :rock::)

  • Listbox Einträge die in sich das '|' (pipe) Zeichen beinhalten ...

    • ugt100
    • 15. Februar 2013 um 09:43

    Hallo zusammen und einen guten Morgen,

    ich stehe im Augenblick ein wenig ratlos mit meinem Problem in der Gegend.
    Ich finde keine gescheite Lösung für das 'Problem', daher meine Anfrage:

    Wie gelingt es mir Listbox Einträge die in sich das '|' (pipe) Zeichen beinhalten zu erzeugen, also in etwa so etwas: ".+\.(txt|TXT)".

    Habe mal ein Bsp-Script eingehängt

    Spoiler anzeigen


    #include <GUIConstantsEx.au3>
    cdeListbox()
    Func cdeListbox()
    Local $msg
    GUICreate("My GUI combo") ; will create a dialog box that when displayed is centered

    $pattern = ".+\.(nsf|ntf|NSF|NTF)"


    GUICtrlCreateCombo("*.*", 10, 10) ; create first item
    GUICtrlSetData(-1, $pattern & '|item1|item2|item3', 'item3') ; add other item and set a new default

    GUISetState()

    ; Run the GUI until the dialog is closed
    While 1
    $msg = GUIGetMsg()

    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd
    EndFunc ;==>cdeListbox


    Danke schon mal im voraus

    mfg
    UGT100

  • Fehlermeldung seit Umstieg auf WINDOWS 8 64Bit

    • ugt100
    • 17. Januar 2013 um 10:55

    Hallo Misterspeed,

    sorry für die etwas verspätete Antwort bzw. 'Report' den ich versprochen hatte ....

    Also das Problem ist gefixt und war im Nachgang betrachtet total simpel.
    Letztlich war der Effekt (Arrayvariablenfehler) dadurch bedingt, daß nach dem Umstieg auf Win8 (von Win7 kommend) auch ein Sprachenwechsel stattfand. Soll heissen
    das Win7 war ENGLISH und das WIN8 ist GERMAN. Somit ändert sich auch das robocopy Log in seinem Aufbau etwas - und das verursachte den 'Schmerz'.
    ich habe das jetzt angepasst und gut ist.

    DANKE nochmals für die Unterstützung.

    :rock::thumbup:

  • Fehlermeldung seit Umstieg auf WINDOWS 8 64Bit

    • ugt100
    • 4. Januar 2013 um 19:29

    Hallo Misterspeed,

    Danke schon mal für Deine prompte Antwort.
    Genau das was Du vorschlägst, habe ich mir auch vorgenommen (hoffe das ich es morgen schaffe und testen kann bzw. debuggen kann).
    Der Fehler kann eigentlich nur bei dieser Aktion anfallen, da alle anderen Schritte erfolgreich abgearbeitet werden (so z.B. das Schreiben des Timestamps in ein dafür vorgesehenes HTML File,
    welches dann auf einer Intranetseite veröffentlicht wird, oder auch die Checks auf offene Files usw...).
    Ich wundere mich nur über die Änderung als Solches, da - zumindest aus meinem Verständnis heraus - sich nichts geändert hat, wenn man mal von dem OS Wechsel (von Win7 auf Win8) absieht.

    Mal schauen - bei Interesse schreibe ich gerne von meinen Ergebnissen.

    mfg
    ugt100
    ugt100

  • Fehlermeldung seit Umstieg auf WINDOWS 8 64Bit

    • ugt100
    • 3. Januar 2013 um 23:20

    Guten Abend zusammen,

    ich habe da mal eine Frage an das Forum hier.

    Ich habe seit dem Umstieg auf Windows 8 bei meinem Backup Script den Effekt, dass eine Fehlermeldung zum Ende des Scripts auftaucht.

    Vorgeschichte:
    Das Script habe ich unter Win7 selbst 'gebaut'. Im Groben passiert folgfendes:
    Diverse Checks auf offene Dateine werden durchgefüht und ggf. geschlossen und wegkopiert.
    Ein Netzwerklaufwerk wird dismountet und letztlich ein Backup mittels eingebundenem ROBOCOPY auf einen externen Datenträger ausgeführt.
    Die letzte Aktion besteht darin, das robocopy log teilweise auszulesen und als Zusammenfassung in einer Messagebox anzuzeigen.
    (Anm: Auf der alten Win 7 32Bit Maschine funktioniert alles einwandfrei)

    Problem:
    Bei der Anzeige bzw. dem Berechnen der Messagebox kommt es jetzt zu der folgenden Fehlermeldung:

    Line 5762 (File "D:\.....")
    Error: Array variable has incorrect number of subscripts or subscript dimension range exceeded.

    Weiss ggf. jemand etwas dazu / kann es sein, dass eine Definition oder Parameter w/WIN8 64 Bit hinzugefügt werden muss ?

    Vielen Dank schon einmal im voraus
    mfg
    ugt100

    Zur Sicherheit hier der Script Snip dazu...

    Spoiler anzeigen


    x
    $file = FileOpen($cdeLogFile, 0)

    ;Check if file opened for reading OK
    If $file = -1 Then
    MsgBox(0, "Error", "Datei kann nicht geöffnet werden.")
    Exit
    EndIf

    ; File Actions
    ; count lines of log and calculate 10 lines up
    ; read 6th line for date (start) purposes + trim, read last line for date (end) purposes + trim
    ; calculate duration of the Script (Func _YourTimeStamp)

    $cdeCountLines = _FileCountLines($cdeLogFile)
    $cdeLast10Lines = $cdeCountLines - 10

    $cdeDateStart = FileReadLine($file,6)
    $cdeDateStart =StringMid($cdeDateStart, 13, 25)

    $cdeDateEnd = FileReadLine($file,-1)
    $cdeDateEnd = StringMid($cdeDateEnd, 12, 25)

    $cdeRunTime = "Duration : " & _DateDiff( 's',_YourTimeStamp($cdeDateStart), _YourTimeStamp($cdeDateEnd)) & " [sec]"
    FileClose($file)

    ;Array Actions (read log to array, create new array containing the last 11 lines)
    Local $aNewRecords[1]

    ;Delete Temp-File
    FileDelete(@Scriptdir & "\temp.txt")


    ;Open RobocopyLog and create Temp-File
    If Not _FileReadToArray($cdeLogFile, $aRecords) Then
    MsgBox(4096, "Fehler", "Fehler beim Einlesen der Datei in das Array Fehler:" & @error)
    Exit
    EndIf


    For $x = $cdeLast10Lines To $aRecords[0]
    _ArrayAdd($aNewRecords,StringStripWS($aRecords[$x], 3))
    _FileWriteFromArray(@Scriptdir & "\temp.txt",$aNewRecords)
    Next


    ;Adjust the file format
    _FileWriteToLine(@Scriptdir & "\temp.txt", 2," Total Copied Skipped Mismatch FAILED Extras", 1)
    FileClose(@Scriptdir & "\temp.txt")

    $cdeLine1 = FileReadLine(@Scriptdir & "\temp.txt", 1)
    $cdeLine2 = FileReadLine(@Scriptdir & "\temp.txt", 2)

    $cdeLine3 = FileReadLine(@Scriptdir & "\temp.txt", 3)
    $cdeLine3b = StringStripWS($cdeLine3, 4)
    $cdeLine3b = StringReplace($cdeLine3b, "Dirs : " & @TAB, "Dirs : ")
    $cdeLine3b = StringReplace($cdeLine3b, " ", @TAB)

    $cdeLine4 = FileReadLine(@Scriptdir & "\temp.txt", 4)
    $cdeLine4b = StringStripWS($cdeLine4, 4)
    $cdeLine4b = StringReplace($cdeLine4b, " ", @TAB)

    $cdeLine5 = FileReadLine(@Scriptdir & "\temp.txt", 5)
    $cdeLine5b = StringRegExpReplace($cdeLine5, "[m]", "")
    $cdeLine5b = StringRegExpReplace($cdeLine5b, "[g]", "")
    $cdeLine5b = StringRegExpReplace($cdeLine5b, "[k]", "")
    $cdeLine5b = StringStripWS($cdeLine5b, 4)
    $cdeLine5b = StringReplace($cdeLine5b, " ", @TAB)

    $cdeLine9 = FileReadLine(@Scriptdir & "\temp.txt", 9)
    $cdeLine9b = StringStripWS($cdeLine9, 4)
    $cdeLine9b = StringReplace($cdeLine9b, "Speed :", "Speed :" )
    $cdeLine9b = StringReplace($cdeLine9b, ":", ": " )

    $cdeLine10 = FileReadLine(@Scriptdir & "\temp.txt", 10) & @CRLF
    $cdeLine10b = StringStripWS($cdeLine10, 4)
    $cdeLine10b = StringReplace($cdeLine10b, "Speed :", "Speed : " & @TAB)

    $cdeLine11 = "Started : " & $cdeDateStart
    $cdeLine12 = "Ended : " & $cdeDateEnd
    $cdeLine13 = $cdeRunTime

    MsgBox(0,"Robocopy Log-Summary - " & $cdedateStart, $cdeLine2 & @CRLF & $cdeLine3b & @CRLF & $cdeLine4b & _
    @CRLF & $cdeLine5b & $cdeLine8 & @CRLF & $cdeLine9b & @CRLF & $cdeLine10b & @CRLF & $cdeLine11 &@CRLF & $cdeLine12 & @CRLF & $cdeLine13)
    ; $cdeLine1 & @CRLF & & @CRLF & $cdeLine6 & @CRLF & $cdeLine7

    FileDelete(@Scriptdir & "\temp.txt")
    WinActivate("Robocopy Log-Summary -", "")
    Exit


    ;Convert Date/Time of Start and End of Script
    Func _YourTimeStamp($sTimeStamp)
    Local $aTimeStamp = StringSplit($sTimeStamp, " :", 2)
    Local $sMon = ""
    Switch $aTimeStamp[1]
    Case "Jan"
    $sMon = "01"
    Case "Feb"
    $sMon = "02"
    Case "Mar"
    $sMon = "03"
    Case "Apr"
    $sMon = "04"
    Case "May"
    $sMon = "05"
    Case "Jun"
    $sMon = "06"
    Case "Jul"
    $sMon = "07"
    Case "Aug"
    $sMon = "08"
    Case "Sep"
    $sMon = "09"
    Case "Oct"
    $sMon = "10"
    Case "Nov"
    $sMon = "11"
    Case "Dec"
    $sMon = "12"
    EndSwitch
    Return StringFormat("%s/%s/%s %s:%s:%s", $aTimeStamp[6], $sMon, $aTimeStamp[2], $aTimeStamp[3], $aTimeStamp[4], $aTimeStamp[5])
    EndFunc ;~ ==>_YourTimeStamp4

  • Prüfen ob dedizierte Excel Tabelle (neben gleichzeitig anderen geöffneten Excel Dateien) geöffnet ist, wenn ja save and close

    • ugt100
    • 13. September 2012 um 14:18

    Hallo BugFix,

    Danke für den Tip ...
    Werde dies testen und berichten.
    Allerdings ist mir letztlich nicht so klar, was das eigentliche Problem dieser Aktion ist.
    Denn wenn ich im Windows Taskmanager unter den Appl. schaue, ist dort die Datei zu sehen (wenn diese geöffnet vorliegt).
    Somit weiss Windows doch davon ....

    Aber erstmal egal - ich werde das Testen!

    mfg
    Chris

  • Prüfen ob dedizierte Excel Tabelle (neben gleichzeitig anderen geöffneten Excel Dateien) geöffnet ist, wenn ja save and close

    • ugt100
    • 12. September 2012 um 22:21

    Hallo und einen guten Abend zusammen,

    wie beschrieben im Subjekt, habe ich das folgende Problem:

    Problembeschriebung
    Im Zuge einer automatisierten Sicherung, muss geprüft werden, ob einen Excel Tabelle (hh.xlsx in einem bestimmten Verzeichnis) lokal geöffnet ist.
    Wenn ja -
    dann soll die Datei mit Save & Close geschlossen werden, damit die Sicherung erfolgreich durchgeführt werden kann
    (ansonsten ist die Datei im Zugriff (open) und kann nicht gesichert werden)
    Wenn nein -
    dann kann 'direkt' gesichert werden :)

    Mein Ansatz

    [autoit]


    ....
    #include <Excel.au3>; ? brauche ich dieses INCLUDE ?
    DIM $cdeXLSX1
    ....
    $cdeXLSX1 = IniRead(@ScriptDir & "\Backup.cfg","Excel", "WS1", "Not Found"); Config Datei - dort ist die Datei bzw. der Dateiname hinterlegt
    ....
    If WinExists("Microsoft Excel - " & $cdeXLSX1) Then
    Local $cdeXLSX1
    Local $oExcel = ObjGet("","Excel.Application")
    $oExcel.Workbooks($cdeXLSX1).Activate
    $oExcel.Workbooks($cdeXLSX1).Save
    $oExcel.Workbooks($cdeXLSX1).Close
    Sleep(2000)
    EndIf
    ...

    [/autoit]

    Leider funktioniert das so nicht ... und ich verstehe nicht warum ???

    Frage:
    Was stimmt in der Logik nicht ?
    Gibt es einen anderen sinnvollen Ansatz ?


    Ich hoffe, dass ich mich zu sehr 'blamiere'

    DANKE
    Gruss Chris ;)

  • Aufruf von Robocopy Syntax Problem

    • ugt100
    • 15. November 2011 um 15:39

    Offensichtlich hatte sich da ein kleiner TYPO eingeschlichen. Ob das im Script oder nur durch das Posten passiert ist, kann ich jetzt so nicht mehr nachvollziehen.
    Sei es drum, letztlich hat mich Dein Hinweis auf die Lösung gebracht. ....


    MERCI vielmals

    mfg
    ugt100

  • Aufruf von Robocopy Syntax Problem

    • ugt100
    • 15. November 2011 um 12:04

    Hallo Autobert,

    danke für die 'Lösung'. Es scheint tatsächlich am @ComSpec zu liegen.
    Kaum nehme ich das raus - schon funktioniert alles so wie gewünscht
    (nicht ganz logisch, da ich mich Deiner Meinung anschließe und sagen würde es schadet nicht, aber hier dann wohl doch)

    Egal - jetzt funktioniert das alles


    Vielen DANK

    mfg
    ugt100 :thumbup:

  • Aufruf von Robocopy Syntax Problem

    • ugt100
    • 15. November 2011 um 10:22

    Guten Morgen zusammen,

    nachdem ich mich nun schon gestern nachmittag mit meinem Problem herumgeschlagen habe (und leider zu keiner Lösung gekommen bin),
    möchte ich hier im Forum mal nachfragen (für die Profis wahrscheinlich ein Klacks ...)

    Also mein Problem ist - aus meinem Verständnis heraus - der richtige Syntax:

    Ich habe ein Script welches mir meine 'Bewegungsdaten' vom Laptop auf
    a) eine externe FP zeitgesteuert sichert
    und
    b) zeitversetzt das Ganze auch nochmal ins LAN (Funktioniert alles prima - soweit).

    Um flexibel zu bleiben, was das BKP-LW angeht, habe ich eine Mimik implementiert, die nach einer spez. Datei sucht
    und bei Erfolg das entsprechende LW als BKP-LW nutzt (Identifizierung ... usw... funktioniert ebenfalls).

    Nur den 'geänderten' Aufruf von ROBOCOPY bekomme ich nicht zum Fliegen.

    Hoffentlich hat jemand eine Idee / Lösung

    [autoit]


    ; alter (funktionstüchtiger) Aufruf von robocopy (fest vorgegebenes BKP-LW) <---- FUNKTIONIERT / OK
    RunWait(@ComSpec & " /c " & @SystemDir & '\robocopy.exe D:\Laptop H:\Laptop /MIR /XD D:\Laptop\Recycler D:\Laptop\Daten\Tools\Portable_Firefox\Profilordner\Cache d:\Laptop\Daten\Tools\google_chrom_portable\Profil\Default /R:2 /W:2 /LOG:bkp.log /NS /NC /TEE"')

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

    ; neuer Aufruf von robocopy (mit jeweils ermitteltem BKP-LW) <---- NICHT OK
    RunWait(@ComSpec & " /c " & @SystemDir & "\robocopy.exe D:\Laptop" & $cdeDrive & "\Laptop /MIR /XD D:\Laptop\Recycler D:\Laptop\Daten\Tools\Portable_Firefox\Profilordner\Cache d:\Laptop\Daten\Tools\google_chrom_portable\Profil\Default /R:2 /W:2 /LOG:bkp.log /NS /NC /TEE")

    [/autoit]


    Dnake schon mal im voraus

    mfg
    ugt100

  • Path Variable erweitern ....

    • ugt100
    • 22. September 2011 um 11:05

    Hi Chip,

    sorry für die 'delayed' Antwort.

    Ich mache es so - alles gut.

    DANKE

    mfg
    ugt100 :thumbup:

  • Path Variable erweitern ....

    • ugt100
    • 18. September 2011 um 21:09

    Einen schönen guten Abend,

    ich habe da (mal wieder) eine 'leichte' Frage an die Profis.....

    Ich möchte (aufgrund einer SW-Installation) die aktuelle PATH-Variable ("HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment\Path) eines Rechner um einen Pfad erweitern/addieren.


    Bsp.:
    1.) Stand nach des Rechners (Minimum) der Windows 7 Installation
    %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\

    2.) geforderte Erweiterung
    c:\program files\xxxx

    3.) Ergebnis
    %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;c:\program files\xxxx


    Kann ich dies erreichen ohne den Reg-Eintrag im ersten Schritt zu löschen und dann wieder (mit der Erweiterung ) neu zu schreiben.
    (da diese Aktion für die Anzahl von >500 PC durchzuführen ist + die jeweilige Installation des Rechners verschieden sein kann, wäre das ADDIEREN das Einfachste)


    Danke schon mal im voraus

    mfg
    ugt100

  • Umwandeln / Einlesen zweier Strings die dann als 'Uhrzeit' weiterverarbeitet werden können

    • ugt100
    • 25. August 2011 um 11:32

    Hallo Funkey,

    danke für die schnelle Antwort. Super gut.
    (Im Prinzip dachte ich mir das schon, dass der String auseinander genommen und neu sortiert wieder zusammengesetzt werden muss)

    Frage am Rande:
    Sollte der markierte Aufruf des Array Elementes hier nicht das 3. Element des Arrays (und nicht das 2.) ausgeben ?
    Return StringFormat("%s/%s/%s %s:%s:%s", $aTimeStamp[6], $sMon, $aTimeStamp[2], $aTimeStamp[2], $aTimeStamp[4], $aTimeStamp[5])

    Nochmals DANKE

    mfg
    ugt100 :rock::thumbup:

  • Umwandeln / Einlesen zweier Strings die dann als 'Uhrzeit' weiterverarbeitet werden können

    • ugt100
    • 25. August 2011 um 10:14

    Guten Morgen,

    habe da mal wieder ein kleines Problem (und finde leider keinen Einstieg / Lösungsansatz).
    Wahrscheinlich nichts Dolles, aber vielleicht kann ja einer der Profis mir eine Idee oder gar Lösung aufzeigen.

    Wie im Subjekt beschrieben habe ich 2 Strings (aus einem textbasierten Log) die ein Datum darstellen - Timestamp Start des Scriptes und Timestamp Ende des Scripts. Ich benötige jetzt die Laufzeit des Scriptes, also Timestamp Ende - Timestamp Start.

    Das Problem ist die Form der gegebenen Datumsangaben.
    Timestamp Start sieht wie folgt aus --- Wed Aug 17 16:05:37 2011
    Timestamp Ende sieht wie folgt aus --- Wed Aug 17 16:07:12 2011

    Wie das im Prinzip geht, ist mir schon klar:
    $x = " Dauer: " & _DateDiff( 's',"2011/08/17 16:05:37", "2011/08/17 16:07:12") & " [sec]"
    Ergebnis sollte also letztlich 95 [sec] sein ...


    Danke schon mal im voraus

    mfg
    ugt100 :wacko:

  • Formatieren von Text welches aus einem Array übernommen wird

    • ugt100
    • 15. August 2011 um 12:55

    Haool Misterspeed,

    das Log ist nur das Summary des Robocopy Durchlaufs ... und sieht so aus:


    Total Copied Skipped Mismatch FAILED Extras
    Dirs : 3631 1192 2439 0 0 17
    Files : 23590 2529 21060 0 1 125
    Bytes : 15.226 g 1.514 g 13.712 g 0 0 2.73 m
    Times : 0:06:01 0:04:41 0:00:04 0:01:16

    Speed : 5783924 Bytes/sec.
    Speed : 330.958 MegaBytes/min.

    Ended : Mon Aug 15 10:51:46 2011

    Wenn Du Dir das mal in einer MsgBox anzeigen lässt oder in Winword, wirst Du sehen wie 'verschoben' das (leider).
    Ich werde mal sehen ob, das mit den Tab's funktioniert. Muss halt vorher die störenden Leerzeichen entfernen und durch jeweils ein Tab ersetzen.

    Danke schon mal für den Tip

    Gruss
    ugt100

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™