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. MadCatz

Beiträge von MadCatz

  • SQL String klappt mit CreateCombo nicht

    • MadCatz
    • 30. Januar 2017 um 13:51

    Also hab gerade mal mit StringLen geprüft ob der String der Länge entspricht:


    Beispiel: Athen sollte Len von 5 haben. Effektiv hab ich aber 7. Bari sollte 4 Zeichen haben, gibt aber 6 an. Also sind irgnedwo 2 Zeichen im String die das vernünftige Übertragen verhindern. Die muss ich jetzt löschen :)


    Problem gelöst:
    Am Ende der einzelnen Wörter sind ein Leerzeichen und ein @CRLF zu finden. Problem gelöst :)
    Hilft manchmal einfach drüber zureden :)

  • SQL String klappt mit CreateCombo nicht

    • MadCatz
    • 30. Januar 2017 um 12:03

    Hi autoiter,

    nein das $c hab ich nur wegen meiner Versuchsreihe mit den FileRead drin stehen, dass habe ich vergessen vorher rausznehmen und wieder zu ersetzten. ich setzt mal den ganzen Code rein, dann kann mal getestet werden, ob es einfach nur nicht bei mir funktionieren will.


    AutoIt
    #Region ### Include Dateien ###
    #include <Date.au3>
    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>
    #EndRegion ### Include Dateien ###
    
    
    #Region ### START Koda GUI section ### Form=
    $GUIName = GUICreate("WILO-Generator v.2.0", 300, 350)
    $gEingabe = GUICtrlCreateGroup("Eingabe", 10, 10, 280, 280)
    $lLieferschein = GUICtrlCreateLabel("Lieferschein", 20, 35, 200, 20)
    $lStandort = GUICtrlCreateLabel("Standort", 20, 85, 200, 20)
    $lLand = GUICtrlCreateLabel("Land", 20, 135, 200, 20)
    $lNummer = GUICtrlCreateLabel("Erste Inventarnummer", 20, 185, 200, 20)
    $lAnzahl = GUICtrlCreateLabel("Anzahl Inventarnummern", 20, 235, 200, 20)
    $lStaat = GUICtrlCreateLabel("-", 20, 155, 200, 20); ,BitOR($SS_CENTER, $SS_CENTERIMAGE))
    $iLieferschein = GUICtrlCreateInput("", 20, 55, 260, 20)
    $iNummer = GUICtrlCreateInput("", 20, 205, 260, 20)
    $iAnzahl = GUICtrlCreateInput("", 20, 255, 260, 20)
    $cStandort = GUICtrlCreateCombo("", 20, 105, 260, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL, $WS_VSCROLL))
    $bSave = GUICtrlCreateButton("Speichern", 95, 300, 105, 35)
    GUICtrlSetFont($bSave, 10)
    GUICtrlSetFont($lLieferschein, 10)
    GUICtrlSetFont($lStandort, 10)
    GUICtrlSetFont($lLand, 10)
    GUICtrlSetFont($lNummer, 10)
    GUICtrlSetFont($lAnzahl, 10)
    GUICtrlSetFont($lStaat, 10)
    GUICtrlSetFont($gEingabe, 10)
    GUICtrlSetFont($cStandort,10)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    
    
    #Region ### Variablendeklaration ###
    Global $oRS
    Global $oConn
    Global $dbname = "Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=" & @ScriptDir & "\Lokationen_Kürzel_Länder.accdb"
    Global $sDate = @MDAY & @MON & @YEAR ;Aktuelles Datum wird in die Variable "$sDate" geschrieben
    Global $saveDate = @MDAY & "_" & @MON & "_" & @YEAR
    #EndRegion ### Variablendeklaration ###
    
    
    #Region ### ODBC Verbindung zur Access Datenbank und Auslesen der Standorte ###
    $adoCon = ObjCreate("ADODB.Connection")
    $adoCon.Open($dbname)
    $adoRs = ObjCreate("ADODB.Recordset")
    With $adoRs
    	.CursorType = 1
    	.LockType = 3
    	.Open("SELECT Location FROM Lokationen", $adoCon)
        If .RecordCount Then
    		Local $Array[0]
    			While Not .EOF
    				$output = .Fields("Location").Value & @CRLF
    				_ArrayAdd($Array, $output)
    				.MoveNext
    			WEnd
    	EndIf
    	$String = _ArrayToString($Array)
    	GUICtrlSetData($cStandort,$String)
    	$adoCon.Close
    EndWith
    #EndRegion ### ODBC Verbindung zur Access Datenbank und Auslesen der Standorte ###
    
    
    #Region ### Programmcode ###
    While 1
    	$nMsg = GUIGetMsg()
    	Switch $nMsg
    		Case $GUI_EVENT_CLOSE
    			Exit
    		Case $bSave
    #cs -----------------------------------------------------------------------------
    	Auslesen der Inputfelder
    #ce -----------------------------------------------------------------------------
    			$rLS = GUICtrlRead($iLieferschein) ;Hier wird der Inhalt der Inputbox "iLieferschein" in die Variable "$rLS" übernommen
    			$rDropdown = GUICtrlRead($cStandort) ;Hier wird der Inhalt der Combobox "Location" in die Variable "$rDropdown" übernommen
    			$rInventarnummer = GUICtrlRead($iNummer) ;Hier wird der Inhalt der Inputbox "$iNummer" in die Variable "$rInventarnummer" übernommen
    			$rAnzahl = GUICtrlRead($iAnzahl) ;Hier wir der Inhalt der Inputbox "$iAnzahl" in die Variable "$rAnzahl" übernommen
    
    
    ;~ 			If StringLen($rLS) <> 10 Then ;Lieferscheinlänge ungleich 10 Stellen?
    ;~ 				MsgBox(0+48, "Error!", "Bitte die Eingabe der Lieferscheinnummer überprüfen!")
    ;~ 			EndIf
    			If $rDropdown = "" Then ;Standort eingegeben?
    				MsgBox(0+48, "Error!", "Bitte den Standort aus der Dropdown-Liste auswählen!")
    			Elseif $rDropdown <> "" Then
    				$adoCon = ObjCreate("ADODB.Connection")
    				$adoCon.Open($dbname)
    				With $adoRs
    				$adoRs = ObjCreate("ADODB.Recordset")
    				.CursorType = 1
    				.LockType = 3
    				.Open("SELECT Land FROM Lokationen WHERE Location = '" & $rDropdown & "'", $adoCon); Hier muss $rDropdown gefunden werden
    				$output_2 = .Fields("Land").Value
    				MsgBox(0,"Output",$output_2)
    				GUICtrlSetData($lStaat, $output_2)
    				EndWith
    			EndIf
    	EndSwitch
    WEnd
    Alles anzeigen
  • SQL String klappt mit CreateCombo nicht

    • MadCatz
    • 30. Januar 2017 um 11:11

    Hallo Leute,

    folgendes Problem:

    Ich hab eine GUI aus der CreateInputs und eine CreateCombo ausgelesen werden muss.
    Der Inhalt dieser Felder wird in einer Variable deklariert.

    Der Inhalt der Combo muss mit einer Datenbak abgeglichen werden. Und hier tritt mein Problem auf.
    Das Abgleichen der CreateCombo funktionert nicht!

    Ich bekomme immer den Fehler:

    Code
    $output_2 = .Fields("Land").Value
    $output_2 = .Fields("Land")^ ERROR

    Wenn ich allerdings den Inhalt der CreateCombo händig in eines der CreateCombos einfüge und den Inhalt dann mit der Datenbank abgleiche funktioniert das ganze wie es soll.

    Was ich bisher probiert habe:

    • Den Inhalt des CreateCombos in ein CreateInput händig eingefügt und per Skript den Inhalt des CreateInputs mit der DB abgeglichen, dies funktioniert
    • Den Inhalt der CreateCombo als String deklariert. Den String als Variable deklariert und den String mit der DB abgeglichen, ohne Erfolg
    • Den Inahlt der CreateCombo als String deklariert und mittels FileWrite und FileRead mit der DB abgeglichen kein Erfolg.

    Ich gehe stark davon aus, dass etwas mit dem Create Combo nicht stimmt, da die CreateInputs immer für den Abgleich funktioniert haben.

    Wichtig ist noch zu erwähnen, dass die CreateCombo mittel Array mit Einträgen befüllt wird. Der Inhalt der CreateCombo kann auch mittels MSgBox ausgelesen werden und wird auch per FileWrite ordentlich in eine Datei geschrieben.


    Hier der betreffende Code:

    AutoIt
    #Region ### START Koda GUI section ### Form=
    $cStandort = GUICtrlCreateCombo("", 20, 105, 260, 25, BitOR($CBS_DROPDOWN, $CBS_AUTOHSCROLL, $WS_VSCROLL))
    $iLieferschein = GUICtrlCreateInput("", 20, 55, 260, 20)
    $iNummer = GUICtrlCreateInput("", 20, 205, 260, 20)
    $iAnzahl = GUICtrlCreateInput("", 20, 255, 260, 20)
    #EndRegion ### END Koda GUI section ###
    
    
    #Region ### ODBC Verbindung zur Access Datenbank und Auslesen der Standorte ###
    $adoCon = ObjCreate("ADODB.Connection")
    $adoCon.Open($dbname)
    $adoRs = ObjCreate("ADODB.Recordset")
    With $adoRs
    	.CursorType = 1
    	.LockType = 3
    	.Open("SELECT Location FROM Lokationen", $adoCon)
        If .RecordCount Then
    		Local $Array[0]
    			While Not .EOF
    				$output = .Fields("Location").Value & @CRLF
    				_ArrayAdd($Array, $output)
    				.MoveNext
    			WEnd
    	EndIf
    	$String = _ArrayToString($Array)
    	GUICtrlSetData($cStandort,$String)
    	$adoCon.Close
    EndWith
    #EndRegion ### ODBC Verbindung zur Access Datenbank und Auslesen der Standorte ###
    
    
    While 1
    	$nMsg = GUIGetMsg()
    	Switch $nMsg
    		Case $GUI_EVENT_CLOSE
    			Exit
    		Case $bSave
    #cs -----------------------------------------------------------------------------
    	Auslesen der Inputfelder
    #ce -----------------------------------------------------------------------------
    			$rLS = GUICtrlRead($iLieferschein) ;Hier wird der Inhalt der Inputbox "iLieferschein" in die Variable "$rLS" übernommen
    			$rDropdown = GUICtrlRead($cStandort) ;Hier wird der Inhalt der Combobox "Location" in die Variable "$rDropdown" übernommen
    			$rInventarnummer = GUICtrlRead($iNummer) ;Hier wird der Inhalt der Inputbox "$iNummer" in die Variable "$rInventarnummer" übernommen
    			$rAnzahl = GUICtrlRead($iAnzahl) ;Hier wir der Inhalt der Inputbox "$iAnzahl" in die Variable "$rAnzahl" übernommen
    
    
    ;~ 			If StringLen($rLS) <> 10 Then ;Lieferscheinlänge ungleich 10 Stellen?
    ;~ 				MsgBox(0+48, "Error!", "Bitte die Eingabe der Lieferscheinnummer überprüfen!")
    ;~ 			EndIf
    			If $rDropdown = "" Then ;Standort eingegeben?
    				MsgBox(0+48, "Error!", "Bitte den Standort aus der Dropdown-Liste auswählen!")
    			Elseif $rDropdown <> "" Then
    ;~ 				MsgBox(0,"Dropdown",$rDropdown)
    ;~ 				$b = String($rDrop)
    ;~ 				FileWrite(@ScriptDir & "\ha.txt", $b)
    ;~ 				$c = FileRead(@ScriptDir & "\ha.txt")
    
    
    
    
    				$adoCon = ObjCreate("ADODB.Connection")
    				$adoCon.Open($dbname)
    				With $adoRs
    				$adoRs = ObjCreate("ADODB.Recordset")
    				.CursorType = 1
    				.LockType = 3
    				.Open("SELECT Land FROM Lokationen WHERE Location = '" & $c & "'", $adoCon); Hier muss $rDropdown gefunden werden
    				$output_2 = .Fields("Land").Value
    				MsgBox(0,"Output",$output_2)
    				GUICtrlSetData($lStaat, $output_2)
    				EndWith
    			EndIf
    	EndSwitch
    WEnd
    Alles anzeigen


    Falls mir jemand sagen kann was das Proble mit dem Dropdown ist, wäre ich sehr sehr dankbar :)

  • Reguläre Ausdrücke

    • MadCatz
    • 7. September 2016 um 12:48

    Hi,

    ich würde deine txt in eine Array einlesen, dann nach dem Ausdruck suchen, also nach "(leer)" und dann dann alle Inhalte des Arrays entfernen, die diesen Ausdruck entfernen.

    Anschließend kansst du das Array wieder in eine txt exportieren!

  • Programm läuft nicht überall?!?

    • MadCatz
    • 7. März 2016 um 18:50

    ich hab den Fehler gefunden -.-!

    SQLite wurde bei mir auf meinem AMD-System ohne die 64bit Version der sqlite.dll installiert und auf meinem Notebook mit der 64bit dll
    Mein Notebook übergibt also korrekt die dll und mein PC sucht und findet nix.
    Kam grad raus als ich ihm mit Pfad die dll übergab.

  • Programm läuft nicht überall?!?

    • MadCatz
    • 7. März 2016 um 18:33

    So ich bins nochmal, ich hab jetzt herausgefunden, dass

    Code
    _SQLite_Startup()

    nicht funktioniert. Warum weiß ich allerdings nicht.
    Beide PCs haben die selbe sqlite.dll :/

    Vorher hat es mal funktioniert

  • Programm läuft nicht überall?!?

    • MadCatz
    • 4. März 2016 um 08:19

    Das sind die extrahierten Datenbank codes:

    AutoIt
    ;~ #Not exists EncryptXDatabase.db#=========================================================
    If Not FileExists($sEncryptXDatabase) Then
    	FileWrite($sEncryptXDatabase,"")
    	_SQLite_Startup()	;==> Build EncryptX.db
    	$SQLOpen = _SQLite_Open($sEncryptXDatabase)
    	_SQLite_Exec($SQLOpen, "Create table [" & $tbl & "] ([ID] INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, [First Name] TEXT NOT NULL, [Last Name] TEXT NOT NULL, [Password_dat] TEXT NOT NULL, [Password_long] TEXT NOT NULL);")
    	_SQLite_Close()
    	_SQLite_Shutdown()
    	FileReadLine($sNFO,2)
    	If @error = -1 Then	;==> Errorhandle
    		FileWrite($sWorkingPath &"\path.nfo", "PathDatabase = " & $sEncryptXDatabase  & @CRLF)	;==> Writes nfo
    	EndIf
    ;~ =========================================================================================
    ;~ #Exists EncryptXDatabase.db#=============================================================
    ElseIf FileExists($sEncryptXDatabase) Then
    	$sFileRead = FileReadLine($sNFO,2)
    	If @error Then	;==> Errorhandle
    		FileWrite($sWorkingPath &"\path.nfo", "PathDatabase = " & $sEncryptXDatabase  & @CRLF)	;==> Writes nfo
    	EndIf
    Endif
    ;~ =========================================================================================
    Alles anzeigen


    AutoIt
    Case $bt_Encrypt
    			If Not FileExists($sEncryptXDatabase) Then
    				FileWrite($sEncryptXDatabase,"")
    				_SQLite_Startup()	;==> Build EncryptX.db
    				$SQLOpen = _SQLite_Open($sEncryptXDatabase)
    				_SQLite_Exec($SQLOpen, "Create table [" & $tbl & "] ([ID] INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, [First Name] TEXT NOT NULL, [Last Name] TEXT NOT NULL, [Password_dat] TEXT NOT NULL, [Password_long] TEXT NOT NULL);")
    				_SQLite_Close()
    				_SQLite_Shutdown()
    				FileReadLine($sNFO,2)
    					If @error = -1 Then	;==> Errorhandle
    						FileWrite($sWorkingPath &"\path.nfo", "PathDatabase = " & $sEncryptXDatabase  & @CRLF)	;==> Writes nfo
    					EndIf
    			ElseIf FileExists($sEncryptXDatabase) Then	;==> Checks whether EncryptX.db exists, if yes checks for EncryptX.db path
    				$sFileRead = FileReadLine($sNFO,2)
    				If @error Then	;==> Errorhandle
    					FileWrite($sWorkingPath &"\path.nfo", "PathDatabase = " & $sEncryptXDatabase  & @CRLF)	;==> Writes .nfo
    				EndIf
    			Endif
    Alles anzeigen
    AutoIt
    _StringInsert($sFileRead, $spassword_long, Random(1, $icounter))
    									FileWrite($datdelPath, $spassword_long)	;==> Write informations to .dat
    									If _Crypt_EncryptFile($datdelPath, $datPath, $sPasswordRead, $Algorithm) Then	;==> Encrypt .dat
    										FileDelete($datdelPath)	;==> delete old .dat
    										_Crypt_EncryptFile($sSourceRead, $sDestinationRead, $spassword_long, $Algorithm)	;==> Encrypt the sourcefile
    										_SQLite_Startup()	;==> Writes to EncryptX.db
    										$SQLOpen = _SQLite_Open($sEncryptXDatabase)
    										_SQLite_Exec($SQLOpen, "Insert into [" & $tbl & "] values (NULL,'" & $sUserRead_First & "','" & $sUserRead_Last & "','" & $sPasswordRead & "','" & $spassword_long & "');")
    										_SQLite_Close()
    										_SQLite_Shutdown()
    									Else
    										Switch @error	;==> Errorhandle
    											Case 1
    												MsgBox($MB_SYSTEMMODAL, $Error, $Failure_Key)
    											Case 2
    												MsgBox($MB_SYSTEMMODAL, $Error, $Failure_OpenSource)
    											Case 3
    												MsgBox($MB_SYSTEMMODAL, $Error, $Failure_OpenDestination)
    											Case 4 Or 5
    												MsgBox($MB_SYSTEMMODAL, $Error, $Failure_Encrypt)
    										EndSwitch
    									EndIf
    Alles anzeigen

    Wie gesagt unter dem Intelsystem geht es 100%ig

  • Programm läuft nicht überall?!?

    • MadCatz
    • 3. März 2016 um 21:58

    Hi Leute,

    ich verzweifle solangsam an meinem Script ?(
    Ich bin fertig mit dem coden und funktionierte bisher auch alles bei Tests.

    Jetzt kommt aber das kuriose, es läuft nicht auf allen PCs tadellos ?(


    Gecoded habe ich das Script unter 2 PCs, einmal ein AMD System (Infos unten) mit Win10 64bit und einmal unter einem Notebook mit Intel CPU und Win7 64bit.

    AutoIT, Scite und SQLite sind alle auf dem selben Stand.

    Das Script läuft wunderbar durch auf dem Intelsystem.
    Auf dem Amdsystem wird so ziemlich jeder SQLite Code falsch oder überhaupt nicht beachtet ?(


    Kenn jemand dieses Problem und hat einen Ansatz zum Lösen?

    Mein Script kann ich euch leider nicht komplett hochladen sind 1000 Zeilen und zeigen darf ich es euch leider auch nicht.


    Viele Grüße,
    MadCatz

  • CPU effektiver bei Script Ausführung einsetzten

    • MadCatz
    • 1. März 2016 um 15:46

    da ich aber IT-Systemelektroniker bin, weiß ich 100% dass es nur 1Kern ist und nicht auf 4 verteilt ;)

    Den RessourcenMonitor findest du im Taskmanager unter Leistung.

  • CPU effektiver bei Script Ausführung einsetzten

    • MadCatz
    • 1. März 2016 um 14:43
    Zitat von AspirinJunkie

    Die Prozentzahl im Taskmanager gibt die Gesamtauslastung des Systems an.Wenn du 4 Kerne hast, kannst du bei einem SingleThread-Prozess also nur maximal 25% Auslastung erreichen.
    Der Kern ist also zu 100% ausgelastet und die gesamte CPU (also alle Kerne) nur zu 25%.

    Wäre, wie du sagst, nur der einzelne Kern zu 25% ausgelastet würde der Taskmanager für diesen Prozess 6,25% Auslastung anzeigen.
    Ist das der Fall?

    Nein es wird nur 1.Kern zu 25% ausgelastet.

    Wenn man seine CPu überwacht sollte man dies über den Ressourcenmonitor machen und nicht bloß über den Taskmanager. Dort sieht man alle CPUs und deren einzelnen Auslastungen und bei mir wird nun mal nur eine zu 25% ausgelastet die anderen dümpeln bei 0%-1%, also Leerlauf.

  • CPU effektiver bei Script Ausführung einsetzten

    • MadCatz
    • 1. März 2016 um 14:25
    Zitat von Andy

    ggf. solltest du dir das Thread/Task-Management von Windows anschauen.

    Du hast eine Quadcore, daher die 25%. Windows verteilt die 100% Last EINES Threads/Tasks auf 4 Kerne, daher 25%. Du kannst das einfach im Taskmanager beeinflussen, wenn du den Task/Thread EINEM Core zuordnest (Rechtsklick auf den Prozess).

    Ich werde mal was basteln, die 15 Sekunden sollten doch zu schlagen sein^^

    Nein Andy, es sind nur 25% auf einer CPU ;), die anderen CPus laufen gar nicht erst mit an.
    Bevor die Frage kommt, die CPU ist 100% in Ordnung, aus eirgendeinem Grund wird das script aber sofort nur auf einer cpu ausgeführt

  • CPU effektiver bei Script Ausführung einsetzten

    • MadCatz
    • 1. März 2016 um 10:51

    So hab es jetzt so gelöst:

    AutoIt
    GUICtrlSetData($pb_Progress, $new_perc)
    	GUICtrlSetData($lb_Progress,"Encrypt: Please wait... " & $new_perc & "%")
    	For $i = 1 to $int*0.05
    		$shardcoded &= Chr (Random(33, 127, 1))
    	Next
    	$new_perc = $perc * $i
    	GUICtrlSetData($pb_Progress,$new_perc)
    	GUICtrlSetData($lb_Progress,"Encrypt: Please wait... " & $new_perc & "%")
    	For $i = $i to $int*0.10
    		$shardcoded &= Chr (Random(33, 127, 1))
    	Next
    	$new_perc = $perc * $i
    	GUICtrlSetData($pb_Progress,$new_perc)
    	GUICtrlSetData($lb_Progress,"Encrypt: Please wait... " & $new_perc & "%")
    	For $i = $i to $int*0.15
    		$shardcoded &= Chr (Random(33, 127, 1))
    	Next
    	$new_perc = $perc * $i
    	GUICtrlSetData($pb_Progress,$new_perc)
    	GUICtrlSetData($lb_Progress,"Encrypt: Please wait... " & $new_perc & "%")
    Alles anzeigen

    Das ganze ist jetzt von knapp 2min auf max 15sek. gefallen, die CPu tümpelt aber immer noch bei 25% :D

    Also war überaus erfolgreich! :party: Manchmal braucht man einfach nur ein paar Leute die einem den entscheidenden Denkanstoß geben :)

    Ich danke euch vielmals für eure super Hilfe :thumbup:

  • CPU effektiver bei Script Ausführung einsetzten

    • MadCatz
    • 1. März 2016 um 10:39

    Ok ok ok, mit der fülle an Antworten hätte ich nicht gerechnet, daher werd ich nicht auf alle eingehen können, ich denke, dass ihr mir das verzeihen werdet :)


    Zitat von Micha_he

    Ohne auf die grundlegende Arbeit der Funktion einzugehen, würde ich schätzen/raten das die Aktualisierung der GUI (GUICtrlSetData) mehr Zeit benötigt wie der restliche Teil !

    Ggf. würde ich die Progressbar nur aktualisieren, wenn sich der zu setzende Wert geändert hat.
    z.B.:

    AutoIt
    $new_perc = Int($perc * $i)
    If $new_perc <> $old_perc Then
    	GUICtrlSetData($pb_Progress,....)
    	$old_perc = $new_perc
    EndIf

    Statt 10Mio Änderungen nur noch 100 !

    Anschließend würde ich mir die 10Mio mal durchlaufende, ziemlich komplexe If...ElseIf-Anweisung anschauen. Die wird bei jedem Durchlauf geprüft und ich könnte mit vorstellen, das die mehrfache Prüfung der If-Anweisung doch schon etwas an Zeit verbraucht...


    Die Prozentzahl wird in meiner Forschleife berechnet, wenn sie 5% weiter ist, wird die Progressbar geändert, allerdings da es in der Forschleife steht, kann ich mir natürlch schwer vorstellne, dass hier die dauer ist, da hier ja nach jedem Zeichen bestimmt wird, ob eine Variante zutrifft.


    Zitat von autoBert

    bei solchen Spielereien:

    Code
    $posRandomName = Random($int*0.1,$int*0.9,1)
    			Do
    				$posRandomTimer = Random($int*0.1,$int*0.9,1)
    			Until $posRandomName <> $posRandomTimer

    braucht man sich nicht wundern, daß das Skript zwar eine CPU 100% auslastet aber trotzdem schläft.

    Die CPu steht nie bei 100% sie tümpelt max. bei 25% rum und zwatr auf einem Kern, nicht 25% verteilt auf allen 8 Kernen.

    Zitat von Oscar

    Genau! Die For...Next-Schleife muss so wenig Befehle wie möglich enthalten. Jeder einzelne Befehl in dieser Schleife wird 10.000.000 mal ausgeführt.
    Und solche komplexen If-Anweisungen sind da sehr rechenintensiv.
    Hier mal ein Beispiel, wie das schonmal sehr viel schneller geht:

    AutoIt
    Global $iCount = 10000000
    Global $sText = ''
    HotKeySet('{ESC}', '_Stop')
    
    
    Global $aChar[95]
    For $i = 0 To 94
    	$aChar[$i] = Chr(33 + $i)
    Next
    
    
    Global $iTimer = TimerInit()
    AdlibRegister('_Progress', 500)
    For $i = 1 To $iCount
    	$sText &= $aChar[Random(0, 94, 1)]
    Next
    ToolTip('')
    MsgBox(0, '', Round(TimerDiff($iTimer)/1000, 2) & ' sek.')
    
    
    Func _Stop()
    	Exit
    EndFunc
    
    
    Func _Progress()
    	ToolTip(Int(100 / $iCount * $i) & '%', Default, Default, 'Progress', 1, 1)
    EndFunc
    Alles anzeigen

    Aber wahrscheinlich kontert Andy gleich mit einer Assembler-Variante. :D

    Das lässt mich jetzt schlussfolgern, dass ich mehrere Forschleifen unterienander in die Funktion packe, nach Beendigung einer Schleife den String sichere, die Progressbar anpasse und die nächste Schleife abgehe, sollte schneller sein, wird gleich ausprobiert.

    Zitat von autoBert

    Das Skript und die Beschreibung aus dem Eröffnungsbeitrag passen nicht zueinander. Vor allem scheint die gepostete Funktion eine Encryption-Mehode zu sein, siehe

    Code
    GUICtrlSetData($lb_Progress,"Encrypt: Please wait... " & $new_perc & "%")

    Mein alter Kopf ist allerdings noch nicht dahintergekommen wie sie funktionieren soll. :/
    Aber für encrypt gibt es ja schon _Crypt_EncryptData.

    Hier eine Methode die dem Eröffnungsbeitrag entspricht:

    Code
    $s1=''
    $dtStart=TimerInit()
    For $i = 1 To 100000
    	$s1 &= Chr(Random(0, 255, 1))
    Next
    ConsoleWrite(TimerDiff($dtStart)&@CRLF)
    $dtStart=TimerInit()
    $hFile = FileOpen('random.tst',2)
    for $i=1 to 100
    	FileWrite($hFile,$s1)
    Next
    FileClose($hFile)
    ConsoleWrite(TimerDiff($dtStart)&@CRLF)
    Alles anzeigen

    Mein Netbook braucht dafür keine Sekunde. Diesen zufälligen Text auch noch zu encrypten erschien mir unnötig. Eine Fortschrittsanzeige würde mehr Laufzeit verschwenden als das Skript benötigt, also auch weggelassen.
    Übrigens anders als beim Skript des TE's werden die Daten wirklich in eine Datei geschrieben.

    Ja das ganze hat was mit Encryption zutun, allerdings wird die erzeugte Datei, die mit 10Mio. Zufallszeichen beschrieben wird erst am Ende richtig mit 256bit aes und einem Zufallskennwort mit 256bit verschlüsselt.
    Da das ganze bei 100% so schnell geht, hab ich den Text mit "Encrypt: Succesfull..." in die Funktion gepackt.


    So also ich teste jetzt mal das ganze mit mehrenen Forschleifen und werde berichten. :thumbup:

    Ich dnake euch schonmal

  • CPU effektiver bei Script Ausführung einsetzten

    • MadCatz
    • 29. Februar 2016 um 13:59

    Hi, hier der ScriptPart :)

    AutoIt
    unc _TextGenerate()
    	Local $i
    	Local $int = 10000000
    	Local $perc = 100/$int
    	Local $new_perc = 0
    	Local $posRandomName
    	Local $posRandomTimer
    	Local $shardcoded
    	Local $posName
    	Local $posTimer
    
    
    	GUICtrlSetData($pb_Progress, $new_perc)
    	GUICtrlSetData($lb_Progress,"Encrypt: Please wait... " & $new_perc & "%")
    	For $i = 1 To $int
    		$shardcoded &= Chr (Random(33, 127, 1))
    		If $i = $int*0.05 or $i = $int*0.10 or $i = $int*0.15 or $i = $int*0.20 or $i = $int*0.25 _
    			or $i = $int*0.30 or $i = $int*0.35 or $i = $int*0.40 or $i = $int*0.45 or $i = $int*0.50 _
    			or $i = $int*0.55 or $i = $int*0.60 or $i = $int*0.65 or $i = $int*0.70 or $i = $int*0.75 _
    			or $i = $int*0.80 or $i = $int*0.85 or $i = $int*0.90 or $i = $int*0.95 then
    			$new_perc = $perc * $i
    			GUICtrlSetData($pb_Progress,$new_perc)
    			GUICtrlSetData($lb_Progress,"Encrypt: Please wait... " & $new_perc & "%")
    		ElseIf $i = $int*1.00 then
    			$new_perc = $perc * $i
    			$posRandomName = Random($int*0.1,$int*0.9,1)
    			Do
    				$posRandomTimer = Random($int*0.1,$int*0.9,1)
    			Until $posRandomName <> $posRandomTimer
    			GUICtrlSetData($pb_Progress, $new_perc)
    			GUICtrlSetData($lb_Progress,"Encrypt: Successful... " & $new_perc & "%")
    			Local $a
    			$posName = _StringInsert($shardcoded, $sUserRead_First & $sUserRead_Last, $posRandomName)
    			$posTimer = _StringInsert($posName, $calReadTime, $posRandomTimer)
    		Endif
    	Next
    	Return($posTimer)
    EndFunc ;==> _TextGenerate()
    Alles anzeigen
    Zitat von BugFix

    Schreibe die Datei mit 4 (oder mehr) Skripten gleichzeitig. Also jeweils ein Viertel der erforderlichen Zeichen in eine Datei und am Ende fügst du die Dateien zusammen.

    da hat ich schon drangedacht, es aber wieder aus verschiedenen Gründen verworfen.

  • CPU effektiver bei Script Ausführung einsetzten

    • MadCatz
    • 29. Februar 2016 um 11:47

    Hallo Leute,

    ich hab eine text datei, die mit 10mio. zufallszeichen beschrieben wird. Jetzt ist es allerdings so, dass dieser Prozess sehr lange dauert, da nur eine CPU verwendet wird und diese auch nur zu max. 25% ausgelastet wird.
    Gibt es eine Möglichkeit, dass das Ganze schneller abläuft, ohne die Zeichenanzahl senken zu müssen?


    Viele Grüße,
    MadCatz

  • SQLite Hilfe benötigt

    • MadCatz
    • 26. Februar 2016 um 21:55
    Zitat von BugFix

    Welchen Wert hat jetzt $sSQLiteDatabase  ? RICHTIG: den Rückgabewert der Funktion Filewrite! Und der ist... - Problem erkannt?

    Fu** hast recht, nach Stunden auf den Bildschirm schauen hab ich das nicht gesehen -.-

    Edit:

    Das im Verbund mit:

    Zitat von 4ern

    Versuch mal für jeden SQL Befehl ein eigenes exec. Hatte auch mal Probleme, das er das gebündelt nicht macht...

    hat funktioniert :)


    Vielen Dank an euch alle für die sehr sehr schnelle Hilfe :)

  • SQLite Hilfe benötigt

    • MadCatz
    • 26. Februar 2016 um 21:14

    Hallo Leute,

    in einem kleinen Part meines Scripts hat sich ein Fehler eingeschlichen. Dieser Verursacht, dass keine Daten in meine SQLiteDatabase geschrieben werden, aber ich find diesen einfach nicht :/

    alles läuft wunderbar bis zudem Part wo Daten geschrieben werden sollen. Als @error erhalte ich eine "0" zurück, was ja bedeuten würde, dass alles klappt.

    Das ist auch alles an Code, welcher mit SQLite arbeitet. Um zu testen ob ein Fehler in meinem Code war hab ich den Code durch den der Hilfe Datei bei "_SQLite_Exec" eingefügt, allerdings besteht auch hier dieses Problem.
    Ich hoffe mir kann geholfen werden :)

    Viele Grüße,
    MadCatz


    Edit:

    Hoffe ich hab nicht vergessen eine Variable mit reinzupasten :)


    AutoIt
    #include <ComboConstants.au3>
    #include <Crypt.au3>
    #include <GUIConstantsEx.au3>
    #include <MsgBoxConstants.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <SQLite.au3>
    #include <SQLite.dll.au3>
    #include <String.au3>
    #include <StringConstants.au3>
    
    
    Global $sWorkingPath = @WorkingDir
    Global $sEncryptXDatabase = $sWorkingPath & "\EncryptXDatabase.db"
    
    
    If Not FileExists($sEncryptXDatabase) Then					; Checks whether EncryptX.db exists
    	Local $a = _SQLite_Startup()
    	Local $sSQLiteDatabase = FileWrite($sEncryptXDatabase,"")
    	Local $a = _SQLite_Open($sSQLiteDatabase)
    	Sleep(1000)
    	Local $c = _SQLite_Exec($a, "Create table tblTest (a,b int,c single not null);" & _
            "Insert into tblTest values ('1',2,3);" & _
            "Insert into tblTest values (Null,5,6);")
    		MsgBox(0,0,$c & " | " & @error,0)
    		_SQLite_Close()
    	FileWriteLine($sWorkingPath &"\path.nfo", "PathDatabase = " & $sEncryptXDatabase)
    Endif
    Alles anzeigen
  • Datei nur in Arbeitsspeicher laden

    • MadCatz
    • 26. Februar 2016 um 15:42

    Alles klar :)

  • Datei nur in Arbeitsspeicher laden

    • MadCatz
    • 26. Februar 2016 um 10:12

    Das funktioniert doch nur mit .ini/.dat/.txt wenn ich mich recht erinnere oder vertue ich mich da?

  • Datei nur in Arbeitsspeicher laden

    • MadCatz
    • 26. Februar 2016 um 09:43

    Hallo Leute,

    ich hab eine Datei (jpeg, pdf, png etc.) die auf der Festplatte liegt. Diese würde ich nun gerne in den Arbeitspeicher laden, also nicht wirklich reinschreiben, von der Festplatte soll die Datei dabei verschwinden und nach nach einer Bedingung wieder vom Arbeitsspeicher zurück auf die Festplatte.


    Gibt es da eine Möglichkeit? Memory.au3 geht da glaub ich nicht :/


    Viele Grüße,
    MadCatz

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™