Hey super, vielen Dank für die Infos.
Den WebDriver schau ich mir mal näher an.
Viele Grüße,
horphi
Hey super, vielen Dank für die Infos.
Den WebDriver schau ich mir mal näher an.
Viele Grüße,
horphi
Hallo zusammen,
kann mir jemand sagen, ob die FF.au3 noch funktioniert?
Man kann das FF Addon MozRepl nicht mehr installieren und somit hat man auch keine Schnittstelle mehr.
Bzw. weiß ich nicht, ob es einen anderen Weg gibt im FF den HTML Code einer Seite auszulesen und Texteingaben in Feldern zu machen.
DAnke und Gruß,
horphi
Hallo AspirinJunkie,
danke für dein Feedback.
Das Paket habe ich in meinem vorherigen Post eingefügt.
SO kommen die Pakete aus dem Netzwerk.
Meinst du, ich sollte das Paket einfach per Regex lesen, die ID herausfiltern und den Rest roh in die DB einfügen?
VG
horphi
Alles anzeigenSchon klar das es ein Timestamp ist.
Die Frage ist nur was das mit der JSON-UDF zu tun hat.
Anhand der Infos ist mir nicht klar was als Eingabedaten rein kommt, was raus kommt und wie es stattdessen aussehen soll.
Edit horphi: habe mal versucht nachzuvollziehen was gemeint ist und bin dabei auf eine Rundungsproblematik durch StringFormat gestoßen.
Hierbei wird aus 1430140978241 eine 1.43014e+12 gemacht.
Habe daher nun die JSON_Generate-Funktion entsprechend angepasst.
Um zu ergründen was es mit der von Dir erwähnten 1.50809e+12 auf sich hat benötige ich mehr Input.
Hallo AspirinJunkie,
vielen Dank für deine Anpassung. Klappt super.
der 2. erwähnte Wert war ein Fehler von mir.
Ich habe 2 Werte genannt Input und Output. Beide waren von unterschiedlichen Zeitpunkten. Es sind nicht die selben Werte.
Mit der Anpassung klappt es sehr gut .
Das kommt in meiner DB jetzt an.
{
"acceleration": null,
"accelerationTS": 1508179014752,
"batteryAlarm": null,
"batteryAlarmTS": 1508179014752,
"batteryVoltage": null,
"batteryVoltageTS": 1508179014752,
"buttonState": "notPushed",
"buttonStateTS": 1508179014617,
"color": "#FF0000",
"configStatus": "NotStarted",
"configStatusTS": null,
"coordinateSystemId": null,
"coordinateSystemName": null,
"deviceType": "General",
"group": "Named Tags",
"id": "0000200103e3",
"ioStates": [
"low",
"low",
"low",
"low"
],
"ioStatesTS": 1508179014617,
"lastAreaId": null,
"lastAreaName": null,
"lastAreaTS": 1508179014752,
"lastButton2PressTS": null,
"lastButtonPressTS": null,
"lastPacketTS": 1508179014621,
"name": "Named Tags_0292",
"rssi": 4,
"rssiCoordinateSystemId": "CoordSys001",
"rssiCoordinateSystemName": null,
"rssiLocator": "000000000007",
"rssiLocatorCoords": [
78.99,
17.11,
12
],
"rssiTS": 1508178892165,
"tagState": "default",
"tagStateTS": 1508179014617,
"tagStateTransitionStatus": "normal",
"tagStateTransitionStatusTS": 1508179014617,
"triggerCount": null,
"triggerCountTS": 1508179014752,
"txPower": -6,
"txPowerTS": 1508179014617,
"txRate": 1,
"txRateTS": 1508179014617,
"zones": null
}
Alles anzeigen
Eine generelle Frage hätte ich noch.
Wieviel Pakete dieser Art kann ich in einer Sekunde verarbeiten?
HIntergrund: ich bekomme via UDP Datenpakete aus dem Netz und speichere diese in meiner DB.
Stichwort IoT : es sind Bewegunsdaten von Sensoren.
Dazu möchte ich gerne verstehen, wieviele Pakete pro Sekunde maximal ,ohne verluste, empfangen, aus Json umwandeln und in meiner MariaDB speichern kann, während mein UDPRecv den Port abhört.
While 1
; We are waiting for the string
$sReceived = UDPRecv($iSocket, 9999)
If $sReceived <> "" Then
$o_Object = _JSON_Parse($sReceived)
$s_Type = $o_Object.Item("id")
$query2 = 'INSERT INTO `test`.`test` (`ID`, `JSONSTRING`) VALUES ('''& $s_Type & ''', ''' & _JSON_Generate($o_Object) & ''');'
_MySQL_Real_Query($MysqlConn, $query2)
EndIf
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $idBtnStop
EndSwitch
WEnd
Alles anzeigen
Vielen Dank und Gruß,
horphi
Hallo @asprinjunkie,
danke für deine tolle Arbeit.
Solche UDF´s sind GOLD wert.
EIne Frage habe ich dazu.
Ich bekomme via UDP ein JSON Protokoll geliefert, fomatiere das und speichere es gleich als komplettes Paket in die SQL DB.
Dabei ist mir der TimeStamp aufgefallen. Der wird anscheinend nicht richtig konvertiert...
so sieht er in der SQL DB aus "positionTS": 1.50809e+12
So sollte er aussehen: "positionTS": 1430140978241,
Mach ich mit der JSON UDF was falsch?
While 1
; We are waiting for the string
$sReceived = UDPRecv($iSocket, 9999)
If $sReceived <> "" Then
$o_Object = _JSON_Parse($sReceived)
$s_Type = $o_Object.Item("id")
;~ ConsoleWrite("ID: " & $s_Type & @CRLF)
$query2 = 'INSERT INTO `test`.`test` (`ID`, `JSONSTRING`) VALUES ('''& $s_Type & ''', ''' & _JSON_Generate($o_Object) & ''');'
_MySQL_Real_Query($MysqlConn, $query2)
;~ ConsoleWrite(_JSON_Generate($o_Object) & @CRLF & @CRLF)
EndIf
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case $idBtnStop
EndSwitch
WEnd
Alles anzeigen
VG
horphi
Danke euch beiden.
Das werde ich Montag genauer untersuchen. Im Prinzip habe ich mir schon gedacht, das die letzte Zeile benutzt sein muss.
Ich dachte nur, dass ich eventuell bei dem setzen der Parameter was übersehen habe.
VG
horphi
Hallo zusammen,
ich habe eine Frage zu _Excel_RangeRead.
Ich exportiere Daten nach Excel, bearbeite sie und importiere wieder zurück, um die Daten anschließen in einer Textdatei zu ersetzen.
Beim Import aus Excel ist am Ende immer eine leere Zeile drin, welche stört, da der Array mit Semikolon zu Text gewandelt wird.
Die Leere Zeile auch drin, wenn ich einfach Export und gleich wieder import drücke, ohne die Exceldatei bearbeitet zu haben.
Weiß jemand warum?
Func _ExcelImport()
Global $aWorkBooks = _Excel_BookList()
If $aWorkBooks[0][1] = '' Then
MsgBox(1, 'Error', 'No Excel open')
Return
EndIf
MsgBox(1, 'Excelimport', 'Do you want to import the current excelsheet and overwrite the CN file?' & @CRLF & $aWorkBooks[0][2] & '\' & $aWorkBooks[0][1])
Local $aExcelImport
$oExcel = _Excel_Open()
$oWorkbook = _Excel_BookAttach($aWorkBooks[0][2] & '\' & $aWorkBooks[0][1])
$aExcelImport = _Excel_RangeRead($oWorkbook, $oWorkbook.Activesheet, Default, 1);<<<<<<<<<<<<<<<<<<<<<<<<<
$sExcelImport = $aExcelImport[1][0]
_SearchString($sExcelImport)
$aExtract = $aExcelImport
_ArrayDisplay($aExtract)
$aExtractOld = _ArrayExtract($ar, $extendAnfang, $extend - 1)
;~ _ArrayDisplay($aExtractOld)
Local $sNewOp = _ArrayToString($aExtract, ';', 1)
Local $sOldOp = _ArrayToString($aExtractOld, @CRLF, 1)
;~ _Replace($sOldOp, $sNewOp)
MsgBox(0, 'Import complete', 'Data has been updated.')
EndFunc ;==>_ExcelImport
Alles anzeigen
VG
horphi
Hi,
ich würde dann mit deiner Methode Dynamische Wertzuweisung die Property so lange anpassen, bis sie auf Null ist richtig? (Zeile 71)
#include <AutoItObject.au3>
#include <GDIPlus.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $__avButton[1] = [0]
;~ OnAutoItExitRegister('__Button_Exit')
_AutoItObject_Startup()
_GDIPlus_Startup()
; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
$hGUI = GUICreate('', 600, 300, -1, -1, $WS_SIZEBOX + $WS_SYSMENU)
GUICtrlSetResizing($hGUI, $GUI_DOCKLEFT + $GUI_DOCKTOP)
$oButton = __Class_Button().Object
$oButton.handle = $hGUI
$oButton.text = 'Test'
$oButton.left = 10
$oButton.top = 10
$oButton.width = 200
$oButton.height = 50
GUISetState()
While GUIGetMsg() <> -3
$oButton.draw()
GetPosMouse()
WEnd
; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
$oButton = Null
_GDIPlus_Shutdown()
_AutoItObject_Shutdown()
; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
Func __Class_Button()
Local $oClass = _AutoItObject_Class()
; PUBLIC
$oClass.AddProperty('handle')
$oClass.AddProperty('text')
$oClass.AddProperty('left')
$oClass.AddProperty('top')
$oClass.AddProperty('width')
$oClass.AddProperty('height')
$oClass.AddProperty('func')
$oClass.AddMethod('draw', '__Button_Draw')
$oClass.AddDestructor('__Button_Destructor')
; PRIVATE
$oClass.AddProperty('_call_', $ELSCOPE_PRIVATE) ; Für den ersten Aufruf der .draw() Methode
$oClass.AddProperty('_graphic_', $ELSCOPE_PRIVATE) ; Handle zu dem Grafik Objekt von einem Fenster Handle
$oClass.AddProperty('_bitmap_', $ELSCOPE_PRIVATE) ; Handle zu dem Bitmap in welches der Button gezeichnet wird
$oClass.AddProperty('_image_', $ELSCOPE_PRIVATE) ; Grafikkontext des Bitmaps um in dieser zu zeichnen
Return $oClass
EndFunc ;==>__Class_Button
Func __Button_Draw($oSelf)
If Not $oSelf._call_ Then
$oSelf._call_ = True
$oSelf._graphic_ = _GDIPlus_GraphicsCreateFromHWND($oSelf.handle)
$oSelf._bitmap_ = _GDIPlus_BitmapCreateFromScan0($oSelf.width, $oSelf.height)
$oSelf._image_ = _GDIPlus_ImageGetGraphicsContext($oSelf._bitmap_)
EndIf
If $oButton.left > 0 Then
ConsoleWrite($oButton.left & @CRLF)
;~ $oClass.AddEnum('__Next__', '__Reset__')
EndIf
_GDIPlus_GraphicsClear($oSelf._image_, 0xFFFFFFFF) ; Clears a Graphics object to a specified color --> Farbe vom Object
_GDIPlus_GraphicsDrawRect($oSelf._image_, 0, 0, $oSelf.width - 1, $oSelf.height - 1) ; Draw a rectangle --> Umrandung vom Object
_GDIPlus_GraphicsDrawString($oSelf._image_, $oSelf.text, 20, 20) ; Draw a string --> schreibt den Text
_GDIPlus_GraphicsDrawImage($oSelf._graphic_, $oSelf._bitmap_, $oSelf.left, $oSelf.top) ;Draw an Image object --> Das Object wird erstellt
EndFunc ;==>__Button_Draw
Func __Button_Destructor($oSelf)
_GDIPlus_GraphicsDispose($oSelf._image_)
_GDIPlus_BitmapDispose($oSelf._bitmap_)
_GDIPlus_GraphicsDispose($oSelf._graphic_)
EndFunc ;==>__Button_Destructor
Func __Next__(ByRef $self, ByRef $count)
Local $asProperty[] = ['left', 'top']
Local $i, $oTmp
If $count = UBound($asProperty) Then
For $i = 0 To UBound($asProperty) - 1
$oTmp = Execute('$self.' & $asProperty[$i])
_AutoItObject_AddProperty($self, $asProperty[$i], $ELSCOPE_PUBLIC, $oTmp())
Next
Return SetError(1)
EndIf
$count += 1
Return Execute('$self.' & $asProperty[$count - 1])
EndFunc ;==>__Next__
Func __Reset__(ByRef $self, $count)
Local $asProperty[] = ['left', 'top']
Local $i
For $i = 0 To UBound($asProperty) - 1
_AutoItObject_AddProperty($self, $asProperty[$i], $ELSCOPE_PUBLIC, _Enum_Object(Execute('$self.' & $asProperty[$i])))
Next
EndFunc ;==>__Reset__
; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
Func _Enum_Object($value)
Local $oObject = __Class_Enum().Object
_AutoItObject_AddProperty($oObject, '__value__', $ELSCOPE_PRIVATE, $value)
Return $oObject
EndFunc ;==>_Enum_Object
Func __Class_Enum()
Local $oClass = _AutoItObject_Class()
$oClass.AddMethod('__default__', '__Enum_Default__')
Return $oClass
EndFunc ;==>__Class_Enum
Func __Enum_Default__($self, $value = Default)
$self.__value__ = ($value <> Default ? $value : $self.__value__)
Return $self.__value__
EndFunc ;==>__Enum_Default__
; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
Func GetPosMouse()
Local $a = GUIGetCursorInfo()
If $a[0] < $oButton.width = 200 and $oButton.height = 50 Then
ConsoleWrite("> " & $a[0] & @CRLF)
ConsoleWrite("> " & $a[1] & @CRLF)
EndIf
Sleep(500)
EndFunc ;==>GetPosMouse
; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
Alles anzeigen
Gruß
Hallo @Yjug,
danke für dein Tutorial, macht OOP sehr verständlich.
Allerdings fehlt mir noch ein gedanklicher Schritt, um die Box zu bewegen.
Frage ich permanent die Position der Box ab und ändere die property, oder hat die Box keinen x/Y Wert und liegt auf einem 2. Layer auf ?
Wie soll sich die Box bewegen:
1. durch drag & drop mit der Maus
2. wenn ich die Box loslasse, soll sie sich alleine in die obere linke Ecke bewegen
Danke und Gruß,
horphi
Hallo,
diese OOP Syntax ist ja echt Wahnsinn.
Kann man im Autoit it auch eine Gui erstellen, in der der bewegliche Objekte sind?
Sprich ein Quadrat liegt auf dem "Boden" der GUI und ich kann es mit der Maus nach oben ziehen. Wenn ich die Maus loslasse, würde es wieder auf den Boden fallen.
VG
horphi
ja ja....es kann so einfach sein...
DANKE
Hi,
in dem Thema wurde die Excelformatierung besprochen. Leider finde ich diese Funktion heute nicht mehr....
Ist die umbenannt worden?
Danke und Gruß,
horphi
Vielen Dank euch beiden.
Funktioniert wunderbar.
Hallo zusammen,
wenn ich alle Spalten mit der For Schleife löschen möchte, bleibt immer eine übrig.
Weiß jemand wieso? Von 0 bis letzter Spalte müsste doch alle löschen....
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <MsgBoxConstants.au3>
Example()
Func Example()
Local $idListview
GUICreate("ListView Delete Column", 400, 300)
$idListview = GUICtrlCreateListView("col1|col2|col3", 2, 2, 394, 268)
GUICtrlCreateListViewItem("line1|data1|more1", $idListview)
GUICtrlCreateListViewItem("line2|data2|more2", $idListview)
GUICtrlCreateListViewItem("line3|data3|more3", $idListview)
GUICtrlCreateListViewItem("line4|data4|more4", $idListview)
GUICtrlCreateListViewItem("line5|data5|more5", $idListview)
GUISetState(@SW_SHOW)
MsgBox($MB_SYSTEMMODAL, "Information", "Delete Column")
_GUICtrlListView_DeleteColumn($idListview, 1)
For $i = 0 To _GUICtrlListView_GetColumnCount($idListview)
_GUICtrlListView_DeleteColumn($idListview, $i)
Next
; Loop until the user exits.
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
GUIDelete()
EndFunc ;==>Example
Alles anzeigen
Danke und Gruß,
horphi
326 ms für den gleichen Input. Vielen DANK!
Sach mal, da bin ich ein paar Stunden auf der Fähre und ihr fangt an hier sowas zu zaubern... WOW.
Vielen Dank.
Die probier ich gleich mal aus.
Viele Grüße,
horphi
Hallo Oscar,
also brauche ich gar kein ReDim?
VG
Hallo,
ich benutzte diese Funktion zum Arraysplit.
Allerdings benötigt sie sehr viel Zeit. Für 3000 Zeilen (aus einem 1D Array werden ~55 Reihen 2D Array erstellt) ca. 2,5 Minuten...
Kann man den Split noch beschleunigen?
@@ Debug(618) : _StringSplit2D Start!: / Zeit:21:33:08
@@ Debug(644) : _StringSplit2D END!: / Zeit:21:35:29
Func _StringSplit2D(ByRef $sString, $sDelim = "|", $sDelim2 = ";") ; splittet auch ARRAYS
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : _StringSplit2D Start!: ' & ' / Zeit:' & _NowTime() & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
If IsString($sString) Then
$aTmp = StringSplit($sString, $sDelim, 2)
ElseIf IsArray($sString) Then
If UBound($sString, 0) > 1 Then Return SetError(1)
$aTmp = $sString
Else
Return SetError(1)
EndIf
Local $iStart = 0
If $aTmp[0] = UBound($aTmp) - 1 Then $iStart = 1
Local $aRet[1][1]
For $i = $iStart To UBound($aTmp) - 1
$aSplit = StringSplit($aTmp[$i], $sDelim2, 2)
If $i = UBound($aRet) - 1 Then
ReDim $aRet[UBound($aTmp) + 1][UBound($aRet, 2)]
EndIf
For $x = 0 To UBound($aSplit) - 1
If $x = UBound($aRet, 2) - 1 Then
ReDim $aRet[UBound($aRet)][UBound($aSplit)]
EndIf
$aRet[$i + 1][$x] = $aSplit[$x]
Next
Next
;~ $aRet[0][0] = UBound($aRet) - 1
;~ $aRet[0][1] = UBound($aRet, 2)
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : _StringSplit2D END!: ' & ' / Zeit:' & _NowTime() & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
Return $aRet
EndFunc ;==>_StringSplit2D
Alles anzeigen
Danke und Gruß,
Horphi