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

Beiträge von James

  • RosettaCode Sammelthread

    • James
    • 16. Februar 2013 um 19:02

    Art: Neu-Implementierung
    Task: http://rosettacode.org/wiki/Linear_congruential_generator
    Beteiligte: James1337
    Skript:

    Spoiler anzeigen
    [autoit]

    _BSD_init()
    ConsoleWrite("BSD (seed = 0):" & @CRLF)
    For $i = 1 To 10
    ConsoleWrite(_BSD_rand() & @CRLF)
    Next
    ConsoleWrite(@CRLF & "Microsoft (seed = 0):" & @CRLF)
    _Microsoft_init()
    For $i = 1 To 10
    ConsoleWrite(_Microsoft_rand() & @CRLF)
    Next

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

    Func _BSD_init($seed=0)
    LCG("r", $seed)
    LCG("a", 1103515245)
    LCG("c", 12345)
    LCG("m", 2^31)
    EndFunc
    Func _BSD_rand()
    Return LCG()
    EndFunc

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

    Func _Microsoft_init($seed=0)
    LCG("r", $seed)
    LCG("a", 214013)
    LCG("c", 2531011)
    LCG("m", 2^31)
    EndFunc
    Func _Microsoft_rand()
    Return Int(LCG() / 2^16)
    EndFunc

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

    Func LCG($0="", $1=0)
    Local Static $r = 0, $a = 0, $c = 0, $m = 0
    Switch $0
    Case "r"
    $r = $1
    Case "a"
    $a = $1
    Case "c"
    $c = $1
    Case "m"
    $m = $1
    EndSwitch
    If ($0 <> "") Then Return 0
    $r = Mod($a * $r + $c, $m)
    Return $r
    EndFunc ; LCG() by James1337

    [/autoit]

    Ausgabe:

    Spoiler anzeigen
    Code
    BSD (seed = 0):
    12345
    1406932606
    654583808
    1358247936
    2138638336
    1459132416
    1445521408
    370866176
    1896597568
    1518859008
    
    
    Microsoft (seed = 0):
    38
    7719
    21238
    2437
    8855
    11797
    8365
    32285
    10450
    30612
    Alles anzeigen

    Problem(e): _BSD_rand() liefert falsche Werte, wurde aber meines Wissens nach richtig implementiert.

  • RosettaCode Sammelthread

    • James
    • 16. Februar 2013 um 17:51

    Art: Neu-Implementierung
    Task: http://rosettacode.org/wiki/Mad_Libs
    Beteiligte: James1337
    Skript:

    Spoiler anzeigen
    [autoit]

    Local $Story
    $Story = "<name> went for a walk in the park. <he or she>" & @CRLF
    $Story &= "found a <noun>. <name> decided to take it home." & @CRLF
    MadLibs($Story)

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

    Func MadLibs($Story)
    Local $r, $i, $w
    $r = StringRegExp($Story, "<(.+?)>", 3)
    If (Not @error) Then
    For $i = 0 To UBound($r)-1
    If (StringInStr($Story, "<" & $r[$i] & ">") = 0) Then ContinueLoop ; already replaced
    $w = InputBox("Mad Libs", $r[$i] & "?")
    If @error Then ExitLoop
    $Story = StringReplace($Story, "<" & $r[$i] & ">", $w)
    Next
    EndIf
    Return MsgBox(0, "Mad Libs", $Story)
    EndFunc

    [/autoit]
  • RosettaCode Sammelthread

    • James
    • 16. Februar 2013 um 17:30

    Art: Neu-Implementierung
    Task: http://rosettacode.org/wiki/Luhn_test_of_credit_card_numbers
    Beteiligte: James1337
    Skript:

    Spoiler anzeigen
    [autoit]

    ConsoleWrite(LuhnTest("49927398716") & @CRLF)
    ConsoleWrite(LuhnTest("49927398717") & @CRLF)
    ConsoleWrite(LuhnTest("1234567812345678") & @CRLF)
    ConsoleWrite(LuhnTest("1234567812345670") & @CRLF)

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

    Func LuhnTest($CreditCardNumber)
    Local $a, $i, $n, $d, $s1 = 0, $s2 = 0
    $a = StringSplit($CreditCardNumber, "")
    For $i = 1 To $a[0]
    $n = $a[0]-$i+1
    $d = $a[$i] ; digit number $n in the reversed digits
    If (Mod($n, 2) = 0) Then ; even
    ; because 18 mod 9 = 0 and we want to get 9 instead
    $s2 += Mod($d*2, 9) + 9*(Mod($d*2, 9) = 0)
    Else ; odd
    $s1 += $d
    EndIf
    Next
    Return (Mod($s1+$s2, 10) = 0)
    EndFunc

    [/autoit]
  • RosettaCode Sammelthread

    • James
    • 16. Februar 2013 um 16:07

    Art: Neu-Implementierung
    Task: http://rosettacode.org/wiki/Sockets
    Beteiligte: James1337
    Skript:

    Spoiler anzeigen
    [autoit]

    TCPStartup()

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

    Local $IPAddr = TCPNameToIP("localhost")
    Local $Port = 256

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

    Local $Socket = TCPConnect($IPAddr, $Port)
    TCPSend($Socket, "hello socket world")
    TCPCloseSocket($Socket)

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

    TCPShutdown()

    [/autoit]
  • TCP Server [Grundgerüst]

    • James
    • 15. Februar 2013 um 22:04

    Stimmt natürlich auch wieder, wobei ein geeigneter Wert für maxlen in einigen Anwendungen imho auch funktionieren sollte ohne Probleme zu verursachen. Aber du hast natürlich Recht.
    Edit: Ein Chatserver wäre eine solche Anwendungsmöglichkeit.

  • TCP Server [Grundgerüst]

    • James
    • 15. Februar 2013 um 21:45

    Da Server (besonders unter AutoIt-Neulingen) immer wieder ein Problem darstellen,
    und ich hier auch schon einige "seltsame" Konstruktionen gesehen habe,
    wollte ich einfach mal zeigen, wie ich einen TCP Server programmieren würde:

    [autoit]

    Local $Server, $Client = -1, $Data ; die wichtigsten Variablen

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

    TCPStartup() ; TCP starten

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

    $Server = TCPListen(@IPAddress1, 1337) ; Server starten
    If @error Then
    ; Information an den Benutzer ausgeben, dass der Server nicht gestartet werden konnte
    TCPShutdown()
    Exit
    EndIf

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

    Do
    If ($Client > 0) Then ; überprüfen, ob schon ein Client verbunden ist
    $Data = TCPRecv($Client, 1024) ; Daten vom Client empfangen
    If @error Then ; Client nicht mehr verbunden
    $Client = -1 ; $Client zurücksetzen
    ElseIf (StringLen($Data) > 0) Then ; Client hat etwas gesendet
    ; Daten verarbeiten
    TCPSend($Client, $Data) ; Antwort an den Client schicken
    EndIf
    Else ; noch kein Client verbunden
    $Client = TCPAccept($Server) ; eingehende Verbindung akzeptieren
    EndIf
    ; andere wichtige Sachen, zum Beispiel irgendwas um die Schleife zu beenden
    Until False
    TCPCloseSocket($Client) ; Verbindung zum Client trennen
    TCPCloseSocket($Server) ; Server beenden
    TCPShutdown() ; TCP beenden
    Exit ; Skript beenden

    [/autoit][autoit]

    Local $Server, $Client[100], $i, $Data ; die wichtigsten Variablen
    For $i = 0 To 99
    $Client[$i] = -1 ; -1 = nicht verbunden
    Next

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

    TCPStartup() ; TCP starten

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

    $Server = TCPListen(@IPAddress1, 1337) ; Server starten
    If @error Then
    ; Information an den Benutzer ausgeben, dass der Server nicht gestartet werden konnte
    TCPShutdown()
    Exit
    EndIf

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

    $i = 0 ; $i zurücksetzen
    Do
    If ($Client[$i] > 0) Then ; überprüfen, ob der Client schon verbunden ist
    $Data = TCPRecv($Client[$i], 1024) ; Daten vom Client empfangen
    If @error Then ; Client nicht mehr verbunden
    $Client[$i] = -1 ; $Client zurücksetzen
    ElseIf (StringLen($Data) > 0) Then ; Client hat etwas gesendet
    ; Daten verarbeiten
    TCPSend($Client[$i], $Data) ; Antwort an den Client schicken
    EndIf
    Else ; Client noch nicht verbunden
    $Client[$i] = TCPAccept($Server) ; eingehende Verbindung akzeptieren
    EndIf
    $i += 1 ; $i um 1 erhöhen, damit beim nächsten Durchlauf der Schleife der nächste Client verarbeitet werden kann
    If ($i = UBound($Client)) Then $i = 0 ; nach dem letzten Client wieder von vorne beginnnen
    ; andere wichtige Sachen, zum Beispiel irgendwas um die Schleife zu beenden
    Until False
    TCPCloseSocket($Client) ; Verbindung zum Client trennen
    TCPCloseSocket($Server) ; Server beenden
    TCPShutdown() ; TCP beenden
    Exit ; Skript beenden

    [/autoit]
  • RosettaCode Sammelthread

    • James
    • 15. Februar 2013 um 20:15
    Zitat von Christoph54

    Gibts nen Freiwilligen der meine Snippets, wenn sie okay sind hochläd? :D


    Ja, kann ich machen.
    //Edit: Immer diese vorschnellen Entscheidungen... :S

  • RosettaCode Sammelthread

    • James
    • 15. Februar 2013 um 20:10

    Art: Neu-Implementierung
    Task: http://rosettacode.org/wiki/Hofstadter_Q_sequence
    Beteiligte: James1337
    Skript:

    Spoiler anzeigen
    [autoit]

    For $n = 1 To 10
    ConsoleWrite("Q(" & $n & ") = " & Q($n) & @CRLF)
    Next
    ConsoleWrite("Q(1000) = " & Q(1000) & @CRLF)

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

    Func Q($n)
    If ($n = 1) Or ($n = 2) Then
    Return 1
    EndIf
    Return Q($n - Q($n - 1)) + Q($n - Q($n - 2))
    EndFunc

    [/autoit]

    Problem(e): Ich musste das Skript abbrechen: >Exit code: 1 Time: 1468.340

  • RosettaCode Sammelthread

    • James
    • 15. Februar 2013 um 20:07

    Art: Neu-Implementierung
    Task: http://rosettacode.org/wiki/Bitwise_operations
    Beteiligte: James1337
    Skript:

    Spoiler anzeigen
    [autoit]

    $a = 666
    $b = 42

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

    ConsoleWrite($a & " and " & $b & " = " & BitAND($a, $b) & @CRLF)
    ConsoleWrite($a & " or " & $b & " = " & BitOR($a, $b) & @CRLF)
    ConsoleWrite($a & " xor " & $b & " = " & BitXOR($a, $b) & @CRLF)
    ConsoleWrite("not " & $a & " = " & BitNOT($a) & @CRLF)
    ConsoleWrite($a & " << " & $b & " = " & BitShift($a, -$b) & @CRLF) ; negative numbers shift left
    ConsoleWrite($a & " >> " & $b & " = " & BitShift($a, $b) & @CRLF)
    ConsoleWrite($a & " <<< " & $b & " = " & BitRotate($a, $b) & @CRLF)
    ConsoleWrite($a & " >>> " & $b & " = " & BitRotate($a, -$b) & @CRLF) ; negative numbers rotate right

    [/autoit]
  • RosettaCode Sammelthread

    • James
    • 15. Februar 2013 um 19:30

    Art: Neu-Implementierung
    Task: http://rosettacode.org/wiki/Ackermann_function
    Beteiligte: James1337
    Skript:

    Spoiler anzeigen
    [autoit]

    Func A($m, $n)
    If ($m = 0) Then
    Return $n + 1
    ElseIf ($m > 0) And ($n = 0) Then
    Return A($m - 1, 1)
    ElseIf ($m > 0) And ($n > 0) Then
    Return A($m - 1, A($m, $n - 1))
    EndIf
    EndFunc

    [/autoit]
  • Wie Array richtig befüllen?

    • James
    • 15. Februar 2013 um 10:41

    Du könntest es einfach so machen:

    [autoit]

    $info2 = StringSplit($info1[$i][1], ",", 2)
    If $i = 1 Then $nummern_gruppe_1 = $info2
    ;...

    [/autoit]


    Ab Zeile 8 kannst du dann alles weglassen, Global würde ich ganz an den Anfang setzen.
    Durch Flag 2 bei StringSplit entsteht das Array genau so wie du es brauchst, und die Größe musst du dann auch nicht mehr einzeln festlegen.

    Edit: $infos in Zeile 1 sollte $info1 heißen, oder?

  • Txt File Inhalt auslesen

    • James
    • 14. Februar 2013 um 14:15

    Dann würde ich das so machen:

    [autoit]

    Local $Data1 = FileRead("File1.txt")
    Local $SRE = StringRegExp($Data1, "\b(SRX\d+)\b", 3)
    If @error Then Exit
    Local $i, $Data2 = ""
    For $i = 0 To UBound($SRE)-1
    $Data2 &= $SRE[$i] & @CRLF
    Next
    FileWrite("File2.txt", $Data2)

    [/autoit]
  • Txt File Inhalt auslesen

    • James
    • 14. Februar 2013 um 13:57
    [autoit]

    FileRead
    StringRegExp
    FileWrite

    [/autoit]

    Sind die SRX-Nummern immer so aufgebaut?
    Gibt es in der Textdatei irgendwas mit einem ähnlichen Format, was beim Filtern Probleme bereiten könnte?

  • GDI+ Animationen und AutoIt Multiplayer

    • James
    • 14. Februar 2013 um 12:55

    Auf den ersten Blick finde ich in den Skripten jetzt keinen Fehler...
    Was mich allerdings wundert ist die im Server angegebene IP-Adresse. Sollte da nicht eigentlich sowas wie "127.0.0.1" oder @IPAddress1 stehen? Hast du mal den Rückgabewert von _TCPServer_Startup überprüft? Es könnte ja sein, dass der Server gar nicht startet und der Client somit gar nicht die Möglichkeit hat, irgendwelche Daten zu verarbeiten.

  • GDI+ Animationen und AutoIt Multiplayer

    • James
    • 10. Februar 2013 um 11:18

    Dann musst du dem Server eben noch die Information senden, was für Daten er überhaupt gerade empfängt und diese dann auswerten. Zum Beispiel TCPSend($Server, "PosX|" & $x) ;)

  • AutoIt Compiler (Project Perseus)

    • James
    • 9. Februar 2013 um 22:02
    Zitat von i2c

    Müssen wir AutoIt jetzt als Hochsprache bezeichnen?

    Skriptsprache mit Zukunft. :D


    @Topic Ich finde die Idee super, da ich AutoIt an sich für sehr gut halte (die Sprache an sich, nicht die Umsetzung) und darin garantiert noch eine Menge Potenzial steckt. Ich denke zwar nicht, dass ich bei sehr viel helfen könnte, würde aber trotzdem mitmachen.

  • GDI+ Animationen und AutoIt Multiplayer

    • James
    • 9. Februar 2013 um 21:51

    Zu 2)
    Das funktioniert wahrscheinlich schon, ist aber wie du schon selbst angemerkt hast nicht sehr effektiv. Ein in AutoIt geschriebener TCP- oder UDP-Server (einfach mal die Funktionen in der Hilfe anschauen) wäre besser und auch einfacher zu verwenden.

  • Happy Glückwunsch Andy zum 47'ten

    • James
    • 5. Februar 2013 um 16:59

    Auch von mir noch alles Gute zum Geburtstag! :)

  • Abfrage ob das Programm im Vordergrund ist?

    • James
    • 2. Februar 2013 um 17:36
    Zitat von sezer0012

    Also es soll eine Abfrage sein ob der LINK ( z.B. YouTube ) geöffnet ist...
    Geht das?


    https://autoit.de/index.php?page…1554#post261554

  • Abfrage ob das Programm im Vordergrund ist?

    • James
    • 2. Februar 2013 um 17:01

    Ja natürlich musst du das. $Handle ist der Rückgabewert von GUICreate, oder auch einfach nur der Fenstertitel. ;)

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™