Persönlich hab ich den chcp Befehl noch nie verwendet, aber solltest du diesen nicht besser wie auf dieser Seite beschrieben nutzen?
Beiträge von John8
-
-
Hi,
wenn du viel Wert auf Performance legst würde ich die ganz normale Array-Variante vorziehen.
_ArrayAdd(...) braucht (wahrscheinlich) aufgrund des ständigen ReDims extrem lange, StringSplit(...) muss den Datensatz zum Schluss nochmals abarbeiten, deshalb ist auch diese Variante (etwas) langsamer als die Array Version.
Hier mal ein Testskript, _E3() ist wie schon geschrieben am schnellsten:#include <Array.au3>
Global Const $iPasses = 10000
_E1()
_E2()
_E3() ; => Am schnellsten!Func _E1()
Local $hTimer, $sString, $aArray
$hTimer = TimerInit()
For $i = 0 To $iPasses
$sString &= $i & '|'
Next
$aArray = StringSplit($sString, '|', 2)
MsgBox(64, 'Finished E1 (StringSplit)', 'Time (ms): ' & Round(TimerDiff($hTimer), 2))
;_ArrayDisplay($aArray)
EndFuncFunc _E2()
Local $hTimer, $aArray[1]
$hTimer = TimerInit()
For $i = 1 To $iPasses
_ArrayAdd($aArray, $i)
Next
MsgBox(64, 'Finished E2 (_ArrayAdd)', 'Time (ms): ' & Round(TimerDiff($hTimer), 2))
;_ArrayDisplay($aArray)
EndFuncFunc _E3()
Local $hTimer, $aArray[$iPasses]
$hTimer = TimerInit()
For $i = 0 To $iPasses-1
$aArray[$i] = $i
Next
MsgBox(64, 'Finished E3 (Array)', 'Time (ms): ' & Round(TimerDiff($hTimer), 2))
;_ArrayDisplay($aArray)
EndFunc -
Zitat
Muss ich dazu FileRead und strininstring machen oder gibt es eine bessere Möglichkeit?
Ja, das wäre schon mal eine Möglichkeit.
Ich glaube aber, dass es noch besser (schneller) wäre, größere Dateien zuerst in einzelne Zeilen/Abschnitte zu zerlegen.
Eine Alternative zu StringInStr(...) wäre dabei StringRegExp(...), da reguläre Ausdrücke genutzt werden können und somit auch beispielsweise leicht nach mehreren Strings gesucht werden kann.Google sollte dir dabei auch helfen, besonders einige Links zum englischen Forum.
Ansonsten gibt es schon derartige Suchprogramme, die schneller sind als sämtliche (pure) AutoIt Versionen, wie z.B. SearchMyFiles.
-
Moin,
was meinst du mit String in dem Fall? Kann doch prinzipiell alles sein...
Möchtest du zwischen Zahlen und Buchstaben unterscheiden?
Oder eine Suchfunktion, die Dateien nach einer bestimmten (vom Benutzer) angegebenen Zeichenkette durchsucht? -
Hi Oscar,
danke, funktioniert gut!
-
-
Zitat von chesstiger
Genau genommen ist es das ja auch, aber GUICtrlCreate... gibt ja nunmal ein Handle zurück.
Wenn man es allerdings ganz genau nimmt, sollte man aber $id für AutoIt-Controls verwenden, oder?Zitat von www.autoitscript.com/wiki/UDF-spec$h - Handle, usually to a file or window. NB: AutoIt handled controls return IDs, and so use $id instead.
$id - An AutoIt control Id.Edit: Ok, hast du ja schon editiert.
-
Frohes Neues an alle!
-
Zitat
Naja...wie zu erwarten wurden keine Abgaben getätigt. Somit ist diese Challenge gewinnerlos beendet, die Preise hab ich anderoweitig verschenkt.
Gun-Food bitte schliessen
Hm, finde ich irgendwie schade, auch wenn ich selbst nicht mitgemacht habe (einfach keine Idee gehabt).
Hast dir ja auch Mühe gegeben. -
Willkommen im Forum!
-
Hi,
find's auch gut, da könnte man sich dran gewöhnen.
-
Ich bin mir noch nicht richtig sicher, finde aber großen Gefallen an der AR.Drone.
Mal schauen. -
-
Zitat von Make-Grafik
>> Aber ich möchte auch die Registry Einträge dazu haben. (Um mit Rechtsklick auf den entsprechenden Rechner agieren zu können)
Das macht meiner Meinung nach nicht viel Sinn für ein portables AutoIt.
Für mich heißt portabel, dass gerade diese Registry Einträge nicht genutzt/erstellt werden und das Programm keine (wenige) eigenen Spuren auf dem PC hinterlässt (oft auch aufgrund fehlender Rechte).
Da könntest du doch genauso gut den offiziellen Installer auf dem Zielrechner nutzen, wenn du sowieso schon Registry Einträge vornimmst.Dir sollten allerdings Programme wie Smarty Uninstaller oder Advanced Uninstaller, die eine Installation dokumentieren, dabei helfen.
Auch nützlich kann Procmon.exe aus der SysinternalsSuite (btw sehr gute Programmsammlung) sein, denn das Programm hört ab, welche Änderungen ein Prozess am PC vornimmt. -
Hi,
den Code bitte demnächst in einen Spoiler mit AutoIt Tags setzen.
Bei GUICreate(...)sind eckige Klammern, die da gar nicht hingehören.
In der Hilfe verdeutlichen diese nur, dass die Parameter nicht zwangsläufig gesetzt werden müssen, sprich optional sind.
Deshalb kann man sie in deinem Fall ganz weglassen.#include <GUIConstantsEx.au3>
Opt('MustDeclareVars', 1)
Player()
Func Player()
Local $Button_1, $Button_2, $msg
GUICreate("Bruch&Dalles Player", 400, 300)Opt("GUICoordMode", 2)
$Button_1 = GUICtrlCreateButton("Notepad ausführen", 10, 30, 100)
$Button_2 = GUICtrlCreateButton("Button Test", 0, -1)GUISetState() ; Zeigt eine Dialogbox mit 2 Buttons an
; Die Schleife wiederholt sich, bis der Benutzer eine Beenden-Aktion auslöst
While 1
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
ExitLoop
Case $Button_1
Run('Notepad.exe') ; Öffnet Notepad
Case $Button_2
MsgBox(0, 'Test', 'Button 2 wurde gedrückt') ; Zeigt, dass Button2 gedrückt wurde
EndSwitch
WEnd
EndFunc ;==>Player
Edit:
Mist, zu langsam. -
Hi,
schau dir mal die Hilfe zu HotKeySet ( "key" [, "function"] ) an, da ist ein Beispielcode, der den komplette Skript pausiert.
-
-
Siehe Edit meines letzten Posts, habe noch nachträglich editiert, das mit der Statusbar habe ich zuerst überlesen.
-
Hi,
ZitatBeispiel: Die Idee war eine Progessbar so lange durch laufen zulassen bis ShellExecute fertig ist.
Das wird leider kaum möglich sein, da du ja nicht abschätzen kannst, wann ein externes Programm mit ShellExecute(...) gestartet ist.
Folglich bringt eine Progressbar nichts und sie wird nur von 0 auf 100 "springen".Die If-Bedingung
If $execute = 0 then
wird außerdem nie ausgeführt (oder nur wenn ein Fehler bei ShellExecute vorliegt), da der Wert von ShellExecute in eine Variable geladen wird, die sich nicht automatisch aktualisiert.
-
Willkommen und viel Spaß im Forum, Gurkenbier!
Lustiger Nickname...