Ja genau, die MsgBox war hier nur als Beispiel.
Beiträge von Oscar
-
-
Für das erstellen eines Wörterbuchs mit Häufigkeit der Wörter ist das Scripting.Dictionary-Objekt ideal:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#include <Array.au3>
#include <Inet.au3>$sText = _INetGetSource("http://www.autoit.de/index.php?page=Thread&threadID=14844")
[/autoit] [autoit][/autoit] [autoit]
MsgBox(0,"Start","Jetzt geht's los!")
$tDiff = TimerInit()
$aText = _CreateWordDictionary($sText)
ConsoleWrite("Dauer: " & TimerDiff($tDiff) & @CR)
_ArraySort($aText, 1, 0, 0, 1)
_ArrayDisplay($aText)Func _CreateWordDictionary($sText)
[/autoit]
Local $oDictionary, $aWords, $iCount
If $sText = '' Then Return SetError(1, 0, 0)
$sText = StringRegExpReplace($sText, '[\v\t]', '') ; alle vertikalen Whitespaces sowie alle TABs entfernen
$oDictionary = ObjCreate('Scripting.Dictionary') ; Scripting.Dictionary-Objekt erstellen
If Not IsObj($oDictionary) Then Return SetError(2, 0, 0)
$aWords = StringSplit($sText, ' ', 2) ; Text an Leerzeichen splitten
For $i = 0 To UBound($aWords) - 1 ; alle Wörter durchgehen
If $aWords[$i] <> '' Then
If Not $oDictionary.Exists($aWords[$i]) Then ; wenn das Wort noch nicht im Dictionary vorhanden, dann...
$oDictionary.Add($aWords[$i], 1) ; das Wort hinzufügen und den Wert der Häufigkeit auf 1 setzen
Else
$oDictionary.Item($aWords[$i]) = $oDictionary.Item($aWords[$i]) + 1 ; das Wort war vorhanden, also den Zähler erhöhen
EndIf
EndIf
Next
$iCount = $oDictionary.Count ; Anzahl der Wörter im Wörterbuch holen
Local $aOut[$iCount][2] ; 2D Array erstellen
$x = 0
For $strKey in $oDictionary.Keys ; Schleife für die Wörter (Key)
$aOut[$x][0] = $strKey ; die Wörter dem Array zuweisen
$x += 1
Next
$x = 0
For $strItem in $oDictionary.Items ; Schleife für die Häufigkeit (Item)
$aOut[$x][1] = $strItem ; die Häufigkeit dem Array zuweisen
$x += 1
Next
Return $aOut ; das Array zurückgeben
EndFunc -
So, das mit der Laufzeit ist jetzt (hoffentlich) behoben.
Außerdem gibt es jetzt die Möglichkeit den Starplayer als Standard-MP3-Player registrieren zu lassen.Neue Version in Post #1.
Jetzt bin ich mit meinem Player eigentlich zufrieden. Es sei denn, euch fällt noch was ein...

-
Hmmm...eine Textdatei hat Spalten?

Poste doch mal eine Beispieldatei, dann kann man Dir leichter helfen.
-
Ok, hier die kommentierte Version:
[autoit]
[/autoit]
#include <Date.au3>
$start = _DateAdd('h', 2, _NowCalc()) ; zwei Stunden zum jetzigen Datum/Uhrzeit addieren
Do
Sleep(500) ; dieser Sleep ist nur dazu da, um den Prozessor zu entlasten
Until $start = _NowCalc() ; die Schleife wird verlassen, wenn das aktuelle Datum/Uhrzeit mit dem Startwert übereinstimmt
MsgBox(0,'', 'Start') ; hier kannst Du die Befehle einfügen, die nach 2 Stunden ausgeführt werden sollen -
Doch das geht:
[autoit]
[/autoit]
#include <Date.au3>
$start = _DateAdd('h', 2, _NowCalc())
Do
Sleep(500)
Until $start = _NowCalc()
MsgBox(0,'', 'Start') -
Benutze dafür "AutoIt3Wrapper_Gui.exe". Dort kannst Du noch viel mehr einstellen.
Das Programm findest Du im Verzeichnis: "AutoIt3\SciTE\AutoIt3Wrapper\". -
Hast Du die aktuelle (3.3.0.0) AutoIt-Version?
-
Die von Dir gefundene Funktion gibt aber nicht die Laufzeit zurück.

