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

Beiträge von Andy

  • gelöst: INet-Geschwindigkeitsnachweis

    • Andy
    • 18. August 2014 um 13:38

    Hi,

    Alina,

    Zitat

    Ich würde gerne nachweisen, das meine 16.000 Leitung im Tagesdurchschnitt 7.372 hat.

    Diese Daten musst du ja irgendwo her haben! Nur über "wieistmeineip.de" geprüft?

    Das Problem in solchen Fällen ist, dass du UNABHÄNGIG von DEINEM Equipment NACH der Anschlussdose beweisen musst, dass die Leitung nicht mehr hergibt. Und das ist ohne spezielle Technik nicht möglich.
    Natürlich könntest du jede halbe Stunde einen oder mehrere Speedtests durchführen, aber du bist rechtlich bewandert genug um zu wissen, dass diese Tests keine Grundlage für einen Rechtsstreit sein können!

    Umgekehrt wird ein Schuh daraus!
    Bestelle einen Techniker von deinem Provider, ab besten für Abends (da wird aber keiner kommen, da jeder weiss, dass dann "das Internet verstopft ist" ^^ ). Der Techniker soll einen Laptop mitbringen und eine oder mehrere GROSSE ( ggf. >1 GB ) Dateien von einem beliebigen Server seiner Wahl downloaden. Die Downloadzeit wird "mit der Hand" ausgestoppt und alles ist paletti. Dauert eine Viertelstunde und du weisst, wo du dran bist...
    Kommt dann eine Transferrate sehr viel kleiner als deine 16.000 kBit/s zustande, soll dir der Techniker schriftlich die Messergebnisse bestätigen. Dann hast du etwas in der Hand. Bei dieser Messung wird er alles versuchen, um hohe Transferraten nachzuweisen.

    Zitat

    und zweitens kam das von heute auf morgen.

    Schließe dein Windows aus, nimm deine Geräte alle (auch Fernseher, Radio, Smartphone, Wii... ) vom Netz!
    Prüfe mit Laptop vom Nachbarn/Freund (per Kabel anschließen, NICHT übers WLAN) ob bei diesem Gerät die Datentransferrate auch so schlecht ist.
    Netzwerken ist eine Sache für sich. Da kann irgendein Gerät dazwischenfunken, an das niemand denkt...

  • Case Anweisung mit Array?

    • Andy
    • 14. August 2014 um 07:08

    So

    Spoiler anzeigen
    [autoit]

    Opt("GUIOnEventMode", 1)

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

    $hgui = GUICreate("getid", 220, 220)
    For $i = 0 To 15 ;16 Buttons erzeugen
    $id = GUICtrlCreateButton(Chr($i + 65), 10 + Mod($i, 4) * 50, 10 + Int($i / 4) * 50, 40, 40);raster
    GUICtrlSetOnEvent(-1, "getid") ;funktion zuweisen
    Next
    GUISetOnEvent(-3, "_exit") ;ende
    GUISetState()

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

    While Sleep(10)
    WEnd

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

    Func getid()
    $id = @GUI_CtrlId ;gibt die ID zurück
    MsgBox(0, "Test", "Es wurde der Button mit der ID= " & $id & " gedrückt!", 1)
    EndFunc ;==>getid

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

    Func _exit() ;ende
    Exit
    EndFunc ;==>_exit

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

    oder so

    Spoiler anzeigen
    [autoit]

    ;by Andy

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

    $numberofbuttons = 24 ;number from 1 to 30
    Dim $buttoncontrolID[$numberofbuttons + 1]

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

    GUICreate("test")
    For $i = 1 To $numberofbuttons ;we make an array of buttons
    $buttoncontrolID[$i] = GUICtrlCreateButton(" Button " & $i, 10 + ((($i > 10) + ($i > 20)) * 100), 30 + ($i - (($i > (($i > 20) + 1) * 10) * (($i > 20) + 1) * 10)) * 30,85,30)
    Next
    $somethingbutton=guictrlcreatebutton("do something ",310,30,80,30 )

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

    ;here you could give the buttons an other text or color
    guictrlsetdata($buttoncontrolID[1] ,"Push!")
    GUICtrlSetColor($buttoncontrolID[1],0xFF00FF)
    guictrlsetdata($buttoncontrolID[13],"Push ME!")
    GUICtrlSetColor($buttoncontrolID[13],0x000FFF)
    guictrlsetdata($buttoncontrolID[17],"Push ME TOO!")
    GUICtrlSetColor($buttoncontrolID[17],0xFF0000)

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

    GUISetState()

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

    While 1
    $msg = GUIGetMsg()
    ;ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $msg = ' & $msg & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    Switch $msg
    Case -3 ;exit is pressed
    Exit
    case $somethingbutton
    Msgbox (0,"","Button ""do something"" is pressed")

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

    Case $buttoncontrolID[1] To $buttoncontrolID[$numberofbuttons] ;one of the "array"-Buttons is pressed
    call ("_arraybutton_"&($numberofbuttons-($buttoncontrolID[$numberofbuttons]-$msg))) ;names oft the functions are _arraybutton_1() _arraybutton_2().....
    If @error = 0xDEAD And @extended = 0xBEEF Then MsgBox(4096, "ERROR", "Function "&"_arraybutton_"&($numberofbuttons-($buttoncontrolID[$numberofbuttons]-$msg))&" does not exist!")
    EndSwitch
    WEnd

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

    ;*******************functions********************************
    func _arraybutton_1()

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

    msgbox(0,"_arraybutton_"&($numberofbuttons-($buttoncontrolID[$numberofbuttons]-$msg)),"arraybutton pressed: "&GUICtrlRead($msg))
    endfunc
    ;
    ; here are the funcs of the buttons
    ;
    ;
    func _arraybutton_13()
    msgbox(0,"_arraybutton_"&($numberofbuttons-($buttoncontrolID[$numberofbuttons]-$msg)),"arraybutton pressed: "&GUICtrlRead($msg))
    endfunc

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

    func _arraybutton_17()
    msgbox(0,"_arraybutton_"&($numberofbuttons-($buttoncontrolID[$numberofbuttons]-$msg)),"arraybutton pressed: "&GUICtrlRead($msg))
    endfunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit]
  • Case Anweisung mit Array?

    • Andy
    • 14. August 2014 um 07:08

    So

    Spoiler anzeigen
    [autoit]

    Opt("GUIOnEventMode", 1)

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

    $hgui = GUICreate("getid", 220, 220)
    For $i = 0 To 15 ;16 Buttons erzeugen
    $id = GUICtrlCreateButton(Chr($i + 65), 10 + Mod($i, 4) * 50, 10 + Int($i / 4) * 50, 40, 40);raster
    GUICtrlSetOnEvent(-1, "getid") ;funktion zuweisen
    Next
    GUISetOnEvent(-3, "_exit") ;ende
    GUISetState()

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

    While Sleep(10)
    WEnd

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

    Func getid()
    $id = @GUI_CtrlId ;gibt die ID zurück
    MsgBox(0, "Test", "Es wurde der Button mit der ID= " & $id & " gedrückt!", 1)
    EndFunc ;==>getid

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

    Func _exit() ;ende
    Exit
    EndFunc ;==>_exit

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

    oder so

    Spoiler anzeigen
    [autoit]

    ;by Andy

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

    $numberofbuttons = 24 ;number from 1 to 30
    Dim $buttoncontrolID[$numberofbuttons + 1]

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

    GUICreate("test")
    For $i = 1 To $numberofbuttons ;we make an array of buttons
    $buttoncontrolID[$i] = GUICtrlCreateButton(" Button " & $i, 10 + ((($i > 10) + ($i > 20)) * 100), 30 + ($i - (($i > (($i > 20) + 1) * 10) * (($i > 20) + 1) * 10)) * 30,85,30)
    Next
    $somethingbutton=guictrlcreatebutton("do something ",310,30,80,30 )

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

    ;here you could give the buttons an other text or color
    guictrlsetdata($buttoncontrolID[1] ,"Push!")
    GUICtrlSetColor($buttoncontrolID[1],0xFF00FF)
    guictrlsetdata($buttoncontrolID[13],"Push ME!")
    GUICtrlSetColor($buttoncontrolID[13],0x000FFF)
    guictrlsetdata($buttoncontrolID[17],"Push ME TOO!")
    GUICtrlSetColor($buttoncontrolID[17],0xFF0000)

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

    GUISetState()

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

    While 1
    $msg = GUIGetMsg()
    ;ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $msg = ' & $msg & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    Switch $msg
    Case -3 ;exit is pressed
    Exit
    case $somethingbutton
    Msgbox (0,"","Button ""do something"" is pressed")

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

    Case $buttoncontrolID[1] To $buttoncontrolID[$numberofbuttons] ;one of the "array"-Buttons is pressed
    call ("_arraybutton_"&($numberofbuttons-($buttoncontrolID[$numberofbuttons]-$msg))) ;names oft the functions are _arraybutton_1() _arraybutton_2().....
    If @error = 0xDEAD And @extended = 0xBEEF Then MsgBox(4096, "ERROR", "Function "&"_arraybutton_"&($numberofbuttons-($buttoncontrolID[$numberofbuttons]-$msg))&" does not exist!")
    EndSwitch
    WEnd

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

    ;*******************functions********************************
    func _arraybutton_1()

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

    msgbox(0,"_arraybutton_"&($numberofbuttons-($buttoncontrolID[$numberofbuttons]-$msg)),"arraybutton pressed: "&GUICtrlRead($msg))
    endfunc
    ;
    ; here are the funcs of the buttons
    ;
    ;
    func _arraybutton_13()
    msgbox(0,"_arraybutton_"&($numberofbuttons-($buttoncontrolID[$numberofbuttons]-$msg)),"arraybutton pressed: "&GUICtrlRead($msg))
    endfunc

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

    func _arraybutton_17()
    msgbox(0,"_arraybutton_"&($numberofbuttons-($buttoncontrolID[$numberofbuttons]-$msg)),"arraybutton pressed: "&GUICtrlRead($msg))
    endfunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit]
  • cdm, ein "Oldy" ist nun auch dabei!

    • Andy
    • 12. August 2014 um 07:26

    Hallo,

    schön, dass sich mal wieder ein neuer "Alter" hierher verirrt hat. Wird sicher interessant, ich freu mich drauf...
    OS2, hach, war des schee...auf einer Microchannelmaschine....damals hat sich alles aufgeregt, wie IBM nur so Unverschämt sein konnte, Soft- und Hardware zu verknüßfen und zu verdongeln/lizensieren.
    Heute ist Apple mit diesem Konzept die NR. 1 auf dem "EDV"-Markt. Zeiten ändern sich, aber Skill bleibt!

  • DLLs in Perseus schreiben und in AutoIt nutzen

    • Andy
    • 10. August 2014 um 21:17

    //EDIT
    Habs gefunden, der Code von Perseus (funzt nicht)

    Code
    .code:00402000                 push    0               ; lpModuleName
    .code:00402002                 call    ds:GetModuleHandleA
    .code:00402008                 mov     dword_401000, eax
    .code:0040200D                 push    ebp
    .code:0040200E                 mov     ebp, esp
    .code:00402010                 mov     eax, 1
    .code:00402015                 leave
    .code:00402016                 retn    0Ch


    der hier schon....

    Code
    .text:00401000                 push    ebp
    .text:00401001                 mov     ebp, esp
    .text:00401003                 push    0               ; lpModuleName
    .text:00401005                 call   ds:GetModuleHandleA
    .text:0040100A                 mov     eax, 1
    .text:0040100F                 leave
    .text:00401010                 retn    0Ch

    doch Stack....

  • DLLs in Perseus schreiben und in AutoIt nutzen

    • Andy
    • 10. August 2014 um 18:43

    Bei mir gibts schon einen Error wenn die dll per DllOpen() geladen werden soll.
    Ich vermute, dass die Dll nur dann geladen wird, wenn zufällig der richtige "Zustand" erreicht wurde.
    Daher auch meine Verwunderung bzgl. dem jmp $+5 , das ist ein Sprung in deine Funktionen-Adressliste?!
    Ich habe mal eine Minimal-dll gebaut und mit Perseus compiliert.

    Code
    application PE GUI DLL;
    export DrawSine( dword cxClient) as dword;
    	return(cxClient);
    end;


    Da du auch FASM benutzt, habe ich mal eine Minimal-DLL per FASM erstellt, die funzt einwandfrei, ich lasse aber auch GetModuleHandleA (probier mal GetModuleHandleW) immer weg. Bei der Gelegenheit habe ich auch gesehen, dass du die Sections kleiner machst.
    Zeig doch mal den Code, welchen du dem FASM vorwirfst.

    //EDIT Schon im DllEntryPoint() zeigt IDA einen Stackpointer-Fehler beim DllEntryPoint endp! Da stimmt was nicht :D

  • DLLs in Perseus schreiben und in AutoIt nutzen

    • Andy
    • 10. August 2014 um 15:50

    Die Dll wird nun erstellt, allerdings gibt es ein Problem im AutoIt-code.
    Bei ca. 19 von 20 Starts des Scriptes wirft der DllCall() eine Fehlermeldung ( >Error code: 1 ) irgendwann klappt der Call und man sieht die Kurve im Fenster. Sehr seltsam...

  • DLLs in Perseus schreiben und in AutoIt nutzen

    • Andy
    • 10. August 2014 um 13:52

    Das dll-Compiler-Script wird jetzt gestartet, greift allerdings auf eine Exe im Verzeichnis C:\PerseusDEV\ zu...diese Exe existiert dort logischerweise nicht^^
    Wo finde ich diese Datei?
    Btw. habe ich die Verzeichnisse angepasst im Execute-Fenster, daher nur aus dem schütteren Gedächtnis..

    Das Mandelbrot ist schon in der Warteschleife 8o

  • Performance-Analyse der neuen Datenstruktur "Map"

    • Andy
    • 10. August 2014 um 13:23
    Zitat von BugFix

    Dem Einen ist es recht, wenn der Funktionsumfang der Sprache so groß wie möglich ist, dem Anderen reicht eine schmale Basis, die man gern durch UDF aufpeppen kann. Und hier gibt es vermutlich für beide Seiten ausreichend Für und Wider.

    was aber die Frage offenlässt, warum ein "Objekt" Maps aus den Fingern gesaugt wird, welches die Funktionalität von Arrays nachbildet, mit dem Unterschied, SCHNELL und DYNAMISCH erweitert werden zu können.
    Imho wäre 99% der User eher damit geholfen, das elend langsame ReDim(men) von Arrays anzupassen bzw. gleich wegzulassen (und wenn man schon dabei ist, eine dynamische Key/Value und Value/Key-Funktion einzubauen), als eine neue Funktion zu schnitzen, welche einigen wenigen Cracks bei Spezialanwendungen Vorteile bringt....

  • DLLs in Perseus schreiben und in AutoIt nutzen

    • Andy
    • 10. August 2014 um 07:29

    Hi,
    habs nicht ausprobiert, aber die dll angeschaut :D
    Ggf. könnest du noch den Compiler "optimieren"

    Code
    .code:0040294A                 mov     eax, flt_401010
    .code:0040294F                 push    eax
    .code:00402950                 push    447A0000h
    .code:00402955                 pop     edx
    .code:00402956                 pop     eax
    
    
    oder
    .code:00402885                 push    eax
    .code:00402886                 lea     eax, [ebp+arg_4]
    .code:0040288C                 mov     eax, [eax]
    .code:0040288E                 push    eax
    .code:0040288F                 pop     edx
    .code:00402890                 pop     eax
    Alles anzeigen

    Das 2-Zeilen LEA-Konstrukt passt natürich in ein MOV, allerdings weiss ich, woher das kommt und welche Idee dahinter steckt, daher für die hervorragende Arbeit 5 Sternchen und noch eins extra für das Grinsen in meinem Gesicht infolge

    Code
    .code:004027DD                 mov     dword_401020, eax
    .code:004027E2                 push    dword_401020
    .code:004027E8                jmp     $+5
    .code:004027ED                 leave
    .code:004027EE                 retn    4


    //EDIT (ich wollte es doch mal ausprobieren....)
    Beim compilieren über NP++Exec wird folgender Fehler geworfen:

    Spoiler anzeigen

    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.


    //EDIT2
    ich meine irgendwo gelesen zu haben, dass Perseus5 nur noch unter Win8.1 läuft....habe Win7-64, liegt das daran?

    Dateien

    Perseus.jpg 90,2 kB – 0 Downloads
  • Performance-Analyse der neuen Datenstruktur "Map"

    • Andy
    • 9. August 2014 um 17:04
    Zitat

    Bearbeitest du Excel-Dateien etwa auch nur mit Stringfunktionen? Oder sqlite-db-Dateien?

    hehe, erwischt!
    Ich bearbeite in VBA Excel-Dateien (ungeöffnet) per ADO/DOA Datenbankabfrage über ein Recordset in ein Array, das geschieht im Millisekundenbereich, während das reine Öffnen der Datei und anschließendes "geExcele" mehrere Sekunden benötigt. Natürlich benutze ich auch "normale" Excel-Funktionen, wenn es nicht zeitkritisch ist ;) (was aber zugegebenermaßen selten vorkommt... )

    Zitat

    Aber eine Baumstruktur (wie z.B. beim DOM) wäre ebenfalls geeignet sinvoll mit diesen Daten zu arbeiten und bei vielen Fragestellungen die geeignetere Wahl als auf Stringebene zu arbeiten.

    yepp, auch XML-Files als Steuerungsdateien für Maschinen werden in Millisekunden per Stringbefehl bearbeitet. Da interessiert mich dann auch nicht, wenn der Maschinenhersteller bzw. die Softwarefirma im Monatstakt die Struktur ändert/erweitert. Solange die "Marker" bzw. Bezeichner für meine Daten gleich bleiben und dahinter der gewünschte Maschinenparameter steht, ist alles paletti. Zudem kommt noch, dass ich keine Zeit und schon gar keine Lust habe, mich in (ggf externe) Software zum handling dieser Daten einzuarbeiten.

    Dazu kommt, dass ich, wie du aus den vorherigen Posts sicherlich längst festgestellt hast, größtenteils lesend auf die Daten zugreife. Schreibend gibt´s auch den einfachen Weg: Datei öffnen und den Text an der Position des zu schreibenden Strings teilen, den LINKEN Teil des "Textes" zusammen mit dem STRING und dem RECHTEN Teil zusammenfassen und speichern, fertig.

    Sicherlich werden jetzt einige von euch "Programmierern" lachen, und ehrlich gesagt habt ihr nicht mal unrecht. Ich bin ja selbst kein Programmierer...
    ABER ich verweise auf einen Vorfall vor ca. 2 Jahren, als ich mich von einigen "richtigen" Programmierern und deren Chefs der von uns verwendeten Branchensoftware auslachen lassen musste, weil ich die behäbige und nicht praktikable Umsetzung eines ihrer Softwaremodule in unserer Fertigung bemängelte. Das Modul läuft auf einem "Mini-PC" als VB-Anwendung im IE remote und kommuniziert mit einer Datenbank, ich glaube, da muss ich nicht mehr viel anderes dazu sagen.
    Auf meinen Lösungsvorschlag folgte schallendes Gelächter und ein anschließendes Angebot, das Modul für etliche tausend Euros zu bearbeiten und/oder auf "Updates" zu warten. Naja, auf die Updates wartet kein Mensch mehr, kein Wunder, zaubern können die nämlich nicht, in der verwendeten Umgebung ist halt "nicht mehr drin"!
    Ich habe daraufhin das Modul durch ein von mir entwickeltes TDM "Textdateienbasiertes Datenbankähnliches Modell" :D ersetzt mit dem Geschwindigkeitsfaktor 100. Das spart an ca. 10 Arbeitsplätzen täglich 1-2 Stunden und hat mich alles in allem 3 Tage "gehacke" gekostet. Als Frontend nutze ich gezwungenermaßen Excel :rofl:
    Beim nächsten Besuch der Programmierer waren die fassungslos, kein Wunder. Ihr Chef bat mich dann, meine Anwendung mit deren Logo zu versehen, damit sie damit auch bei anderen Kunden mit der "hervorragenden" Eignung ihrer Software im Hinblick auf Erweiterbarkeit und Anpassung auf kundeneigene Gegebenheiten werben können. Ich habe das wohlwollend zur Kenntnis genommen, provokativ sofort unsere eigenes Logo eingebaut, und habe seitdem einen guten Kontakt zu diesen Jungs...Wirklich ernst nehmen die mich noch nicht, aber mich auszulachen traut sich aber auch keiner mehr.

    Beim Kauf neuer Produktionsmaschinen im Millionenbereich kam dann auch das Gespräch auf ein "Übersetzungsprogramm" der von der Branchensoftware generierten Maschinendaten auf das Format der Maschinenhersteller. Im Raum standen für dieses "Übersetzungsprogramm" >50.000€. Die Datensatzbeschreibungen beider Formate als "Textdateien" lagen auf dem Tisch. In meiner herzhaften Art hab ich dann nur noch gefragt "Wollen sie mich verar***, so ein Programm habe ich in zwei Wochen selbst geschrieben! Textdatei öffnen, per lowlevel-Stringbefehlen die relevanten Daten auslesen und in einer anderen Anordnung wieder in eine Textdatei schreiben ist eine Aufgabe für einen Praktikanten!". Pikiert sind die Jungs abgehauen. Nach drei Tagen lag ein Angebot über 5.000€ auf dem Tisch, na also, geht doch.

    Was das jetzt mit dem Threadtitel zu tun hat?
    Lohnt die Einarbeitung in ein "neues" Konzept, welches zugegebenermaßen bei bestimmten Anwendungen Vorteile bietet, aber bei anderen Problemstellungen massiv (ich zitiere: ) "abstinkt"?
    Bin ich auf Gedeih und Verderb den Vorgaben von "Programmierern" und deren Skill ausgeliefert?
    Reichen einem Anfänger für eine einfache Textbearbeitung nicht auch die einfachen Stringfunktionen, wieso wird sofort RegEx empfohlen?
    Muss man CSV-ähnliche Dateien in Scripting Dictionarys verfrachten um darüber an Daten zu kommen?
    "Braucht" man Map´s wirklich?

  • Clickbot geht zu früh los

    • Andy
    • 9. August 2014 um 15:00
    Zitat

    $var
    Error:Incorrect number of parameters in function call
    #######
    was ist falsch?

    Blick in die Hilfe verpennt?
    ControlID fehlt...

  • Clickbot geht zu früh los

    • Andy
    • 9. August 2014 um 14:56

    Hi,

    Zitat

    wie lasse ich ihn warten bis es wirklich offen und gestartet ist?

    Remote? Garnicht!
    Das Problem ist so alt wie Windows selbst und nennt sich Windows. Niemand, nicht mal Windows selbst kann dir sagen, ob das was du auf dem Bildschirm siehst, nicht entweder schon längst obsolet ist, oder noch garnicht aktiv im Sinne von ab sofort beeinflussbar!
    So bleibt dir nichts weiter übrig, als entweder mit vielen (langen) Sleeps zu arbeiten, oder mit Abfragen innerhalb von (Endlos)-Schleifen die gewünschten Zustände (Fenster aktiv und eingabebereit) SICHER abzufangen.

    Ich kämpfe täglich mit diesem Problem bei der Automatisierung von Datenbank-Frontends, welche, wie übrigens die meisten M$-Programme auch, sich einen SCHEISS um das Windows-Fenster-Management scheren.
    Da musst du aktive Fenster mehrmals aktivieren, damit die Controlsends funktionieren und immer wieder abfragen, ob Fenster auch wirklich geöffnet sind bzw. das Control die Eingabe auch wirklich bekommen hat.
    Remote wird dermaßen viel von diesen Messages "verschluckt", das geht auf keine Kuhhaut. Aber wenn man sich daran gewöhnt hat, und sich stundenlang Workarounds ausdenkt funktionieren die Scripte (meistens) und man kann Kaffee trinken gehen :thumbup:

    Zitat

    es soll nur schnell fertig sein.

    vergiss es! "Schnell" steht WEIT hinter der Option "Sicher", das steht fest! Natürlich kannst du Wartezyklen usw. verkürzen, aber das Problem tritt spätestens auf, wenn du diese Scripte dann von einem anderen Rechner startest und sie dann nicht mehr funktionieren.

  • Ordnerpfad aus Textdatei auslesen

    • Andy
    • 9. August 2014 um 10:01

    Hi,

    Zitat

    aber im Prinzip sollte das ja so immer funktionieren oder?

    Ja, das funktioniert immer so^^
    Einfache Probleme löst man mit einfachen Funktionen.
    Du könntest natürlich auch den kompletten Text aus der Datei "am Stück" und nicht zeilenweise einlesen, das hätte den Vorteil, schnell überprüfen zu können, ob der gesuchte String überhaupt in der Datei steht, und auch wo.

    [autoit]

    $Dateiinhalt=FileRead("Datei.txt") ;der Inhalt der Datei befindet sich als String in der Variablen

    [/autoit]

    Übrigens sehr schön deine verwendeten Kommentare, da sollten sich einige "gestandene Programmierer" mal eine dicke Scheibe abschneiden!

  • Algorithmic Symphonies - Experimental Synthesizer

    • Andy
    • 9. August 2014 um 09:31

    Cool, wieder mal ein echter Eukalyptus!

    Ob man die "Sounds" irgendwie über Mausbewegungen beeinflussen könnte? Und dann noch mit mehreren Leuten zusammen jammen? 8o

    Ich dachte da an so etwas ähnliches wie bei Plink.., wo man mit mehreren Leuten zusammen Musik machen kann.
    Dort habe ich schon Stunden verbracht....allerdings ist dort nicht mehr viel los.
    Leider spiele ich selbst keine Instrumente, daher ist so etwas wie Plink oder auch JAM mit Chrome für mich eine schöne Sache um "selbst" Musik machen zu können.

  • technisches Zeichnen am PC

    • Andy
    • 9. August 2014 um 01:06
    Zitat von Alina

    Die sog. Blattgröße muss aber 3m x 3m unterstuützen.

    Wer sich einen 3m-Plotter leisten kann, für den stellt sich nicht die Frage des Preises für ein CAD-Programm. :D

    Ich bin auch mit SketchUp immer gut zurechtgekommen.

    Alina, sag doch mal, um was es genau geht (curiosity killed the cat 8) )

  • Performance-Analyse der neuen Datenstruktur "Map"

    • Andy
    • 9. August 2014 um 00:50
    Zitat von AspirinJunkie

    Du meinst wenn ich z.B. dass 423. Element haben will dann nehme ich StringInStr in Verbindung mit StringMid anstatt einem $Array[422]?

    nein, DAS ist der Index.
    Es geht darum, bspw. Postleitzahl und Städtenamen zuzuordnen. Das könnte man natürlich auch indizieren^^, WENN es nicht mehrere Ortschaften zur selben Postleitzahl gäbe (Dictionary fällt schon aus! )
    Kein Mensch braucht ein Dictionary/Map wenn es ausschliesslich um den Index ginge. Der umgekehrte Weg ist doch das Problem. Welche Postleitzahl hat Dexheim?
    Da musst du nach dem Ort suchen und den gesamten Datensatz durchforsten.
    Das kannst du mit einer for/in/to Schleife machen und das Array durchlaufen... :rolleyes: das ist durch den IF-Vergleich dann (obwohl man einen "step 2" verwenden kann) immer noch 15x langsamer als ein stringinstr()
    Oder du benutzt wieder das "Key"/"Value"-Konstrukt, egal wie es sich nennt. Dann brauchst du sowohl für Key/Value als auch für Value/Key jeweils eine eigene Tabelle, immer mit der Vorgabe, dass weder Key noch Value doppelt vorkommen.

    Code
    Dictionary:	67939.7 ms


    Bei dafür geeigneten Daten mag das sowohl bequem als auch schnell ( ??? ) sein, aber wenn man sowieso TEXT hat (darunter fällt imho so gut wie jede Art von Datei ^^ ) , dann finde ich es ehrlich gesagt etwas seltsam (wie bspw hier gezeigt) , dass man csv-Dateien in Dictionarys verfrachtet, anstatt die enthaltenen Texte direkt zu bearbeiten/abzugleichen.
    Erinnert mich stark an die Scripte, die Farbwerte der einzelnen Pixel eines Bildes in ein 1024x768-Array zu schreiben und dann per Schleife dort "Pixel" zu suchen.

    Zitat von AspirinJunkie

    Key-Value ist ein Szenario - ein anderes ist die Fragestellung: Existiert ein Element in der Struktur? Da stinkt eine durchnummerierte Liste einfach nur ab. Zum Thema dynamisch Elemente hinzufügen brauchen wir erst gar kein Wort verlieren.

    da liegen wir doch garnicht weit auseinander :D
    Man sollte sich generell mal Gedanken über seine Datenstruktur bzw. Auswertung machen. Wenn ich sehe, was mit INI-Dateien und den dazugehörigen Bearbeitungsfunktionen verbrochen wird (nicht nur in diesem Forum), wird mir anders!
    Sicher gibt es nicht DEN richtigen Weg, aber man sollte die vorhandenen Möglichkeiten nutzen.
    Leider ist es wohl nicht mehr "in" mit einfachen Funktionen zu arbeiten. Ich bin mir ziemlich sicher dass das Potenzial bzw. die Mächtigkeit der "Low-Level"-Stringfunktionen kaum bekannt ist, bzw. diese Funktionen kaum benutzt werden.

    Daher finde ich es auch gut, wenn du diese Variante in deine Performance-Analyse mit einbeziehst :thumbup:

  • Performance-Analyse der neuen Datenstruktur "Map"

    • Andy
    • 8. August 2014 um 21:55

    Hi,

    Zitat

    Dass die Variante einen String mit Trennzeichen zusammensetzen und am Ende per StringSplit in ein Array zu konvertieren die schnellste Variante werden wird habe ich erwartet.


    Wenn es einem wirklich um Geschwindigkeit geht, spart man sich das Stringsplit und greift direkt mit den unschlagbar schnellen Stringfunktionen auf einzelne Elemente zu, Stichwort "durchnummerierte Liste" / "klassisches Array".
    Damit sind hunderte MB große Dateien in kürzester Zeit durchsucht. Ich bezweifle erstens, dass in einer anderen Form (egal ob Dictionary/Array/Map) sehr große Datenmengen überhaupt bewältigt werden können, zweitens werden die Antwortzeiten entsprechend der Verwaltung ansteigen. Nicht umsonst haben Datenbanken gigantische Analysefunktionen, um möglichst viel "indizieren" zu können^^
    Der direkte Index (lookup table) ist im Hinblick auf die Zugriffszeit durch nichts zu ersetzen.

    Das schöne an den Arrays/Maps/Dictionarys ist eben, mit einfachen Funktionen zu einem Ergebnis zu kommen. Auch wenn das alles in allem etwas "länger" dauert.....aber einen Tod muss man ja für die gewonnene Bequemlichkeit sterben ;)
    Die Kunst ist es nun, nur ein bisschen zu sterben und von den langsamen Funktionen die schnellste bequeme zu verwenden.

  • FTP - Wechsel in ein übergeordnetes Verzeichnis

    • Andy
    • 7. August 2014 um 13:34

    so gehts...


    Spoiler anzeigen
    [autoit]

    #include <FTPEx.au3>
    #include <array.au3>
    #include <file.au3>
    Global $traceArray, $aFile, $ftpFileHandle, $string, $h_Handle

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

    $server = 'ftp.microsoft.com'
    $username = ''
    $pass = ''

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

    $Open = _FTP_Open('MyFTP Control')
    $Conn = _FTP_Connect($Open, $server, $username, $pass,0) ;flag...
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $Conn = ' & $Conn & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console

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

    If $conn=0 Then Exit(msgbox(0,0,"bitte nochmal starten!"))

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

    $aFile = _Ftp_ListToArray($Conn) ;damit habe ich überprüft, wo ich mich gerade befinde
    _ArrayDisplay($aFile)

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

    $a=_FTP_DirSetCurrent($Conn, "/PSS/Tools/")
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $a= = ' & $a & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    $aFile = _Ftp_ListToArray($Conn) ;damit habe ich überprüft, wo ich mich gerade befinde
    _ArrayDisplay($aFile)

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

    $b=_FTP_DirSetCurrent($Conn, "/") ;root
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $b = ' & $b & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    $aFile = _Ftp_ListToArray($Conn) ;damit habe ich überprüft, wo ich mich gerade befinde
    _ArrayDisplay($aFile)

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

    $c=_FTP_DirSetCurrent($Conn, "/Services/enterprise/")
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $c = ' & $c & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    $aFile = _Ftp_ListToArray($Conn) ;damit habe ich überprüft, wo ich mich gerade befinde
    _ArrayDisplay($aFile)

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

    exit

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

    _FTP_DirSetCurrent($Conn, "/var/app/Anwendung/")
    MsgBox(0, "", _FTP_DirGetCurrent($Conn)) ;Ergebnis ist und bleibt "/", egal ob ich vorher ein _FTP_DirSetCurrent mache
    $aFile = _Ftp_ListToArray($Conn) ;damit habe ich überprüft, wo ich mich gerade befinde
    _ArrayDisplay($aFile)
    $aFile = _FTP_FileGet($Conn, "//var/app/Anwendung/trace.log", @ScriptDir & "\trace_new.log") ; verzweifelter Versuch trotzdem was zu holen - wurde auch mit nur einem "/" am Anfang versucht
    If @error Then
    MsgBox(0, "", "Es wurde nichts geladen")
    _exit()
    EndIf

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

    $Ftpc = _FTP_Close($Open)

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

    Func _Exit()
    Exit
    EndFunc

    [/autoit]

    der MS server antwortet manchmal nicht, daher Script ggf. öfter starten!

  • A*-Algorithmus - Pathfinding - AI

    • Andy
    • 7. August 2014 um 07:04

    Was man nicht sieht ist ....Grafik Grafik Grafik Grafik !!!! 8)

    Mir schwebt immer noch eine "Höhenkarte" in Form einer per Perlin Noise erstellten Grafik vor, in der man "Berge" und "Täler" hat, und durch die man den leichtesten bzw. schnellsten Weg findet....somit ist 2D/3D unerheblich, da bereits implementiert!

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™