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

  • _Excel_BookAttach funktioniert in compilierter Form nicht (mehr)

    • ugt100
    • 16. März 2016 um 13:54

    Hallo water,

    ja das fehlt .... da die Dateien eigentlich immer geöffnet sind, wenn der Rechner hochläuft ....
    (Anm.: das Script also die au3 Datei funktioniert / die kompilierte exe Datei leider nicht)

    Mein Ziel ist es die beiden Dateien zu sichern (in die Cloud und lokal) und zwar vor dem Backup Start.
    Das Ganze macht aber dann nur Sinn wenn die Dateien tatsächlich geöffnet sind
    (dann bin ich sicher das der gute Mann seine Dateien bzw. den Stand der Dateien vor dem Backup gesichert bekommt)

    Wenn es hilft kann ich natürlich erst ein _Excel_open ins Script einbauen

    Danke schon mal

  • _Excel_BookAttach funktioniert in compilierter Form nicht (mehr)

    • ugt100
    • 16. März 2016 um 12:10

    Hallo liebe Gemeinde,
    nachdem ich mich jetzt in Summe schon mehrere Stunden mit dem Problem rumschlage, suche ich hier ggf. Rat.

    Wie im Titel beschrieben, handelt es sich um ein Exel / Autoit 'Issue'.

    Was mache ich:
    Script Function: New Backup procedure using Personal Backup software
    - Progressbar starten
    - Excel Object Attach, Run VB Macro, Save in Cloud + Local <----------- hier kommt dann der Fehler zumTragen aber nur in der exe Datei - im Script funzt alles
    - Start PB Software
    - Show Backup Log

    Wie gesagt das Script wird fehlerfrei ausgeführt / die kompilierte Version nicht

    Der Start des kompilierten Scripts erfolgt per Windows TaskScheduler durch einen Zeittrigger der die EXE Datei aufruft

    Hier FM die auftauchen
    Fehlermeldung 1:
    Error attaching to 'Https://.....X1.xlsm'
    @error = 1, @extended = -2147352570

    Fehlermeldung 2:
    Line 3419 (File .....cdePB_BkpNew.exe):
    Error: Variable must be of type "Object".


    mir fällt dazu leider nichte mehr ein - vllt wiee ja jemand weiter

    Danke schon einmal im voraus


    Hier das Script (anonymisiert)

    C
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Outfile_x64=cde_PB_bkpNew.exe
    #AutoIt3Wrapper_Compression=4
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <Excel.au3>
    #include <MsgBoxConstants.au3>
    
    
    #cs ----------------------------------------------------------------------------
    
    
    PRIVAT SCRIPT / PRIVAT PURPOSES ONLY
    
    
    AutoIt Version:    3.3.14.2
    Author:            Christoph Diener
    				   Phone:  +49 6196.76430-28
    				   E-Mail: christoph.diener@gmx.de
    				   WWW:    http://christophdiener@jimdo.com
    
    
    Created:           cde 15-03-2016
    Script Function:   New Backup procedure using Personal Backup software
    				   -	Progressbar
    				   -	Excel Object Attach, Run VB Macro, Save in Cloud + Local
    				   -	Start PB Software
    				   -	Show Backup Log
    #ce ----------------------------------------------------------------------------
    
    
    
    
    
    
    ;~ ProgressBar Start 2% / ProgressBar Steps = 20% (added 18.01.2013 'new progress bar' -cde-)
    ;~ Positioning the Progessbar in the lower right corner
    $x = @DesktopWidth - 350
    $y = @DesktopHeight - 200
    ProgressOn("Daily Backup ...               -cde-","Start ... ", "",$x, $y, 16)
    $i = 2
    ProgressSet($i,"...")
    
    
    ;~ Save Excel Workbook CDE_HaushaltsbuchNew.xlsm on SkyDrive & Local
    Local $oWorkbook = "X1.xlsm"
    Local $sWorkbook = "https://d.docs.live.net/xxxxxx/Dokumente/X1.xlsm"
    Local $sWorkbook1 = "d:\xxxxxx\X1.xlsm"
    
    
    $i = 20
    ProgressSet($i,"1/5 - Cloud save ---> "  & $oWorkbook)
    Sleep(500)
    
    
    
    
    ;~ WinActivate("x1xlsm - Excel")
    $oWorkbook = _Excel_BookAttach($oWorkbook, "filename")
    
    
    If @error Then MsgBox($MB_SYSTEMMODAL, "Backup -cde-", "Error attaching to '" & $sWorkbook & "'." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
    												   ;~ If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Backup -cde-", "Error attaching to '" & $sWorkbook & "'." & @CRLF & "@error = " & @error & ", @extended = " & @extended, 2)
    												   ;~ MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_BookAttach Example 2", "Search by 'filename':" & @CRLF & @CRLF & "Successfully attached to Workbook '" & $sWorkbook & "'." & @CRLF & @CRLF & "Value of cell A2: " & $oWorkbook.Activesheet.Range("A2").Value)
    
    
    ;~ Run VB Macro within Excel Application
    $oWorkbook.Application.Run("X1.xlsm!cdeSetCommentar")
    
    
    _Excel_BookSaveAs($oWorkbook, $sWorkbook,$xlOpenXMLWorkbookMacroEnabled, True)
    _Excel_BookSaveAs($oWorkbook, $sWorkbook1,$xlOpenXMLWorkbookMacroEnabled, True)
    
    
    If @error Then MsgBox($MB_SYSTEMMODAL, "Backup -cde-", "Error saving workbook to '" & $sWorkbook & "'." & @CRLF & "@error = " & @error & ", @extended = " & @extended, 2)
    ;~ 												   ;~ If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Backup -cde-", "Error saving workbook to '" & $sWorkbook & "'." & @CRLF & "@error = " & @error & ", @extended = " & @extended, 2)
    												   ;~ MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_BookSaveAs Example 1", "Workbook successfully saved as '" & $sWorkbook & "'.")d:\Laptop\Daten\Tools\Back4Sured:\Laptop\Daten\Tools\Back4Sure
    
    
    ;~ Save Excel WorkboX2.xlsm"
    Local $sWorkbook = "https://d.docs.live.net/xxxxxx/Dokumente/X2.xlsm"
    Local $sWorkbook1 = "d:\xxxxxx\2.xlsm"
    
    
    $i = 40
    ProgressSet($i,"2/5 - Cloud save ---> " & $oWorkbook )
    Sleep(500)
    
    
    $oWorkbook = _Excel_BookAttach($oWorkbook, "filename")
    
    
    If @error Then MsgBox($MB_SYSTEMMODAL, "Backup -cde-", "Error attaching to '" & $sWorkbook & "'." & @CRLF & "@error = " & @error & ", @extended = " & @extended, 2)
    												   ;~ If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Backup -cde-", "Error attaching to '" & $sWorkbook & "'." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
    												   ;~ MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_BookAttach Example 2", "Search by 'filename':" & @CRLF & @CRLF & "Successfully attached to Workbook '" & $sWorkbook & "'." & @CRLF & @CRLF & "Value of cell A2: " & $oWorkbook.Activesheet.Range("A2").Value)
    
    
    _Excel_BookSaveAs($oWorkbook, $sWorkbook,$xlOpenXMLWorkbookMacroEnabled, True)
    _Excel_BookSaveAs($oWorkbook, $sWorkbook1,$xlOpenXMLWorkbookMacroEnabled, True)
    
    
    
    
    If @error Then MsgBox($MB_SYSTEMMODAL, "Backup -cde-", "Error saving workbook to '" & $sWorkbook & "'." & @CRLF & "@error = " & @error & ", @extended = " & @extended, 2)
    												   ;~ If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Backup -cde-", "Error saving workbook to '" & $sWorkbook & "'." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
    												   ;~ MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_BookSaveAs Example 1", "Workbook successfully saved as '" & $sWorkbook & "'.")
    
    
    $i = 60
    ProgressSet($i,"3/5 - Copy personal setting files")
    Sleep(500)
    
    
    $i = 80
    ProgressSet($i,"4/5 - Start PersonalBackup")
    Sleep(500)
    
    
    ;~ Start Backup Software
    ShellExecuteWait("d:\yyyyyy\PersonalBackup\PersBackup.exe", "d:\yyyyyy\PersonalBackup\cdeDaily.buj /force /hide /log:2")
    
    
    ProgressSet(100, "5/5 - That's it - More informationen see 'Backup.Log'", " ")
    Sleep(2000)
    ProgressOff()
    
    
    ;~ Show Logfile
    Run(@WindowsDir & "\notepad.exe" & " " & "d:\yyyyyy\PersonalBackup\Persbackup.log")
    Sleep(1000)
    Send("^{END}")
    
    
    Exit
    
    
    
    
    ;~ MsgBox($MB_SYSTEMMODAL, "PersonalBackup -cde-", "Backup finished, please check Log", 2)
    ;~ KeepassSikSource = "d:\Laptop\Offline Files\10-InProcess\*.*x*"   -   passiert schon über pcloud sync
    Alles anzeigen
  • Viele StringReplace über ein und dasselbe Inputfenster laufen lassen

    • ugt100
    • 4. August 2015 um 14:08

    Hi Aspirin Junkie,

    Danke für die Liste .... es ist ja nicht so, dass ich das garnicht verstanden hätte, aber
    (?m) und \h* waren das grosse Unbekannte.
    (Du hattes mir ja schon mal einen RegEx gezeigt/genutzt der so Deine Aussage schon an schwarze Magie herankommt)

    Spoiler anzeigen


    $a_RemoveDirs = StringRegExp($S_ExcludeRAW, '(?:"(.+?))(?R)?(?:")', 3)


    Aber das Thema RegEx ist und bleibt sehr spannend

    Danke

  • Viele StringReplace über ein und dasselbe Inputfenster laufen lassen

    • ugt100
    • 4. August 2015 um 12:15

    OK

    da war jemand schneller .... und nun funzt das ganze auch - saubere Sache

  • Viele StringReplace über ein und dasselbe Inputfenster laufen lassen

    • ugt100
    • 4. August 2015 um 12:14

    Hi zusammen,

    das Thema ist für auch sehr spannend - letztlich ist das ja so eine Art Serienbrief unter Autoit.
    Das würde prima für unsere Info Letters passen.

    Im Übrigen bekomme ich das Script (fehlerfrei) zu Laufen, wenn in Aspirin Junkies Srcipt in Zeile 6 ein Hochkomma am Ende nachdem Stern und vor dem letzten Komma hinzugefügt wird.
    Allerings funktioniert die Ersetzung nicht - soll heissen die Platzhalter %....% werden nicht durch die im Dictionary eingelesenen Ausdrücke ersetzt.
    Wobei ich sagen muss, dass mir der zum Einlesen genutzte RegEx String nicht so ganz klar ist .....

    Spoiler anzeigen


    For $Match in StringRegExp(FileRead($sVARIABLEFILTEPATH), '(?m)^(.+?)\h*:\h*(.*?)\h*',4)


    mfg
    ugt100

  • gelöst - einlesen von 'zeilen' aus config datei in ein Array

    • ugt100
    • 10. Juli 2015 um 12:48

    Hi Aspirin Junkie,

    'tschuldige das ich nochmal störe - aber Dein WooDoo mit dem ReEx String macht mich fertig.

    Ich verstehe ehrlich gesagt das Ding nicht sorecht (wobei es einwandfrei funzt)

    Vielleicht kannst Du mir - wenn Zeit - das Ding mal in einzelnen Schritten erklären
    Fände ich toll


    DANKE
    Gruss
    ugt100

  • gelöst - einlesen von 'zeilen' aus config datei in ein Array

    • ugt100
    • 10. Juli 2015 um 09:38

    Guten Morgen

    Danke für die Antwort - das mit dem RegEx ist klasse.
    Ich hatte in der Zwischenzeit auch schon einen Weg (mittels StringSplit) gefunden/ gebaut.
    Das hat mir keine Ruhe gelassen - so habe trotz 'häuslichen' Widerstands - gestern abend das gebaut.

    Allerdings werde ich Deine RegEx Lösung nutzen wollen - ist einfach smarter


    Danke nochmals

    Gruss
    ugt100 :klatschen::klatschen::klatschen:

  • gelöst - einlesen von 'zeilen' aus config datei in ein Array

    • ugt100
    • 9. Juli 2015 um 16:07

    Hallo zusammen,
    bestimmt stehe ich einfach nur auf dem Schlauch - aber mir gelingt es einfach nicht folgendes erfolgreich umzusetzen:

    Ich nutze die DynArray.au3 ,um Verzeichnisse zu durchsuchen, wobei einige unter dem Startpunkt liegende Verzeichnisse excluded werden.

    Das funktioniert einwandfrei !!!

    siehe Code

    Code
    #include "DynArray.au3"
    $a_Ret = _DynArrayFileList("x:\verz", MyFilter, 1)
    _ArrayDisplay($a_Ret)
    
    
    Func MyFilter($s_Path)
    Local Static $a_RemoveDirs[] = ["x:\verz\exclude1\","x:\verz\exclude2\","x:\verz\exclude3\","x:\verz\exclude4\","x:\verz\exclude5\"]
    For $i in $a_RemoveDirs
      _ArrayDisplay($a_RemoveDirs)
    If StringLeft($s_Path, StringLen($i)) = $i Then Return False
    Next
    If StringRight($s_Path, 4) = ".dic" Then Return True
    Return False
    EndFunc
    Alles anzeigen


    Um das Ganze auch anderen Kollegen einfach zur Verfügung zu stellen, will ich die anzugebenden Parameter mittels einer cfg Datei hinterlegen und im Code mit Variablen arbeiten.
    Die cfg Datei sieht wie folgt aus (eigentlich ganz simpel):

    [StartVerzeichnisSuche]
    K:\Notesdat\

    [ExlcudeDirs]
    "x:\Verz\Exclude1\", "x:\Verz\Exclude2\", "x:\Verz\Exclude3\", "x:\Verz\Exclude4\", "x:\Verz\Exclude5\"

    [CountSuffix]
    4

    [SuffixSuche]
    .dic

    Das funktioniert auch bis auf einen entscheidenden Punkt. Nämlich die Übergabe der zu excludenden Verzeichnisse als Array bekomme ich nicht hin.
    Die Exclude Verzeichnisse werden nicht als separate einzelne Records im Array eingelesen, sondern als ein Record des Arrays mit allen Excludes in einem String (dazu siehe auch die 2 Anhänge)

    Die Challenge ist es also das (Ziel) Array korrekt zu 'erzeugen' - oder wie erkläre ich ein Trennzeichen, welches das Array versteht un die einzelnen Records erzeugt ?


    Danke Euch schon mal im voraus


    Code
    #include "DynArray.au3"
    If FileExists(@ScriptDir & "\RekursivMitExcludedDirs.cfg") Then
       Local $cdeStart = FileReadLine(@ScriptDir & "\RekursivMitExcludedDirs.cfg", 2)
       Local $cdeExclude = FileReadLine(@ScriptDir & "\RekursivMitExcludedDirs.cfg", 5)
       Local $cdeCount = FileReadLine(@ScriptDir & "\RekursivMitExcludedDirs.cfg", 8)
       Local $cdeSuffix = FileReadLine(@ScriptDir & "\RekursivMitExcludedDirs.cfg", 11)
    Else
       MsgBox(64, "Error", "Missing ConfigFile - Check for it !", 2)
    EndIf
    MsgBox(0,"",$cdeExclude)
    $a_Ret = _DynArrayFileList($cdeStart, MyFilter, 1)
    _ArrayDisplay($a_Ret)
    ; Funktion welche nur bei Dateien, welche auf ".dic" enden und welche nicht in x:\verz\exclude1 ... liegen
    Func MyFilter($s_Path)
    	Local Static $a_RemoveDirs[] = [$cdeExclude]
    	_ArrayDisplay($a_RemoveDirs)
    	For $i in $a_RemoveDirs
    		If StringLeft($s_Path, StringLen($i)) = $i Then Return False
    	Next
    	If StringRight($s_Path, $cdeCount) = $cdeSuffix Then Return True
    	Return False
     EndFunc
    Alles anzeigen

    Bilder

    • CorrectExcludeDir.png
      • 4,2 kB
      • 322 × 144
    • WrongExcludeDir.png
      • 15,64 kB
      • 813 × 88
  • gelöst - Rekursive Suche nach Dateien, dabei explizit mehrere (Unter)Verzeichnisse aus dem Suchpfad ausklammern

    • ugt100
    • 7. Juli 2015 um 15:54

    Hallo Aspirin Junkie,

    das klappt prima mit der UDF ... sauber - Danke

    (die andere Lösung geht such - ist aber nicht ganz so elegant - trotzdem Danke)

    mfg
    ugt1oo

    P.S. letztlich sind beide Lösungen (etwas abstrahiert) nahezu identisch


    mille grazie

  • gelöst - Rekursive Suche nach Dateien, dabei explizit mehrere (Unter)Verzeichnisse aus dem Suchpfad ausklammern

    • ugt100
    • 7. Juli 2015 um 12:15

    Hi Kanashius,

    Danke der Tip erscheint mir sehr gut. So etwas in der Art habe ich gesucht aber - leider - nicht gefunden.
    Werde es testen umnd Feedback geben

    Merci

    :klatschen:

    Gruss
    ugt100

  • gelöst - Rekursive Suche nach Dateien, dabei explizit mehrere (Unter)Verzeichnisse aus dem Suchpfad ausklammern

    • ugt100
    • 7. Juli 2015 um 11:16

    Guten Morgen zusammen,

    nachdem ich mich irgendwie im Kreis drehe, wende ich mich hier ans Forum mit meiner Frage/Problem.
    Eigentlich ist alles in der Titelzeile schon beschrieben.

    Ich muss über ca. 20 Server täglich einen Dir *.cdeTmp /s/b beginnend ab einem Einstiegspunkt (z.B. d:\logs) laufen lassen.
    Soweit ganz einfach (entweder per Batch od. mit rekursiver AutoIt Suche).

    Aber ich möchte/muss (um nicht im Nachgang Aufräumarbeiten durchführen zu müssen), definierte Verzeichnisse innerhalb des 'Suchpfades' ausschliessen.

    Z.B.

    d:\logs: dir *.cdeTmp /S/b

    d:\logs\Vz1
    d:\logs\vz1\vz11
    d:\logs\vz1\vz12
    d:\logs\vz1\vz123

    auszuschliessen ist dabei d:\logs\vz1\vz12

    Eine Idee wäre jetzt im ersten Schritt eine Directory List zu erzeugen - diese nach den auszuklammernden Verzeichnisse überprüfen / ggf. löschen und diese DirList dann sequentiell abzuarbeiten .
    Das ist aber ziemlich aufwendig .... vllt. gibt es ja was Eleganteres bzw. Schlaueres ...


    Danke schon einmal im voraus

    Gruss
    ugt100

  • (temporäres) TextFile mit _FileWriteToLine funktioniert nicht mehr

    • ugt100
    • 14. Mai 2015 um 11:24

    Hallo Bernd,

    herzlichen Dank ... das funktioniert jetzt. Warum das vorher auch mit _FileWriteToLine gegangen sein muss entzieht sich mir allerdings vollends. Ich habe extra ein altes Backup wiederhergestellt von vor über einem Jahr und da war der genutzte Syntax auch mit dem _FileWriteToLine..... Vllt. hat sich da ja mal was geändert.

    Das mit dem Parameter beim FileOpen war ein Lapsus, den ich währen des Fehlersuchens mal getestet hatte und nicht korrigiert hatte im Post - auch hier trotzdem ein

    DANKE

    Dann wünsche ich einen schönen 'Vatertag' / Feiertag.

    Und ich werde die Userleins in APAC am Montag damit beglücken ...

    LG
    ugt100

    :thumbup::thumbup::thumbup:

  • (temporäres) TextFile mit _FileWriteToLine funktioniert nicht mehr

    • ugt100
    • 14. Mai 2015 um 08:53

    Guten Morgen zusammen,
    ich habe da (mal wieder) ein Problem und wende mich wie immer hier ans Forum, nachdem ich mich seit gestern irgendwie im Kreis drehe.
    Blöde ist das ich etwa 3500 Anwender damit beglücken muss und das manuell so nicht machbar ist.

    Vorab:
    Das ganze Script hat schon mehrere tausend mal seinen Dienst erfolgreich geleistet
    (Funktion des Scripts :
    Mittels eines in einem anderen System (IDM) erstellten csv Files, wird dieses nach definierten Regeln aufgesplittet und in sog. einzelne 'redirect files' umgewandelt, um einen Usermove zu unterstützen.

    Die einzige Änderung die mir einfällt und ggf. eine Rolle spielen könnte, war das Update der AutoIT Version (das hat mich bei der StringEncrypt Funktion erwischt)


    Problem:
    wie im Titel beschrieben wird das temporäre Textfile nicht mehr zeilenweise gefüllt, nachdem es mit FileOpen 'created' wurde.
    Keinen blassen Schimmer warum das jetzt nicht mehr funktioniert

    Also hier mal der entscheidende Teil des Scriptes

    AutoIt
    If Not _FileReadToArray($cdeSourceNRF, $acdeNRF) Then
    	MsgBox(4096, "Fehler", " Fehler beim Einlesen ins Array (Error:" & @error & ")") ;Einlesen Sourcefile mit Errorhandling (Öffnen des Datenfiles)
    	Exit
    EndIf
    $CdeRuns = $acdeNRF[0] / 6 ;Berechnung der Anzahl zu erzeugender Files (1-5 Zeilen = Dateiinhalt / 6.Zeile Filename)
    If Int($CdeRuns) - $CdeRuns <> 0 Then
    	MsgBox(16, "In der Quelldatei liegt ein Fehler vor", "Wahrscheinlichster Fehler: Ein falsche Anzahl an Datenzeilen" & @LF & @LF & "Richtig sind:" & @LF & "5 Zeilen Daten + 1 Zeile für Dateinamen (6 Zeilen/nrf file).")
    Else ;Errorhandling (Anzahl Zeilen muss aufgehen / durch 6 teilbar)
    	$cdeMessage1 = ""
    	SplashTextOn("Step 1:   *.nrf - erstellen", $cdeMessage1, 300, 70, -1, -1, 16 + 2, "", 10, 400) ;Splash
    	;######################## hier beginnt das Entscheidende #######################
    	For $i = 1 To $CdeRuns ;Schleife .... Start
    		FileOpen(@ScriptDir & "\nrf_temp.txt", 1) ;Temp File erzeugen - <------------- das File wird erzeugt und hat die Grösse 0 KB
    		For $x = 1 To 5
    			_FileWriteToLine(@ScriptDir & "\nrf_temp.txt", $x, $acdeNRF[$x], 0) ;Schreiben der 5 Zeilen für NRF in das neue Temp File
    		Next
    		FileClose(@ScriptDir & "\nrf_temp.txt")
    		$x = 6
    		$cdeFilename = $acdeNRF[$x] ;Dateiname ermitteln (immer die jeweils 6.Zeile)
    		FileMove(@ScriptDir & "\nrf_temp.txt", @ScriptDir & "\nrf\" & $cdeFilename, 9) ;Neues File benamen und ins Verzeichnis 'NRF' schieben  - <------------- funktioniert
    		$cdeMessage1 = ($i & " / " & $CdeRuns & "   -   NRF File(s) erzeugt" & @CRLF & @CRLF & $cdeFilename) ;Splash text
    		ControlSetText("Step 1:   *.nrf - erstellen", "", "Static1", $cdeMessage1) ;Splash update
    		Sleep(200)
    		For $y = 1 To 6
    			_ArrayDelete($acdeNRF, 1) ;'Abgearbeitete Zeilen' aus dem Array löschen
    		Next
    	Next ;Schleife .... Ende
    	Sleep(500)
    
    
    ;### Tidy Error -> if is never closed in your script.
    Alles anzeigen


    Vielleicht weiss ja jemand Rat - wäre super .....


    LG
    ugt100

    Edit bernd670: Code richtig formatiert!

  • mehrere Dateien in einem Verzeichnis auf jeweils 3 bestimmte Strings prüfen + Ausgabe der Ergebnisse in eine Datei

    • ugt100
    • 18. April 2015 um 10:52

    Hallo Bugfix,

    ich nochmal - habe es jetzt doch geschnackelt, hatte da noch einen Knoten im Hirn - funzt jetzt prima
    (läuft wie ein Länderspiel - jetzt Dank Deiner Hilfe)

    :thumbup::thumbup::thumbup::thumbup::thumbup::thumbup::thumbup:

    Danke
    ugt100

  • mehrere Dateien in einem Verzeichnis auf jeweils 3 bestimmte Strings prüfen + Ausgabe der Ergebnisse in eine Datei

    • ugt100
    • 18. April 2015 um 10:48

    Hallo Bugfix,

    danke für die schnelle Antwort. Leider kapiere ich das nicht so ganz bzw. das Ergebnis ist nicht das gewünschte.
    So sieht das Ergebnis aus - wenn ich das 'neue' Script (mit Deinen Ergänzungen) nutze.

    Ergebnis:
    --------------- D:\Laptop\Offline Files\1c-SPI_cde\Clients\Evonik\Evonik_BKPStats\Log_20150417.txt---------------
    Lorem ipsum dolor sit amet,
    consectetur adipiscing elit,
    sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
    Ut enim ad minim veniam,
    quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
    Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
    ;--------------------------------------------------------------------------
    Total found dbs: 3333
    Total bkp dbs: 2222
    Total skipped dbs: 1111
    ;--------------------------------------------------------------------------
    Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.Total found dbs: 3333
    Total bkp dbs: 2222
    Total skipped dbs: 1111

    Mein Ziel ist das folgende:
    Ich möchte nur die 3 Zeilen aufführen - in etwa so:

    --------------- D:\Laptop\Offline Files\1c-SPI_cde\Clients\Evonik\Evonik_BKPStats\Log_20150417.txt---------------
    Total found dbs: 3333
    Total bkp dbs: 2222
    Total skipped dbs: 1111

    ~;KOMMENTAR: dann folgt ggf. die nächste Datei (im Echtumfeld sind das in Summe 23 zu durchsuchende Files 3 x Täglich)

    --------------- D:\Laptop\Offline Files\1c-SPI_cde\Clients\Evonik\Evonik_BKPStats\Log_20150417.txt---------------


    Ich hoffe mal ich konnte es verständlich beschreiben

    Danke
    ugt100

  • mehrere Dateien in einem Verzeichnis auf jeweils 3 bestimmte Strings prüfen + Ausgabe der Ergebnisse in eine Datei

    • ugt100
    • 18. April 2015 um 09:14

    Guten Morgen in die Runde,

    ich komme im oben beschriebenen Szenario nicht so richtig weiter ....
    habe allerdings 2 (Teil)Scripte die jeweils einen Teil der Anforderung abdecken - nur die Kombi gelingt mit nicht

    Teil (1)
    Mehrere Dateien aus einem Verzeichnis auswählen, in ein Array einlesen ---> funktioniert
    Dann gesamten Dateiinhalte in ein Summaryfile schreiben, wobei mittels Trennlinie die einzelnen Dateien(inhalte) getrennt werden ---> funktioniert
    (hier sollen aber letztendlich nur jeweils 3 Zeilen der jeweiligen Datei geschrieben werden)

    Teil (2)
    Auslesen der 3 definierten Zeilen aus einer Datei ---> funktioniert

    Leider gelingt es mir nicht den Teil (2) innerhalb von Teil (1) zu integrieren.
    Zum besseren Verständnis hier meine 2 ScriptSnips:

    Teil (1) - Dateiliste / SummaryFile

    Spoiler anzeigen


    #include <file.au3>
    Local $sPath, $aFiles, $sText, $sOrdner
    ;Local $aRecords, $sFoundDB, $sBkpDB, $sSkipDB

    ;~ Folderauswahl
    $sPath = FileSelectFolder("Verzeichnis wählen","D:\Laptop","","")
    If @error Then Exit

    ;~ DateiListe in Array einlesen
    $aFiles = _FileListToArray($sPath,"*.*",1) ; Dateien in ein Array lesen
    ;~ Fehlerhandling
    If @error Then Exit MsgBox(16,"Error","No files found")

    ;~ DateiListe abarbeiten
    For $i = 1 To UBound($aFiles)-1
    $sText &= @CRLF & @CRLF & "--------------- "&$sPath & "\"& $aFiles[$i]& "---------------" & @CRLF & @CRLF ;TrennLinie zw. den Dateien
    $sText &= FileRead($sPath & "\"& $aFiles[$i]) ;Dateiinhalt (gesamt) hinzufügen ; <----- HIER DENKE ICH MUSS DIE 3 ZEILENSUCHE EINGEFÜGT WEDEN
    Next

    ;~ SummaryFile erzeugen und anzeigen
    $sOrdner = StringRegExpReplace($sPath,".+\\","") ;Foldernamen ermiiteln
    FileWrite(@DesktopDir & "\Files from"&$sOrdner&".txt",$sText) ;Neues TxtFile schreiben
    ShellExecute(@DesktopDir & "\Files from"&$sOrdner&".txt") ;Neues TxtFile öffnen


    Teil (2) - Dedizierte Suche nach definierten Strings innerhalb einer Datei (ist angehängt)

    Spoiler anzeigen


    If Not _FileReadToArray(@ScriptDir & "\Log_20150418.txt",$aRecords) Then ;Datei in Array lesen + ErrorHandling
    MsgBox(4096,"Error", " Fehler beim Einlesen der Datei Fehler:" & @error)
    Exit
    EndIf

    Find 'Total dbs'
    For $x = 1 to $aRecords[0]
    If StringInStr($aRecords[$x], "Total found dbs:") Then ; Eintrag ist vorhanden
    $sFoundDB = $aRecords[$x]
    ExitLoop
    Else
    $sFoundDB = "Total found dbs: 'nicht gefunden'" ; Eintrag ist NICHT vorhanden
    EndIf
    Next

    ;~ Find 'Bkp dbs'
    For $x = 1 to $aRecords[0]
    If StringInStr($aRecords[$x], "Total bkp dbs:") Then ; Eintrag ist vorhanden
    $sBkpDB = $aRecords[$x]
    ExitLoop
    Else
    $sBkpDB = "Total bkp dbs: 'nicht gefunden'" ; Eintrag ist NICHT vorhanden
    EndIf
    Next

    ;~ Find 'Skipped dbs'
    For $x = 1 to $aRecords[0]
    If StringInStr($aRecords[$x], "Total skipped dbs:") Then ; Eintrag ist vorhanden
    $skipDB = $aRecords[$x]
    ExitLoop
    Else
    $sSkipDB = "Total bkp dbs: 'nicht gefunden'" ; Eintrag ist NICHT vorhanden
    EndIf
    Next


    So nun ist meine Challenge, daß aus der eingelesenen Dateiliste die jeweiligen 3 Ergebniszeilen (und nur diese) ins SummaryFile geschrieben werden
    Freue mich über jede Hilfe - danke schon einmal im voraus


    ugt100

    Dateien

    Log_20150418.txt 674 Byte – 350 Downloads
  • Scritp bendet sich bzw. die Ergebnis GUI erscheint nicht (mehr)

    • ugt100
    • 16. April 2015 um 16:29

    Hallo Oscar,

    das habe ich auch gerade gefunden (habe eine 'alte' String.au3 mit einer neuen verglichen). Da ist es dann aufgefallen.
    Das heisst jetzt das Script ändern .... oder tricksen.


    Danke für die schnelle Hilfe ....


    Gruss
    ugt100

    :thumbup::thumbup::thumbup:

  • Scritp bendet sich bzw. die Ergebnis GUI erscheint nicht (mehr)

    • ugt100
    • 16. April 2015 um 15:21

    Hallo zusammen,

    ich bin ziemlich ratlos und hoffe das vllt. jemand den Effekt kennt bzw. weiss woran es liegen könnte ....

    Problem:
    Ich habe ein Script welches ich im Scite aufrufe und mittels F5 starte.
    Das Script läuft los und zeigt mir auch die Eingabemaske (es handelt sich um das Verschlüsseln/Entschlüsseln eines Passwortes)
    Nach den notwendigen Eingaben wird der Button Verschlüsseln od. Entschlüsseln gedrückt. Soweit OK.
    Danach wir in der GUi ein erstes 'GUICtrlSetData($EditText, "Bitte warten während der Text verschlüsselt bzw. entschlüsselt wird.")' durchgeführt, was auch noch funktioniert.
    Der nächste Schritt landet dann allerdings im Nirvana ....und das Script ist somit beendet

    WARUM ?

    Anm. Dieses - genau dieses Script lief bereits in genau dieser Umgebung .... bis gestern


    C
    #include <GuiConstantsEx.au3>
    #include <String.au3>
    
    
    Opt("MustDeclareVars", 1)
    
    
    _Main()
    
    
    Func _Main()
        Local $WinMain, $EditText, $InputPass, $InputLevel, $UpDownLevel, $EncryptButton, $DecryptButton, $string, $x, $cdeInputPass, $cdeInputLevel
        ; GUI und String Sachen
        $WinMain = GUICreate('Verschlüsselungsprogramm', 400, 400)
        ; Erstellt ein Fenster
        $EditText = GUICtrlCreateEdit('', 5, 5, 380, 350)
        ; Erstellt das Haupt-Edit-Feld
        $InputPass = GUICtrlCreateInput('', 5, 360, 100, 20, 0x21)
        ; Erstellt das Passwortfeld mit der versteckten zentrierten Eingabe
        $InputLevel = GUICtrlCreateInput(1, 110, 360, 50, 20, 0x2001)
        $UpDownLevel = GUICtrlSetLimit(GUICtrlCreateUpdown($InputLevel), 10, 1)
        ; Dies erstellt die Stufeneingabe mit Hoch|Runter-Fähigkeit
        $EncryptButton = GUICtrlCreateButton('Verschlüsseln', 170, 360, 105, 35)
        ; Encryptbutton
        $DecryptButton = GUICtrlCreateButton('Entschlüsseln', 285, 360, 105, 35)
        ; Decryptbutton
        GUICtrlCreateLabel('Passwort', 5, 385)
        GUICtrlCreateLabel('Stufe', 110, 385)
        ; Einfache Textlabels
        GUISetState()
        ; Zeigt das Fenster
    
    
        While 1
            Switch GUIGetMsg()
                Case $GUI_EVENT_CLOSE
                    ExitLoop
                Case $EncryptButton
                    GUISetState(@SW_DISABLE, $WinMain) ; Bewahrt vor jeglichen Änderungen
                    $string = GUICtrlRead($EditText) ; Speichert den Inhalt der Editbox für später
    			    $cdeInputPass = GUICtrlRead($InputPass)
    				$cdeInputLevel = GUICtrlRead($InputLevel)
    
    
    				MsgBox(0,"","wait 1 ..."); das klappt
    
    
                    GUICtrlSetData($EditText, "Bitte warten während der Text verschlüsselt bzw. entschlüsselt wird.") ; Freundliche Nachricht
    
    
    				MsgBox(0,"","wait 2 ..."); das klappt auch noch
    
    
                    GUICtrlSetData($EditText, _StringEncrypt(1, $string, GUICtrlRead($InputPass), GUICtrlRead($InputLevel)))
    
    
    			    MsgBox(0,"","wait 3 ..."); hier endet das Script
    
    
    			    $x = _StringEncrypt(1, $string, $cdeInputPass, $cdeInputLevel)
    				MsgBox(0,"",$x)
                    ; Ruft das Verschlüsseln auf. Setzt die Daten der Editbox mit dem verschlüsselten String
                    ; Das Verschlüsseln beginnt mit 1/0 um mitzuteilen ob es verschlüsselt/entschlüsselt wird
                    ; Das Verschlüsseln hat dann den String welchen man für später von der Editbox gespeichert hat
                    ; Dann wird die Passwort-Box und die Levelbox gelesen
                    GUISetState(@SW_ENABLE, $WinMain) ; Dies holt das Fenster zurück
    				FileDelete("CDEReadMe.cfg")
    			    IniWriteSection(@ScriptDir & "\CDEReadMe.cfg","Global", $x)
    				IniWriteSection(@ScriptDir & "\CDEReadMe.cfg","Level", $cdeInputLevel)
    
    
    
    
    
    
                Case $DecryptButton
                    GUISetState(@SW_DISABLE, $WinMain) ; Bewahrt vor jeglichen Änderung
                    $string = GUICtrlRead($EditText) ; Speichert den Inhalt der Editbox für später
                    GUICtrlSetData($EditText, "Bitte warten während der Text verschlüsselt bzw. entschlüsselt wird.") ; Freundliche Nachricht
                    GUICtrlSetData($EditText, _StringEncrypt(0, $string, GUICtrlRead($InputPass), GUICtrlRead($InputLevel)))
                    ; Ruft das Entschlüsseln auf. Setzt die Daten der Editbox mit dem entschlüsselten String
                    ; Das Entschlüsseln beginnt mit 1/0 um mitzuteilen ob es verschlüsselt/entschlüsselt wird
                    ; Das Entschlüsseln hat dann den String welchen man für später von der Editbox gespeichert hat
                    ; Dann wird die Passwort-Box und die Stufen-Box gelesen
                    GUISetState(@SW_ENABLE, $WinMain) ; Dies holt das Fenster zurück
            EndSwitch
        WEnd ; Läuft, bis das Fenster geschlossen wird
        Exit
    EndFunc   ;==>_Main
    Alles anzeigen


    Für jeden Tip wäre ich dankbar

    mfg
    ugt100 :thumbup:

  • prüfen ob bestimmte Excel Datei geöffnet ist - wenn ja dann Save and Close / wenn nein im Script weiter

    • ugt100
    • 12. Januar 2015 um 13:48

    Hallo Alina,
    Hallo Water,

    es ist wie so oft - vor lauter Bäume den Wald nicht gesehen.
    Kaum nutzt man den richtigen Befehl - schon funktionierts auch.

    DANKE an Euch beide - die Kuh ist vom Eis

    mfg
    ugt100


    P.S.: werde versuchen in der Zukunft die gesamten Befehle anzuschauen. Denn die Lösung war ja jetzt doch 'recht' einfach .... (wie doof von mir)

  • prüfen ob bestimmte Excel Datei geöffnet ist - wenn ja dann Save and Close / wenn nein im Script weiter

    • ugt100
    • 12. Januar 2015 um 09:07

    Hi Water,

    ich habe das jetzt am WE mit der Excel UDF getestet und habe es aber nicht hinbekommen.
    M.E. liegt das daran, das die Datei schon offen ist und nicht ExcelBookOpen geöffnet wurde.
    Zumindest sieht das für mich so aus.
    Ggf. weisst Du ja noch einen guten Rat ?

    Danke schon einmal im voraus

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™