Hi,
ohne das Textfile kann hier niemand etwas machen, das ist sonst nur rumgestochere im Nebel!
Wie sollen wir dein Script testen bzw. das Regex optimieren?
Beiträge von Andy
-
-
Hi,
ich fange jede Errormeldung im Fehlerfall in einer Msgbox ab:
Msgbox(0,"Funktionsname","Fehlercode Nr. " & @error & " in Modul Modulname in Funktion Funktionsname")
Das Errormanagement bzw. dessen Unterstützung ist anderen Sprachen gegenüber von AutoIt sehr stiefmütterlich umgesetzt.
Wer gewohnt ist, mit Fehlerbeschreibungen uvm. vollgeschmissen zu werden, steht bei AutoIt im Regen.
Mal davon abgesehen, bei compilierten Scripten immer noch mit der Fehlermeldung "Error 0 in Zeile 5234" abgespeist zu werden.Daher schreibt man sich bzw. in verwendeten UDF´s die Fehlerbehandlung selbst!
Vergleichbar mit dem Errorhandler für COM
Ja, der ist klasse umgesetzt!Wenn die Errorcodes wenigstens durchgehend nach einem System durchnummeriert wären, hätte man auch kein Problem, eine simple Funktion
OnError(@error) anzuspringen, in der dann die gesamte Auswertung ablaufen würde.
Denn auf das seit 35 Jahren benutzte und bewährte "On Error Gosub" können wir lange warten, das ist nämlich BASIC-like und somit seitens Dev´s lame und hat in einer modernen Sprache nichts zu suchen....
Dann lieber GARKEIN oder von den Usern selbstgeschnitztes Errormanagement, das ist hip und passt auch zur Zielgruppe! -
//EDIT, erledigt
-
Hi,
ok, der komplette Quellcode hat geholfen.
So wie es aussieht, wird der Pointer auf den String verlangt, wie bei den anderen Funktionen auch.
Das "hex" in ".txt_hex" hat demnach weniger mit der Übergabe an die Funktion, sondern eher mit dem Dateiinhalt zu tun...
Hast du den mal verifiziert?
Funktionieren die Funktionen trxPS und trxEON_PS? -
Hi,
// The file must be of type .txt_hex
was bedeutet das "hex"?IdR werden Strings einfach so übergeben:
[autoit]$trxString = DllCallAddress("INT", $trxLoadRDS, "BYTE", $Unit, "STR*", $filename)
[/autoit]
Das Sternchen in STR* weist an, dass der Pointer auf den String übergeben wird. Testweise lass das Sternchen weg! Falls Unicodestrings verlangt werden, nimm WSTR.
Alle anderen Zeilen darüber kannst du dir dann sparen!Wenn das HEX in .txt_hex etwas zu bedeuten hat, dann könntest du den Filenamen entweder per $hex=stringtobinary($filename) entsprechend umformen, wenn das 0x am Anfang stört, schneide es per stringtrimleft($hex,2) ab.
//edit
Es gibt auch die Möglichkeit, dass der Pointer auf einen Pointer auf den String übergeben werden muss! Dann musst du den String in eine CHAR-Struct packen, deren Pointer in ein DWORD und diesen Pointer dann übergeben.
Oder mit "PTR*",$dllstructgetptr($CHARstruct)Was generell immer sinnvoll ist, ist der komplette Sourcecode der Funktion, nicht nur der Header!
-
Hi,
schau mal in der Hilfe unter StdErrRead(). Dort ist beschrieben, wie es imho RICHTIG gemacht wird!
Wie du ja selbst festgestellt hast, KANN ein einmaliger Aufruf von StdoutRead() oder StdErrRead() den vollständigen String innerhalb der Console zurückgeben, muss aber nicht!
Daher bleibt man besser auf der sicheren Seite! -
Hi,
[autoit]
du musst auch den kompletten Text auslesen!$Test = Run(@ComSpec & " /c " & 'POWERCFG -GETACTIVESCHEME', "", @SW_HIDE, 2) ;Nicht die Leerzeichen vor und nach "/c" vergessen!
[/autoit]
$GUI=""
While 1
$GUI &= StdoutRead($Test)
If @error Then ExitLoop
WEnd
MsgBox(0, "", $GUI) -
naja, ich dachte, anhand der AutoIt-Hilfe hättest du die Lösung selbst gefunden....
[autoit]$hIcon = _GDIPlus_HICONCreateFromBitmap($hImage) ;icon aus bitmap
[/autoit]
_WinAPI_SaveHICONToFile("test.ico", $hIcon) ;speichern
ShellExecute("test.ico")
Wenn du nicht weisst wie man in der Hilfe sucht, wieso fragst du nicht? -
Hi,
die Lösung ist auch etwas blöd
ist stark untertrieben^^
Die Schleife erstellt pausenlos Dateien, wenn sie denn denn durchlaufen würde.
Im Array sollen Elemente gelöscht werden, welche garnicht existieren, daher die Fehlermeldung.
Arrays pausenlos zu erstellen und danach zu löschen ist murks! Wenn man vorher weiß, welche Dimension das Array haben soll, dann definiert man das EIN MAL am Anfang des Scripts!Das mit den vielen Randoms habe ich auch nicht verstanden.
$key = 0x219BB182AA73 ist auch etwas seltsam, sollte wohl eine Farbe sein...Ich versuche mal, das etwas zusammenzufassen :o)
Spoiler anzeigen
[autoit]#include <GDIPlus.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
#include <Array.au3>Opt("GUIOnEventMode", 1) ;OnEventmodus einschalten
[/autoit] [autoit][/autoit] [autoit]Global $gui = GUICreate("gdiplus", 300, 300) ;GUI erstellen
[/autoit] [autoit][/autoit] [autoit]
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit", $gui) ;Grafik speichern und beenden
GUISetState() ;GUI anzeigen
_GDIPlus_Startup() ;GDI startenGlobal $grafik = _GDIPlus_GraphicsCreateFromHWND($gui) ;Context erstellen
[/autoit] [autoit][/autoit] [autoit]
Global $hImage = _GDIPlus_BitmapCreateFromGraphics(300, 300, $grafik)
Global $hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage);_GDIPlus_GraphicsClear($hGraphic, 0xFF00FFFF) ;Hintergrund
[/autoit] [autoit][/autoit] [autoit]
$pen = _GDIPlus_PenCreate("0xFFF00FFF", 20) ;pen
_GDIPlus_GraphicsDrawRect($hGraphic, 0, 0, 300, 300, $pen);linieWhile 1 ;Endlosschleife
[/autoit] [autoit][/autoit] [autoit]
$x1 = Random(1, 300, 1) ;Random
$y1 = Random(1, 300, 1)
$x2 = Random(1, 300, 1)
$y2 = Random(1, 300, 1)
$key = "0xFF" & String(Random(1, 0xFFFFFF, 1));zufällige Farbe für den
$pen = _GDIPlus_PenCreate($key, 11) ;pen
_GDIPlus_GraphicsDrawLine($hGraphic, $x1, $y1, $x2, $y2, $pen);linie
_GDIPlus_GraphicsDrawEllipse($hGraphic, $x1 / 2, $y1 / 2, $x2 / 2, $y2 / 2, $pen);Kreis
_GDIPlus_GraphicsDrawImageRect($grafik, $hImage, 0, 0, 300, 300);Image in gui anzeigen
Sleep(1000)
WEndFunc _Exit()
[/autoit] [autoit][/autoit] [autoit]_GDIPlus_ImageSaveToFile($hImage, @ScriptDir & "\Gespeichert.jpg");speichern
[/autoit] [autoit][/autoit] [autoit][/autoit]
_GDIPlus_ImageDispose($hImage) ;löschen
_GDIPlus_Shutdown() ;GDI beenden
ShellExecute(@ScriptDir & "\Gespeichert.jpg");ICO anzeigen
Exit ;ende
EndFunc ;==>_Exit -
BugFix´ens Lösung ist ideal, wenn man einer bestehenden GUI bspw. weitere Eingabefelder zuweisen will, deren Zuweisung in die bestehende Struktur integriert werden soll.
Ansonsten erstellt man einfach die Controls in ihrer per TAB oder ENTER (oder wie auch immer) getriggerten Reihenfolge und "springt" über die Control-ID.
-
Hi,
sieht gut aus!
Da ich selbst viel mit CSV arbeite (allerdings nur in VBA), bestünden ggf. weitere Anforderungen
:
- String in CSV finden und Zeile/Spalte ausgeben
- Den n-ten Feldinhalt in einer Zeile zurückgeben
- Anzahl Felder einer (der aktuellen) ZeileAllerdings muss ich zugeben, dass die vorliegende UDF außer als Programmierbeispiel für AutoItObjekt keinerlei Vorteile gegenüber eines simplen 2D-Arrays/Listen hat!
Mir erscheint das Objektgedöns (in diesem Fall! ) eher kontraproduktiv. -
-
[autoit]
$text="1.2.3.4/bla/blub 1234567890 " & @crlf & "http.//bla.blub/tralala" & @crlf & "128.2.3.4/huhu " & @crlf & "17.12.2012 tralala " & @crlf& "http://192.168.2.1/AutoIt" &@crlf
[/autoit][autoit][/autoit][autoit]ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $text = ' & $text & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
[/autoit][autoit][/autoit][autoit]filedelete("IP.txt")
[/autoit][autoit][/autoit][autoit]
filewrite("IP.txt",$text)$dat=fileread("IP.txt")
[/autoit][autoit][/autoit][autoit]$ret= StringRegExpReplace($dat,"(?miU)(\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}.*\r\n)","")
[/autoit][autoit][/autoit][autoit][/autoit]
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $ret = ' & $ret & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Consoleweil Weihnachten ist, legen wir heute mal den Arm aus der Sonne^^
//EDIT
schau mal, was bei deinem $text = @ScriptDir & "test_offline.log" in der Variablen steht!!! -
so?
[autoit]$text="1.2.3.4 bla blub 128.2.3.4 huhu 17.12.2012 tralala 192.168.2.1 AutoIt"
[/autoit][autoit][/autoit][autoit]
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $text = ' & $text & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console$ret= StringRegExpReplace($text,"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}","")
[/autoit]
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $ret = ' & $ret & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console -
Zitat
Die AutoIt devs sind darauf gekommen Schau dir mal die neuste Beta an. Da gibt es Maps..
jo, statt die Funktionen, die 90% aller User täglich benotigen zu verbessern, wird etwas hinzugefügt, was maximal 1% der User vermissen....
Man könnte fast meinen, die würden für M$ arbeiten
Dort wurde mir telefonisch von einem Entwickler mitgeteilt, als ich div. Excel-Bugs "gefixt" haben wollte:" Aber Herr XXXX, wir verdienen Milliarden mit diesem Produkt, würden Sie daran etwas ändern?!"
Das war vor ca. 15 Jahren, und daran hat sich bis heute nichts geändert!
Wenigstens habe ich seitdem verstanden, nach welchen Prämissen heutzutage programmiert wird!
-
Frohe Weihnachten euch allen und euren Familien!
@eukalypus....wie wahr!

