Stable ist veraltet, obwohl unten drunter steht, Stand sei von heute morgen.
Scite ist zwar aktuell, aber die Versionsangabe ist falsch
Bitte entweder das Prüfscript oder zumindest die Standangabe anpassen, danke
Beiträge von f705185@rppkn.com
-
-
Danke für die Erklärungen. Das mit \Z vs \z ist mir klar geworden aus der Hilfe, aber ein guter und wichtiger Hinweis. Mich wundert btw, dass es sich mit \A und \a nicht analog verhält.
Durch die Perspektive search vs. match wird es wesentlich verständlicher, warum das so gebaut ist. -
Das ist für mich extrem unintuitiv. Warum muss ich das angeben, was ich nicht matchen will ("alles, was kein Wort trennt")?
Nach meinem Verständnis von RegEx sollte man explizit angeben, was man matcht und nicht, was man nicht matcht. Will sagen: Was ich in meinem Pattern nicht angebe, soll auch nicht da sein. \b vor und nach jedes Zeichen (bzw. in meinem Fall zu machtende Wort) zu setzen macht den Code extrem unleserlich und ich kann beim besten Willen nicht verstehen, was sich ein Sprachdesigner dabei gedacht hat. Schließlich ist es StringRegEx und nicht SubStringRegEx.
Immerhin geht "\A(a|b|c)\Z". Ist zwar hässlich und wird mich irgendwann zwingen \A und \Z nachzuschlagen, wenn ich den Code überarbeite, aber scheinbar muss das in Autoit dann so. Danke. -
Wie gesagt, ich matche a, nicht .*a.* - offenbar ergänzt Autoit .* auf beiden Seiten Seite automatisch bzw. interpretiert die RegEx als Substring, weil auf "dabc" ebenso die Regex "a" matcht
Was ich erwarte und warum habe ich doch schon beschrieben - mir ist nicht klar, wie ich es anders formulieren soll. Ich versuche es dennoch nochmal
sollte False/0 sein
sollte True/1 sein
-
-
Es war viel einfacher als ich dachte. Ich muss einfach jedesmal ein neues Objekt erstellen. Hier der Code:
Dim $var1=ObjCreate("Scripting.Dictionary")
Dim $var2=ObjCreate("Scripting.Dictionary")$var1.add("farbe","grün")
$var1.add("eigenschaft","fest")
$var2.add(1,$var1);$var1.RemoveAll alter Code
$var1=ObjCreate("Scripting.Dictionary") ;neu
$var1.add("farbe","gelb")
$var1.add("eigenschaft","flüssig")
$var2.add(2,$var1)Dim $var3=ObjCreate("Scripting.Dictionary")
Dim $var3 = $var2.Item(1)
msgbox(48,"Eigenschaft",$var3.Item("eigenschaft")); -
Danke schonmal für die prompte und ausführliche Antwort. Call by Value und Call by Reference sind mir von C geläufig. Ich hatte vermutet, dass es damit zusammenhängt.
ZitatDas heißt du musst also immer ein neues Dictionary erstellen anstatt immer wieder auf das selbe zu verweisen.
Ich schildere mal mein Problem etwas abstrakt. Ich habe mehrere Autos. Die Eigenschaften eines Autos lege ich in ein Dictionary. Meine gesamten Autos möchte ich nun in einem weiteren Dictionary als Fuhrpark zusammenfassen. Diesen Fuhrpark möchte ich nun an eine Funktion übergeben, die z.B. den Fuhrpark einfach nur ausgibt. Die einzelnen Autos zu übergeben macht da also wenig Sinn.
Wie löse ich diese Aufgabe am besten? -
Hier mein Skript
Code
Alles anzeigenDim $var1=ObjCreate("Scripting.Dictionary") Dim $var2=ObjCreate("Scripting.Dictionary") $var1.add("farbe","grün") $var1.add("eigenschaft","fest") $var2.add(1,$var1) $var1.RemoveAll $var1.add("farbe","gelb") $var1.add("eigenschaft","flüssig") $var2.add(2,$var1) Dim $var3=ObjCreate("Scripting.Dictionary") Dim $var3 = $var2.Item(1) msgbox(48,"Eigenschaft",$var3.Item("eigenschaft"));
Erwartet wird, dass in der Messagebox "fest" steht, stattdessen erscheint "flüssig". Was mache ich falsch? Wie kann ich es besser lösen? Danke für die Hilfe im Voraus.
-
-
Der boundary ändert sich immer. Oder reicht Random?
-
-
Mein Script:
$binary = "0x024A0007006B0069006E0067005F006200650009006C006F00630061006C0068006F00730074000063DD"
$string = BinaryToString ( $binary )
MsgBox ( 0, "", $string )
Das was rauskommt:
-
Zu StringToBinary gibt es noch BinaryToString.
Binary = 0xHEX, String = 'Hallo'.
Um aus 0xABC also 'Hallo' zu machen nutzt du BinaryToStringlg
MarsWenn ich "0x024A0007006B0069006E0067005F006200650009006C006F00630061006C0068006F00730074000063DD" von Binär zu String mache
kommt "J" raus. -
Ich baue gerade einen Minecraft Server nach und habe folgendes Problem.
Das bisherige Script:
$maxlen = 4096
$port = 25565
$filename_log = "log.txt"TCPStartup ()
$mainsocket = TCPListen ( 0, $port )
OnAutoItExitRegister ( "_exit" )While 1
$accept = TCPAccept ( $mainsocket )
If $accept <> -1 Then
Do
$recv = TCPRecv ( $accept, $maxlen )
Until $recv <> ""
FileWrite ( $filename_log, "[" & @HOUR & ":" & @MIN & ":" & @SEC & "]" & $recv & @CRLF )
FileWrite ( "paket.txt", $recv )
EndIf
WEndFunc _exit ()
TCPCloseSocket ( $mainsocket )
TCPShutdown ()
Exit
EndFuncWenn der Server das erste Paket erhält vom Client.
Sieht bei mir so aus:0x024A0007006B0069006E0067005F006200650009006C006F00630061006C0068006F00730074000063DD
Wie kriege ich das in eine lesbare Form. Bei StringToBinary kommt auch nur das Gleiche raus.
Das Protokoll sollte eigentlich nicht verschlüsselt sein. -
weil ich festgestellt habe dass es vielelicht gar nicht so schlecht ist ein 2.fenster zu haben dass ich nach belieben ändern und informationen hinzufügen kann
Greenhorns ist auch sehr gut habe es gerade ausprobiert, leider verstehe ich den quelltext nicht wirklich
-
so habe jetzt eine Lösung für mein Problem gefunden: hab es durch 2 GUIS gelöst
#include <GUIConstants.au3>
#include <ButtonConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>$start=0
$antwort=0
Opt("GUIOnEventMode", 1) ; Wechsle in den OnEvent Modus$mainwindow = GUICreate("Angriffswarner", 200, 100)
$Startbutton = GUICtrlCreateButton("start", 70, 50, 60)
GUISetState(@SW_SHOW, $mainwindow)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked", $mainwindow)
GUICtrlSetOnEvent($Startbutton, "StartButton")$window2 = GUICreate("blabla", 200, 100)
$bestaetigungbutton = GUICtrlCreateButton("bestätigen", 70, 50, 60)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked", $window2)
GUISetState(@SW_HIDE, $window2)
GUICtrlSetOnEvent($bestaetigungbutton, "BestaetigungButton")while 1
While $start=1 AND $antwort = 0
SoundPlay("Windows Exclamation.wav", 1)
WEnd
WEndFunc StartButton()
$start=1
GUISetState(@SW_SHOW, $window2)
EndFunc ;==>StatusButtonFunc bestaetigungbutton()
$start=0
$antwort = 1
GUISetState(@SW_HIDE, $window2)EndFunc ;==>bestaetigungbutton
Func CLOSEClicked()
Switch @GUI_WinHandle ; See which GUI sent the CLOSE message
Case $mainwindow
Exit ; If it was this GUI - we exit <<<<<<<<<<<<<<<
Case $window2
$antwort = 1
$start=0
GUISetState(@SW_HIDE, $window2)
EndSwitchEndFunc
-
Vielen Dank schonmal für deine Hilfe.
Leider gibt es wieder die selben Probleme wie bei der neuen Idee die ich gerade ausprobiert habe:
;~ AdlibRegister("Soundfunktion",2000)Func Alarm()
If $antwort =0 Then
SoundPlay ( "Windows Exclamation.wav" , 0 )
EndIf
EndFunc
$antwort=0
msgbox(0+64, "blablabla","test")
$antwort=1while 1
sleep(2000)
WEndNach mehreren Tests bin ich jetzt zu der Auffassung gekommen dass MsgBox immer alle weiteren Befehle blockiert bis es geschlossen wurde.
daher sehen jetzt meine weiteren Pläne so aus dass ich entweder den Inhalt des 2. FEnsters in das 1. integriere oder mir 2 GUIs aufbaue.
Werde dich auf dem laufenden halten -
kannst du mir ein bisschen dabei helfen? habe leider wenig erfahrung mit dem Aufbau einer GUI, den Quellcode des Fenters das ich momentan schon drin habe habe ich von einem Beispiel übernommen und nur ein wenig angepasst.
Damit du einen kuzen Überblick über das Programm ahst hier mal die bisherige Struktur des Programmes:#Region GUI Aufbau
Opt("GUIOnEventMode", 1)
$mainwindow = GUICreate("Programmname", 200, 100)
GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
GUICtrlCreateLabel("text...", 30, 10)
$Statusbutton = GUICtrlCreateButton($status, 70, 50, 60)
GUICtrlSetBkColor($statusbutton,0xFF0000)
GUICtrlSetOnEvent($statusbutton, "StatusButton")
GUISetState(@SW_SHOW)#Region Hauptroutine
while 1
;[...]
If <Bedingung erfüllt> Then
;hier soll das passieren was ich vorhin geschrieben habe.
EndIfWend
#Region ButtonAktionen
Func StatusButton()
;...
EndFuncDie Bedingung wird in einer Endlosschleife immer wieder überprüft
wo genau muss ich jetzt mit dem Aufbau dieses MessageBox Fenster beginnen?
-
habe mich vielleicht ein bisschen undeutlich ausgedrückt:
der sound ist nur sehr kurz (1sekunde) und muss deshalb immer wieder hitnereinander abgespielt werden
sry für das missverständnis -
Wenn den Sound zuerst Starte dann wird die Meldung leider nicht angezeigt, da die Endloschleife ja nciht unterbrochen wird
ebenso funktioniert nicht:
$meldung=0
While $antwort <> 0
SoundPlay ( "Windows Exclamation.wav" , 1 )if $meldung=0 Then
$antwort = msgbox(0+64, "Neues Fenster","blablabla")
$meldung=1
EndIfWEnd