Aber da gibt es eine "neuere" (30.12.2004) Version von mit der Laufzeit. Das muss ich mal testen...
-
Wenn Du an Deiner Behauptung festhälst, dann wollen wir Beweise sehen.

-
Da hat keiner was gegen. Dafür veröffentlichen wir sie doch hier.
Wir haben auch so gelernt, indem wir uns die Scripte von anderen angesehen und dann damit rumexperimentiert haben.Es kann aber auch nicht schaden, wenn Du Dein eigenes Programm fertig machst. Man lernt sehr viel dabei. Auch wenn es bereits andere Programme in der Art gibt.
Das habe ich auch schon oft gemacht. Manchmal war das Ergebnis dann sogar besser (IMHO).
-
Jo, das ist das coolere Programm. Jetzt sogar mit Komprimierung.
Hast Du gut gemacht, aber das mit den relativen Pfaden ist noch fehlerhaft, weil, wenn ich einen ganzen Ordner komprimiere dann will ich beim Wiederherstellen auch den Ordner wiederhaben, nicht nur die Dateien.
Oder das muss auswählbar sein.
-
und mit meinen neuen Funktionen kann ich sie auch noch komprimieren

Aber keine Binärdaten.
Mit dem "cooler" wollte ich auch auf etwas anderes anspielen, aber mehr verrate ich noch nicht.

-
Für Textdateien, ok, aber bei Binärdaten wird das nicht funktionieren.
Dort gibt es keine "Leerzeichen" und "Wörter". -
Ja, Dein Thread hat mich auf die Idee gebracht. Es hat mich halt interessiert, wie man das umsetzen kann.
Aber ich weiß etwas, was noch viel cooler ist...
-
Das Array $ergebnis wird nirgends deklariert.
-
FileReadLine ist Dein Freund.
Zitat aus der Hilfe:ZitatThe line number to read. The first line of a text file is line 1 (not zero), last line is -1.
Edit: Achso, benutzt Du ja schon. Wo ist dann das Problem?
Edit2: Ach, gesehen...zum lesen musst Du die Datei mit dem Parameter "0" öffnen, nicht mit "2", die ist zum schreiben. Oder Du musst die neue Beta-Version benutzen.