-
Sollte gepinnt werden!
Wieso kommen die AutoIt-DEV´s nicht auf so etwas?!
DAS wäre mal ein Grund, auf eine der neuen Versionen upzudaten.Ich werde mal prüfen, inwieweit man diese Funktionen komplett in die bereits bestehenden _ArrayXXXXX()-Funktionen transferieren kann!
-
AutoIt liest nur den TCP-Puffer aus.
Erst dann wird das nächste ACK zum Sender geschickt, so dass dieser wieder Daten (maximal die TCP Receive Window Size) sendet.Da geht nichts verloren....
-
Irgendwelche Programme oder gar den Umweg über Linux sind dafür sind schlicht überflüssig.
Ich will ja nicht diskutieren, aber du brauchst bei deiner Lösung IMMER Programme und gleichzeitig Zugang zum Server.
Wie du das bei einem Rechner irgendwo weit ab vom Schuss und gecrashter Platte hinbekommen willst, ist mir ehrlich gesagt ein Rätsel!
Unseren Außendienstlern wurde mit einer bootbaren, geklonten Platte genau dieses Problem abgenommen. Diese Jungs haben größtenteils KEIN EDV-Verständnis, aber einen USB-Stecker in eine Buchse fummeln und dann einen beliebigen Rechner starten bekommen selbst die noch hin
Die Alternative ist Einschicken des Rechners und mindestens 1 Woche auf Ersatz warten, oder einen Mitarbeiter 2 Tage verreisen zu lassen um .....tadaaaa.....eine geklonte Platte zu tauschen!In der neuesten c´t wird eine "ein-Klick-Lösung" (unter Win 8.1) mit Bordmitteln vorgestellt!
-
Ich bin mal wieder raus....
Nach 10 Tagen und 10 Posts ist der TE nicht in der Lage, die Batchdatei zu posten. Die Begründungich möchte die Batch durch ein reines AutoIt Tool ersetzen. Und da die Idee und die Umsetzung meines Batch-Tools von mir stammt möchte ich auch nicht das jeder meine Batch besitzt um sie nachbauen zu können. Daher gehe ich auch nicht weiter darauf ein, wofür sie verwendet wird, denn Google liest mit
ist der Brüller an sich! Meine ersten Batchdateien habe ich 1984 geschrieben, seitdem ist ALLES ausgereizt worden. Da gibt es keine Geheimnisse mehr!
Ich habe in den 90ern Code gesehen, da haben 3 IBM-Programmierer eine Woche analysiert was ein Kollege da fabriziert hatte. Dagegen war Assembler-Debugging ein Kinderspiel!@Threadersteller
Andere Leute sollen DEINE Arbeit machen, Infos gibts bis auf 2 Zeilen Code keine, was zu Rumgestochere im Nebel und zu Glaskugelgelese führt. Natürlich werden die Helfer nicht erwähnt, auch eventuelle andere User mit demselben Problem finden infolge "Geheimhaltung" diesen Thread nicht...Alles in allem wieder mal ein User und ein Thread, wie ihn kein Forum gebrauchen kann!