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

Beiträge von K4z

  • Fehler in der deutschen Hilfe bitte hier melden (Hilfedatei 3.3.8.1 2012.12.28)

    • K4z
    • 28. Dezember 2012 um 22:52

    Bei assign:
    "1 = Erzwungende Erstellung im lokalen Bereich
    2 = Erzwungende Erstellung im globalen Bereich"

    Sollte wohl eher "Erzwungene" heißen...

    EDIT: Ferner würde ich die Bemerkung vielleicht etwas "freier" übersetzten, z.B.:
    "Wenn es nötig ist eine Variable mit Assign() zu erstellen oder ihr einen Wert zuzuweisen, dann sollte in den meisten Situationen Eval() verwendet werden, um die Variable auszulesen und IsDeclared(), um zu prüfen ob die Variable existiert."
    Aber das ist völlig nebensächlich, der Inhalt verändert sich dadurch ja nicht wirklich.

  • Coole Bilder berechnen (Domain coloring / complex numbers) (Assembler)

    • K4z
    • 28. Dezember 2012 um 14:11

    Naja im Grunde genommen ist es einfach eine Art komplexe Funktionen darzustellen. Eine reelle Funktion lässt sich ja in einem 2 dimensionalen kartesischen Koordinatensystem darstellen. Wenn man eine komplexe Zahl darstellen möchte, braucht man wiederum ein 2 dimensionales Koordinatensystem; eine Achse mit imaginären Anteil, eine mit reellem. Wenn man nun eine komplexe Funktion darstellen möchte, bräuchte man also ein 4 dimensionales Koordinatensystem. Da das nicht möglich ist bedient man sich beim Domain Coloring einer anderen Technik.
    Eine komplexe Zahl z=a+bi lässt sich auch in ihren Polarkoordinaten darstellen: z = re^iθ, wobei r die Länge des Vektors im komplexen Koordinatensystem und θ der Winkel zur positiven reellen Achse ist.
    Nun stellt man beim Domain Coloring den Winkel als Farbwert und r als Farbintensität dar.
    Mit dieser Technik lassen sich also nun komplexe Funktionen darstellen.

    Ich hoffe ich konnte mich verständlich genug ausdrücken und peitsch mich bitte aus, falls ich irgendeinen Schwachsinn verzapft hab:D
    mfg K4z

  • Coole Bilder berechnen (Domain coloring / complex numbers) (Assembler)

    • K4z
    • 27. Dezember 2012 um 10:18

    Könnte man das nicht als Grundlage nehmen um vom Benutzer eingegebene komplexe Funktionen zu plotten?
    Du machst im Grunde ja nichts anderes, als zufällig generierte komplexe Funktionen per domain coloring zu zeichnen, oder hab ich da was falsch verstanden?
    Auf jeden Fall klasse Arbeit!

  • Zwischenablage in JPEG oder HTML

    • K4z
    • 12. Oktober 2012 um 15:36

    Benutz doch einfach die _ScreenCapture-Befehle.

  • Funktionen

    • K4z
    • 9. Oktober 2012 um 22:49

    Im Grunde genommen haben wir genau das selbe:)
    Gibt es eigentlich irgend einen Unterschied zwischen %i und %d bei StringFormat?

  • Funktionen

    • K4z
    • 9. Oktober 2012 um 22:42

    Das wäre eine Möglichkeit:

    Spoiler anzeigen
    [autoit]

    MsgBox(0, "", GetName())

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

    Func GetName()
    Return "K4z"
    EndFunc

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

    ; -----

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

    MsgBox(0, "", GetDate("2", "3", "12"))

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

    Func GetDate($vDay, $vMonth, $vYear)
    If $vYear < 100 Then $vYear = 20&$vYear
    Return StringFormat("%.2d-%.2d-%d", $vDay, $vMonth, $vYear)
    EndFunc

    [/autoit]
  • Array nach der Häufigkeit des Inhaltes sortieren

    • K4z
    • 8. Oktober 2012 um 18:07

    Da mir langweilig ist und ich mal wieder was mit AutoIt machen wollt, hier mal wie man das mit Scripting.Dictionary lösen könnte:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    Dim $aArray[10000]
    For $iI = 0 To 9999 ; Array befüllen
    $aArray[$iI] = Chr(Random(65, 122, 1))
    Next

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

    $aSort = _Sort($aArray, 1)
    _ArrayDisplay($aSort)

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

    Func _Sort(ByRef $aArray, $iDescending = 0)
    Local $oCompareList = ObjCreate("Scripting.Dictionary")
    For $iI = 0 To UBound($aArray)-1 ; Keys & Items in das Dictionary eintragen
    If $oCompareList.Exists($aArray[$iI]) Then
    $oCompareList.Item($aArray[$iI]) = $oCompareList.Item($aArray[$iI]) + 1
    Else
    $oCompareList.Add($aArray[$iI], 1)
    EndIf
    Next
    Dim $aCompare[$oCompareList.Count][2], $aKeys = $oCompareList.Keys
    $iCount = 0
    For $sKey In $oCompareList.Keys ; Keys & Items in ein 2D-Array schreiben
    $aCompare[$iCount][0] = $sKey
    $aCompare[$iCount][1] = $oCompareList.Item($sKey)
    $iCount += 1
    Next
    _ArraySort($aCompare, $iDescending, 0, 0, 1)
    Return $aCompare
    EndFunc

    [/autoit]
    Zitat

    Es gibt sicher Einsatzvarianten, wo das Sinn macht.


    Man könnte z.B. die Buchstabenhäufigkeit messen:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    $sString = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec non convallis sem." & _
    "Morbi pharetra diam vitae massa aliquet ac ultrices odio sagittis." & _
    "Vivamus tempus dapibus risus, vitae mattis diam laoreet id." & _
    "Donec egestas malesuada odio, eget varius sem interdum at. Duis lobortis tristique augue id interdum." & _
    "Maecenas bibendum erat eget odio placerat mollis. Praesent aliquet congue felis, ac mattis libero ornare aliquet." & _
    "Vestibulum ultrices placerat dui nec auctor."
    $aArray = StringSplit($sString, "", 2)

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

    $aSort = _Sort($aArray, 1)
    _ArrayDisplay($aSort)

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

    Func _Sort(ByRef $aArray, $iDescending = 0)
    Local $oCompareList = ObjCreate("Scripting.Dictionary")
    For $iI = 0 To UBound($aArray)-1 ; Keys & Items in das Dictionary eintragen
    If $oCompareList.Exists($aArray[$iI]) Then
    $oCompareList.Item($aArray[$iI]) = $oCompareList.Item($aArray[$iI]) + 1
    Else
    $oCompareList.Add($aArray[$iI], 1)
    EndIf
    Next
    Dim $aCompare[$oCompareList.Count][2], $aKeys = $oCompareList.Keys
    $iCount = 0
    For $sKey In $oCompareList.Keys ; Keys & Items in ein 2D-Array schreiben
    $aCompare[$iCount][0] = $sKey
    $aCompare[$iCount][1] = $oCompareList.Item($sKey)
    $iCount += 1
    Next
    _ArraySort($aCompare, $iDescending, 0, 0, 1)
    Return $aCompare
    EndFunc

    [/autoit]

    Edit: Vielleicht meinte BugFix mit "Aber in der Regel ist man dort mit einem anderen Datentyp besser bedient. " so etwas.

  • StringRegExp Problem

    • K4z
    • 7. Oktober 2012 um 22:01

    So müssts gehn, ich kanns grad nich testen:

    [autoit]

    #include <Array.au3>

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

    $input = InputBox("Daten eingeben", "Daten eingeben :")
    $aStrreg = StringRegExp($input,'(?:<span title="(.+)"><a href=".+">.+</a></span>)|(?:<a href=".+">(.+)</a>)' , 3)
    _ArrayDisplay($aStrreg)

    [/autoit]
  • Studium, Hochsprachen und was euch sonst noch so einfällt :-)

    • K4z
    • 19. September 2012 um 20:46

    Ich bin jetzt dieses Jahr mit meinem Abi fertig geworden und hatte davor eigentlich auch immer im Sinn Informatik zu studieren. Ich fang nun jedoch ein Studium in Elektor -und Informationstechnik an, für das sehr viele verschiedene Gründe gibt. Vielleicht ist es ja auch etwas für dich. Du kannst dich ja mal an diversen FHs und Unis informieren.

    mfg K4z

  • Shutdown feststellen

    • K4z
    • 7. September 2012 um 17:10

    Vielleicht lässt sich das umsetzen.

  • aus array bestimmte werte löschen

    • K4z
    • 6. September 2012 um 13:23

    Du könntest das ganze auch mit Hilfe eines Strings machen. Ich weiß jetzt nicht wie viel wert du auf Geschwindigkeit setzt, aber bei _ArrayDelete wird halt jedes mal das Array neu dimensioniert. Hier auf jeden Fall mal eine Version mit nem String:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    Dim $aArray[10] = [9, "CN=E33494C", "OU=6_x_180", "OU=6_28_x", "OU=Computers-64", "OU=HAM", "OU=W120", "DC=W120", "DC=home", "DC=net"]

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

    $sResult = ""
    For $iI = 1 To $aArray[0]
    If StringLeft($aArray[$iI], 2) = "OU" Then $sResult &= $aArray[$iI]&","
    Next
    $aResult = StringSplit(StringTrimRight($sResult, 1), ",")
    _ArrayDisplay($aResult)

    [/autoit]
  • Sieb des Eratosthenes

    • K4z
    • 4. September 2012 um 14:48

    Ich hab jetzt mal sämtliche Varianten ausprobiert (String, Active Directroy, Dllstruct) und irgendwie ist meine Variante immernoch am schnellsten. Was man noch machen kann, ist einfach alle geraden Zahlen auszulassen. Das bringt bei 1000000 immerhin eine Sekunde.

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>

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

    $iMaxInteger = InputBox("Integer", "Enter biggest Integer")
    $timer = TimerInit()
    Dim $aStroked[$iMaxInteger], $aReturn[$iMaxInteger/2] = [0, 2], $iCounter = 2
    For $iI = 3 To $iMaxInteger-1 Step 2
    If Not $aStroked[$iI] Then
    $aReturn[$iCounter] = $iI
    $iCounter +=1
    For $iJ = $iI*$iI To $iMaxInteger-1 Step $iI
    $aStroked[$iJ] = True
    Next
    EndIf
    Next
    $aReturn[0] = $iCounter-1
    ReDim $aReturn[$iCounter]
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : TimerDiff($Timer) = ' & TimerDiff($Timer) & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    _ArrayDisplay($aReturn)

    [/autoit]
  • Sieb des Eratosthenes

    • K4z
    • 4. September 2012 um 14:04

    Ich denk das _ArrayAdd ist der größte Zeitfresser. Deutlich schneller ist das Array vorher zu groß anzulegen und am Schluss den Rest weg zuschneiden.
    Frisst bei größeren Zahlen aber deutlich mehr Speicher. Ich hab einfach mal den Pseudocode von Wikipedia übersetzt, ist vielleicht auch noch nicht optimal aber deutlich schneller. Du kannst ihn dir ja einfach mal anschaun.

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    $iMaxInteger = InputBox("Integer", "Enter biggest Integer")
    $timer = TimerInit()
    Dim $aStroked[$iMaxInteger], $aReturn[$iMaxInteger], $iCounter = 1
    For $iI = 2 To $iMaxInteger-1
    If Not $aStroked[$iI] Then
    $aReturn[$iCounter] = $iI
    $iCounter +=1
    For $iJ = $iI*$iI To $iMaxInteger-1 Step $iI
    $aStroked[$iJ] = True
    Next
    EndIf
    Next
    $aReturn[0] = $iCounter-1
    ReDim $aReturn[$iCounter]
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : TimerDiff($Timer) = ' & TimerDiff($Timer) & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    _ArrayDisplay($aReturn)

    [/autoit]

    Edit: Ich brauch damit für 100000 ca. 360ms

  • Zugriff auf Array

    • K4z
    • 31. August 2012 um 13:24

    Anscheinend hat AutoIt ein Problem mit der Kurzschreibweise.
    ConsoleWrite($aArray[$i = $i+1] & @CRLF) geht, aber ist sinnlos, da eine Zuweisung in AutoIt immer False zurückgibt...

  • TCP "NUL" Senden

    • K4z
    • 24. August 2012 um 12:36
    Zitat von Shadowigor

    Und wenn du es so machst:

    TCPSend("$Socket, Binary(0x560045005200530069004f004e003000))

    Gruss Shadowigor

    Es sollte aber eigentlich eher TCPSend($Socket, Binary("0x560045005200530069004f004e003000")) heißen, da man keine größere Zahl als 0xFFFFFFFF in AutoIt verwenden darf, sonst kommts zu nem parsing Problem.

  • _FileWriteToLine Problem

    • K4z
    • 23. August 2012 um 19:04

    Falls temp2.txt bereits existiert, ist das kein Wunder. Schau mal die Flags von FileCopy an.

  • UDP Tutorial

    • K4z
    • 21. August 2012 um 21:07

    Gute Tag liebe AutoIt.de Gemeinde,
    da anscheinend viele Probleme mit dem UDP-Protokoll haben, hab ich mich dazu entschlossen ein kleines Tutorial zu schreiben.
    Ich werde hier nicht auf die Unterschiede zwischen UDP und TCP im Speziellen eingehen und wann was verwendet wird. Dafür ist Google dein Freund.
    Zuerst einmal die UDP-Befehle im Überblick und die entsprechenden TCPBefehle in Klammern:

    [autoit]

    UDPStartup() ;startet den UDP-Service (TCPStartup())
    UDPBind() ; erzeugt einen Socket (TCPAccept())
    UDPOpen() ; verbindet sich mit einem Socket (TCPConnect())
    UDPRecv() ; empfängt Daten vom offenen Socket (TCPRecv())
    UDPSend() ; sendet Daten an einen offenen Socket (TCPSend())
    UDPCloseSocket() ; schließt einen Socket (TCPCloseSocket())
    UDPShutdown() ; stoppt den UDP-Service (TCPShutdown())

    [/autoit]


    Man sieht sehr schnell, dass das UDP-Protokoll sehr viele Ähnlichkeiten mit dem TCP-Protokoll hat, es hat aber auch seine Schwierigkeiten.
    Um mit den UDP-Befehlen etwas besser umgehen zu können, werden wir einen sehr einfachen Client und einen Server schreiben. Der Client sendet dem Server einen Befehl, worauf dieser etwas durch den gleichen (!!) Socket zurückschickt. Genau darin liegt nämlich die Schwierigkeit, da die UDP-Befehle doch etwas anders aufgebaut sind, als die TCP-Befehle, aber das werdet ihr gleich selber sehen.
    Zuersteinmal schreiben wir unseren Client. Zuerst einmal müssen wir immer UDPStartup() verwenden, bevor wir die anderen UDP-Befehle verwenden, der Rest sollte durch die Kommentare klar werden.
    Client:

    Spoiler anzeigen
    [autoit]

    $g_IP = "127.0.0.1" ; IP-Addresse des Servers, in dem Fall localhost

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

    UDPStartup() ;startet den UDP-Service

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

    $aSocket = UDPOpen($g_IP, 65432) ; verbindet sich mit dem offenen Socket des Servers mit der IP $g_IP und dem Port 65432
    ; $aSocket ist ein Array das wie folgt aufgebaut ist:
    ; $aSocket[1]: real socket
    ; $aSocket[2]: IP des Servers
    ; $aSocket[3]: Port des Servers

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

    If @error Then
    MsgBox(48, "Error", "Es kann keine Verbindung zum Server hergestellt werden!")
    Exit
    EndIf

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

    $sText = InputBox("Client->Server", "Was möchten sie an den Server senden?")

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

    UDPSend($aSocket, $sText); Sendet den Inhalt der InputBox an den Server

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

    Do ; Wird solange durchlaufen bis etwas vom Server empfangen wird
    Local $sData = UDPRecv($aSocket, 128)
    Sleep(100)
    Until $sData <> ""

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

    MsgBox(0, "CLIENT", "Daten vom Server empfangen: "&@CRLF&$sData) ; Ausgabe der empfangenen Daten

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

    UDPShutdown()

    [/autoit]


    Aber bevor wir den Client starten können, müssen wir natürlich erst den Server starten, den wir im Folgenden schreiben werden.
    Server:

    Spoiler anzeigen
    [autoit]

    OnAutoItExitRegister("_exit")

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

    $g_IP = "127.0.0.1" ; eigene IP-Addresse

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

    UDPStartup() ;startet den UDP-Service

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

    $aSocket = UDPBind($g_IP, 65432) ; Öffnet einen Socket mit der IP $g_IP und dem Port 65432
    ; $aSocket ist genauso aufgebaut wie das Array von UDPOpen()
    ; $aSocket[1]: real socket
    ; $aSocket[2]: IP des Servers
    ; $aSocket[3]: Port des Servers
    If @error Then Exit
    While 1
    $aData = UDPRecv($aSocket, 128, 2) ;empfängt Daten von einem Client
    ;durch das Flag 2 wird folgendes Array ausgegeben:
    ; $aData[0]: data
    ; $aData[1]: IP des Clients
    ; $aData[2]: Port des Clients

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

    If $aData <> "" Then ; wenn Daten empfangen werden
    MsgBox(0, "SERVER", "Daten vom Client erhalten:"&@CRLF&$aData[0]) ; Ausgabe der empfangenen Daten

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

    #cs
    Die Schwierigkeit liegt nun darin, die Daten durch den gleichen Socket
    zurück zum Client zu schicken, da das Array von UDPRecv anders aufgebaut
    ist, als es UDPSend() benötigt.
    Wir müssen uns also selber ein Array aus den vorhandenen Informationen zusammenschreiben:
    $aClientArray[0] = $aSocket[0]
    $aClientArray[1] = $aSocket[1]
    $aClientArray[2] = $aData[1]
    $aClientarray[3] = $aData[2]
    #ce
    Local $aClientArray[4] = [$aSocket[0], $aSocket[1], $aData[1], $aData[2]]

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

    UDPSend($aClientarray, $aData[0]) ; Sendet die gleichen Daten zurück an den Client
    EndIf
    Sleep(100)
    WEnd

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

    Func _exit() ; nur um sicherzustellen, dass das UDP-Protokoll auch wirklich beendet wird
    UDPShutdown()
    EndFunc

    [/autoit]


    Wie ihr seht, bringen die UDP-Befehle einige Schierigkeiten mit sich. Meine Hauptintension war es, zu zeigen, wie man mit dem Server über den gleichen Socket Daten zurück an den Client schicken kann, was mit TCP weitaus einfacher ist.
    Wenn ihr Fragen oder Kritik habt, postet es einfach hier drunter.

    mfg K4z

  • Verständnisfrage zu ProcessWait

    • K4z
    • 27. Juli 2012 um 12:43

    Ich zitiere einfach mal die Hilfe:

    Zitat

    Gibt an (in Sekunden), wie lange gewartet werden soll.


    Vielleicht erkennst du ja jetzt warum dein Script (anscheinend) unedlich lang pausiert...

  • Kann _FileWriteFromArray ein 2D array schreiben???

    • K4z
    • 19. Juli 2012 um 17:16

    Zumindest ist die Funktion _FileWriteFromArray() fehlerhaft:
    https://autoit.de/index.php?page…ght=#post258206

  • Anfänger Tutorial - Funktionen | Alles was man wissen muss...

    • K4z
    • 18. Juli 2012 um 17:48

    An sich nicht schlecht, nur irgendwie ist ByRef relativ ungenau erklärt...
    In der dt. Hilfe ist das eigentlich ganz gut erklärt.

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™