-
Hmm...vielleicht so:
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <EditConstants.au3>
#include <StructureConstants.au3>
#include <WinAPI.au3>Global $eventCount = 0
[/autoit] [autoit][/autoit] [autoit]
$sHeader = "Input1|Input2|Input3"
Global $hGui = GUICreate("", 400, 400, -1, -1)
Global $hButton = GUICtrlCreateButton('Test', 10, 10, 100, 20)
Global $aHeader = StringSplit($sHeader, '|') ; Überschriften-Array
Global $aNew[$aHeader[0]] ; Array für die Input-IDs
Global $aInputWidth[$aHeader[0]] = [100, 100, 100] ; hier die Länge (in Pixel) der Inputfelder eintragen
Global $xPos = 20
For $i = 1 To $aHeader[0]
GUICtrlCreateLabel($aHeader[$i], $xPos + 2, 200, 110, 20) ; Überschriften-Label erstellen
GUICtrlSetFont(-1, 8, 400, 0, 'Verdana') ; Schriftgröße und -art der Überschriften festlegen
$aNew[$i - 1] = GUICtrlCreateInput("", $xPos, 220, $aInputWidth[$i - 1], 20, Default, $WS_EX_STATICEDGE) ; Eingabefelder erstellen
GUICtrlSetFont(-1, 10, 600, 0, 'Verdana') ; Schriftgröße und -art der Eingabefelder festlegen
$xPos += $aInputWidth[$i - 1] + 5
NextGUISetState(@SW_SHOW, $hGui)
[/autoit] [autoit][/autoit] [autoit]
GUIRegisterMsg($WM_Command, "WM_COMMAND")While 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg(1) ; Message-Event holen (1) = erweiterter ModusSwitch $nMsg[0] ; anhand der Control-ID das entsprechende Case aufrufen
[/autoit] [autoit][/autoit] [autoit]
Case $aNew[0]
GUICtrlSetState($aNew[1], $GUI_FOCUS)
#Region Schließen
Case $GUI_EVENT_CLOSE ; User hat auf das Schließen-Symbol geklickt (bzw. die ESC-Taste gedrückt)
Switch $nMsg[1] ; erweiterte Abfrage für welches Fenster
Case $hGui ; User will das Hauptfenster schließen
ExitEndSwitch
[/autoit] [autoit][/autoit] [autoit]#EndRegion Schließen
[/autoit] [autoit][/autoit] [autoit]
EndSwitchWEnd
[/autoit] [autoit][/autoit] [autoit]Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
[/autoit] [autoit][/autoit] [autoit]
Local $hwndFrom, $iIDFrom, $iCode
$iIDFrom = BitAND($iwParam, 0xFFFF) ; Low Word
$iCode = BitShift($iwParam, 16) ; Hi Word
If $iCode = 0 Then
Send('{TAB}')
If ControlGetFocus($hGui) = 'Edit3' Then Send('{TAB}')
Return 1
EndIf
;~ Switch $iIDFrom
;~ case $anew[0]
;~ switch $iCode
;~ case 0
;~ GUICtrlSetState($aNew[1], $GUI_FOCUS)
;~ EndSwitch
;~ case $anew[1]
;~ switch $icode
;~ case 0
;~ GUICtrlSetState($aNew[2], $GUI_FOCUS)
;~ EndSwitch
;~ case $anew[2]
;~ switch $iCode
;~ case 0
;~ GUICtrlSetState($aNew[0], $GUI_FOCUS)
;~ EndSwitch;~ EndSwitch
[/autoit]
Return $GUI_RUNDEFMSG
EndFunc ;==>WM_COMMAND
Hab jetzt noch einen Button hinzugefügt, um Dir zu zeigen, wie man den Focus auch dann noch wieder auf das erste Input bekommt. -
Meinst Du so:
[autoit]
[/autoit][autoit][/autoit][autoit]
#include <Array.au3>
$ip1 = "192.168.1."
$ip2 = "192.169.1."Global $aPC1[6], $aPC2[6]
[/autoit]
For $i = 10 To 15
$aPC1[$i-10] = $ip1 & $i
$aPC2[$i-10] = $ip2 & $i
Next
_ArrayDisplay($aPC1)
_ArrayDisplay($aPC2) -
Hier kommt das ultimative Packprogramm.
Es spart so gut wie nix ein. Ok, wenn viele kleine Dateien gepackt werden, dann spart es ein paar Bytes ein, weil es dann u.U. weniger Cluster auf der Festplatte belegt.
Erstellt werden ZAP-Archive. Als Dateiendung habe ich mir ".zap" ausgedacht (naheliegend, oder?
). Das Programm erkennt ein solches Archiv aber auch, wenn es eine andere Dateiendung besitzt.Eigentlich wollte ich nur mal testen, wie man sowas umsetzen kann.

Hier die Features:
- Dateien und Verzeichnisse (werden rekursiv hinzugefügt) können per Drag and Drop auf eines der Listviews gezogen werden.
- Wenn man ein ZAP-Archiv auf das Listview zieht, wird das automatisch erkannt und dem richtigen Listview zugeordnet.
- Die Dateien können aus dem Archiv wiederhergestellt werden (frisch wie das Original). (Ach!)
Die Pack- und Entpackfunktion habe ich mal kommentiert. Vielleicht kann das ja jemand gebrauchen.Wenn ihr das Programm mit Komprimierungsfunktion haben wollt: ZAX UnPacker
