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

Beiträge von Moombas

  • Alter neuer PC gesucht

    • Moombas
    • 2. Januar 2019 um 08:47

    Mal ganz davon abgesehen: Viele (Online-)Shops bieten auch an die zusammengestellte HW zusammen zu bauen (natürlich für €) oder bei den über die Konfiguratoren zusammen gestellten diese auf Stabilität zu prüfen etc.. In wie weit sich das lohnt oder Vertrauenswert ist, fehlt mir selber jede Grundlage da ich immer selber zusammenbaue. Aber für einen "Normalo" evtl. eine Alternative.

    Für mich gilt: Nie wieder einen fertig PC bei dem man nicht mal den RAM nachrüsten kann oder eine Festplatte (von den anderen bereits genannten Punkten mal abgesehen) weil einfach keine freien Steckplätze existieren.

    Zudem ist mir es ein graus, wenn ich die Kabelführung bei diesen Dingern sehe (auch bei denen, die man zusammenbauen lässt im (Online-) Shop). Da kann ich dann gleich von Anfang an selber Hand anlegen.

    Meiner Meinung nach spart man beim selber (zusammen-)bauen nicht, aber man weiß was man hat und (normalerweise) das die Komponenten miteinander Harmonieren und ob / wie viel man aufrüsten kann.

    Zitat von Andy

    ...

    Es gibt im "normalo"-Segment keinen Grund mehr, selbst zu bauen. Ich kann mir ein mit meinen ausgesuchten Komponenten funktionierendes System mit Garantie und allem Schnickschnack zusammenbauen und am nächsten Tag liefern lassen, und das für einen Mehrpreis, der 1-2 Stunden Zeitungsaustragen entspricht.

    ...

    Andy: Auch beim selber zusammenbauen hast du Garantie auf jede einzelne Komponente! Das kann durchaus auch ein großer Vorteil sein, da man die Garantie direkt beim Hersteller abwickelt und ggf. Sondergarantien hast (siehe z.B. bei Samsung SSD's) wo du mehr als 2 Jahre bekommst. Die würdest du beim Fertig-PC NICHT bekommen.

  • Alter neuer PC gesucht

    • Moombas
    • 31. Dezember 2018 um 08:12

    Andy: MEines wissens muss ab (spätestens) Win7 bei Mainboard wechsel (anderes Modell) auch Win7 neu installiert werden. Mit XP ging das noch aber wir müssen unsere Festplatten seit Win7 Hardwaregenau installieren. Dann würde das mit dem Win7-Image nicht fuktionieren, da er ein anderes MB erwartet.

  • Logging und Debugging verbinden

    • Moombas
    • 28. Dezember 2018 um 15:00

    Dafür gibt es zig Ansatzmöglichkeiten. Ich hätte beim Aufruf des Logging die Parameter als einen String übergeben.

    Deine Elseif Variante funktioniert aber nur wenn du nur EINE Funktion hast die EINEN Parameter hat, das gleiche gilt für 2,3,4,5,N-Parameter.

    Hier mal mein Beispiel wie man das individuell umsetzen könnte (ungetestet!):

    Code
    //Aufruf:
    _Call_and_Log($FunctionName, $FunctionStep, $Parameter) ; $Parameter = "ParameterName1=" & ParameterWert1 & " ParameterName2=" & ParameterWert2 usw.
    
    //Funktion
    Func _Call_and_Log($FunctionName, $FunctionStep, $Parameter)
        FileWrite($ghLog, $FunctionName &  $FunctionStep & ' start ' & @CRLF)
        FileWrite($ghLog, $FunctionName & ' - ' & $FunctionStep & ' - ' & $Parameter & @CRLF)
        Local $sPara, $check
        Select
            Case $FunctionStep = "ABC"
                 $Parameter1   = stringsplit($Parameter, '=')[1]
                 $Parameter2   = stringsplit($Parameter, '=')[3] ;usw.
                 $sPara        = $Parameter1 & ', ' & Parameter2
            Case $FunctionStep = "BCD"
                 $Parameter1   = stringsplit($Parameter, '=')[1]
                 $sPara        = $Parameter1 
            Case $FunctionStep = "CDE"
                 $Parameter1   = stringsplit($Parameter, '=')[1]
                 $Parameter2   = stringsplit($Parameter, '=')[3]
                 $Parameter3   = stringsplit($Parameter, '=')[5] ;usw.
                 $sPara        = $Parameter1 & ',' & Parameter2 & ',' & Parameter3
            Case Else
                 FileWrite($ghLog, $FunctionName & ' wurde nicht gefunden - ERROR' & @CRLF)   
        EndSelect
        $check = $FunctionStep($sPara)
        if $check = 1 then ;Nur wenn returncode 1 = Erfolg ist!!
            FileWrite($ghLog, $FunctionName & ' - ' & $FunctionStep & ' - OK' & @CRLF)
        else
            ;Wenn du feste Returncodes verwendest (auch für Fehler) kannst du hier diese mit einer case..select anweisung auch direkt aufschlüsseln und anstatt dem Rückgabewert (hier: $check) ausgeben
            FileWrite($ghLog, $FunctionName & ' - ' & $FunctionStep & ' - ERROR: - ' & $check & @CRLF)
        endif
        FileWrite($ghLog, $FunctionName & $FunctionStep & ' ende' & @CRLF)
    EndFunc
    Alles anzeigen
  • MouseClick() ist nicht gleich Mausklick?

    • Moombas
    • 28. Dezember 2018 um 14:18

    Wie ich das sehe sagt die Funktion:

    Zitat

    GUIGetCursorInfo

    Gets the mouse cursor position relative to GUI window.

    GUIGetCursorInfo ( [winhandle] )

    Parameters

    winhandle [optional] The handle of the window to use. If omitted the "current" window will be used.

    Return Value

    Success: a five-element array that containing the mouse cursor information:
    $aArray[0] = X coord (horizontal)
    $aArray[1] = Y coord (vertical)
    $aArray[2] = Primary down (1 if pressed, 0 if not pressed)
    $aArray[3] = Secondary down (1 if pressed, 0 if not pressed)
      $aArray[4] = ID of the control that the mouse cursor is hovering over (or 0 if none)
    Failure: sets the @error flag to non-zero.

    Nicht aus, das du die Control ID des geklickten Controls bekommst, sondern dem über dem der Cursor aktuell ist. Daher müsste er dir die ID vom Button (der den "autoklick" auslöst) bekommen, was ja auch so ist, wenn ich dich richtig verstanden habe.

    Der Unterschied ist einfach ein virtueller Mausklick (MouseClick(); Cursor bleibt wo er ist) vs. tatsächlicher Mausklick (Benutzereingabe; Cursor wird zum Ziel bewegt). Daher kannst du dies nicht mit GUIGetCursorInfo() auslesen.

    Wenn du den Cursor mittels MouseMove() an die Position bewegst und dann GUIGetCursorInfo() machst, müsste er dir dir die richtige ID ausspucken. (Tipp: Erst MouseMove(), dann MouseClick(), dann GUIGetCursorInfo() ) Habe ich selber aber auch noch nicht getestet, daher keine Gewähr!

    -----------------------------------

    Mal anders gefragt: Wozu brauchst du das? du kannst doch beim drücken von Button 2 die Funktion _button1() einfach aufrufen. Warum der komplizierte Umweg über einen Mausklick?

  • Logging und Debugging verbinden

    • Moombas
    • 28. Dezember 2018 um 13:24

    Wichtig dabei: Bedenke, je nachdem wie oft Funktionen aufgerufen werden etc. das deine Log-Datei immens groß werden wird!

    Ein wenig eingrenzen könntest du es nur, wenn du nur an den Stellen loggst, an denen Fehler auftreten (Siehe 3.).

    Dann kannst du das Error-Logging als Funktion schreiben, die du bei einem Fehler aufruft. Zu Übergebene Werte wären dann z.B.:

    1. Funktionsname + aktueller Arbeitsschritt
    2. dafür notwendige Parameter mit Namen
    3. das "falsche" Ergebnis
    4. @error (falls vorhanden)

    Vorteil: Kleinere Log-Datei mit weniger (scheinbarem) Datenmüll

    Nachteil: Bei einem Programmabsturz weist du nicht wo er war, da das Logging hier meist nicht mehr greifen kann.

  • Logging und Debugging verbinden

    • Moombas
    • 28. Dezember 2018 um 12:57

    Also generell kommt es viel darauf an was/wie du Programmierst. Also wie oft werden Funktionen aufgerufen etc.

    Machst du bei deinen Arbeitsschritten (wo es möglich ist) Prüfungen? Wenn ja kannst du diese auch mit loggen, wenn nein warum nicht?

    Generell kannst du eine Logdatei schreiben, in die du alles rein schreibst.

    Du könntest z.B. einen "Debug-Modus" per Ini oder so setzen, wenn der gesetzt ist, wird geloggt, sonst nicht oder du loggst generell um bei Programmabstürzen oder -fehlern immer eine Log-Datei zur Hand zu haben.

    Meine Empfehlungen:

    1. Dauerlogging betreiben
    2. Wenn du eine Funktion aufrufst, schreibt die Funktion als erstes z.B. "Function AB start" und als letztes "Function AB ende". Damit grenzt du einen Ausfall meistens schon mal auf eine Funktion ein.
    3. Alles was man prüfen kann, ob es erfolgreich war oder einen Fehler gab -Prüfen! Dieses dann loggen entweder egal ob Fehler oder nicht oder nur die Fehler mit dem Fehlerwerten (alle Werte die hierzu gehören!).
    4. Und ansonsten liegt es an dir was du mit loggst oder nicht, aber diese Stellen musst du schon selber einprogrammieren, ich wüsste aktuell keine Logik oder .au3 die sowas selber erkennt/erkennen könnte und halte das auch für unmöglich.

    Zuletzt stellt sich die Frage, wie du die Log-Datei handeln willst (beim Dauerlogging):

    - Nach jedem Programmstart wieder neu?

    - Ein Archiv über x Log-s?

    - Alles was älter ist als x-Tage löschen?

    - ...

  • Internetseite auslesen und dann?

    • Moombas
    • 28. Dezember 2018 um 11:50

    Ich bin jetzt natürlich nur von deinem letzten Post ausgegangen und da füllst du $sPaket ja in der genannten Abfrage, welche ich hier in eine While-schleife gepackt habe, damit diese so lange immer wieder befüllt wird.

    Aber ich merke gerade, so würdest du immer wieder auch den Loginversuch neu starten. Dürfte also nicht funktionieren. Theoretisch müsste es also so heißen:

    Code
    $sPaket = _WinHttpSimpleSSLRequest($hConnect, 'POST', '/LaenderEANV_Web/registrierung', 'https://leanv.zks-abfall.de/LaenderEANV_Web/registrierung?action=displaylogin', $sPOST)
    $timeout = 0
    while $sPaket = "0"
        sleep(500)
        $timeout = $timeout + 1
        if $timeout = 40 then ;Nach 20 Sekunden Abbrechen
            ;Fehlermeldung ausgeben
            Exitloop
        Endif
    WEnd

    ABER: Ich weiß nun nicht, ob sich an diesem Punkt $sPaket noch ändert.

  • Internetseite auslesen und dann?

    • Moombas
    • 28. Dezember 2018 um 11:35

    Kannst du (rein von der Logik her) nicht prüfen ob du "keine 0" zurückbekommst?

    Code
    while $sPaket = "0" ;Entweder auf "0" = Zeichen oder 0 = Zahl prüfen, ich kenne hier die Art der Rückgabe nicht, gehe aber mal von einem string aus
        $sPaket = _WinHttpSimpleSSLRequest($hConnect, 'POST', '/LaenderEANV_Web/registrierung', 'https://leanv.zks-abfall.de/LaenderEANV_Web/registrierung?action=displaylogin', $sPOST)
    Wend
  • Alter neuer PC gesucht

    • Moombas
    • 27. Dezember 2018 um 08:36

    Nochmal zum Thema OC-GraKa:

    Die OC-Karten (vom Hersteller!) der letzten Generation sind meistens fast gleich gut wie die nicht OC-Varianten der aktuellsten Generation und kosten meistens ca. die Hälfte. Wer also aufs Budget achtet (oder achten muss), für denjenigen sind diese GraKa durchaus zu empfehlen. Den Rest hat Alpines bereits erklärt :)

    Das gilt natürlich auch nur so lange man nicht die evtl. schnelleren Zugriffszeiten oder den (evtl. nur in der neuesten Generation) verfügbaren Grafikspeicher benötigt.

    Andy : Bei dem PC müsste er den Arbeitsspeicher aufbohren (mind.), da er 16GB bzw. 32GB haben wollte. Bei den Discounter-PC's hast du jedoch häufig das Problem mit dem Nachrüsten bei RAM (alle Steckplätze belegt bzw. nur 1-2 zur Verfügung). Da du dieses System hast, wäre es gut zu wissen ob hier noch Steckplätze frei sind und wie viel RAM das Board verarbeiten kann.

  • Alter neuer PC gesucht

    • Moombas
    • 24. Dezember 2018 um 10:21
    Zitat von Tuxedo

    und schon gar kein von Werk aus overclockte Grafikkarte.

    Was ist daran so schlimm? So lange sie wirklich von Werk aus übertaktet ist, ist es kein Problem aber sobald da jemand selber Hand angelegt hat, würde ich auch die Finger davon lassen.

  • Mit _StringBetween nur jedes 1. - 4. - 7. usw. Vorkommen rausfiltern

    • Moombas
    • 17. Dezember 2018 um 09:50

    Habe ich auch wieder was gelernt ;) Und man sieht wie so häufig: Das Problem lag an der Quelle und nicht an der Programmierung an sich^^

  • Mit _StringBetween nur jedes 1. - 4. - 7. usw. Vorkommen rausfiltern

    • Moombas
    • 14. Dezember 2018 um 10:51

    Ich kenne mich mit Notepad++ nun nicht aus aber wenn der "orangene Punkt" = ein Punkt ist, der in der normalen Textdatei ein Leerzeichen ist und in Hexadezimal ein Punkt (=verstecktes Zeichen), dann musst du bei deinem Skript nicht

    Code
    StringInStr($line3[0], 'Bevollmächtigter des Erzeugers', '', 1)

    verwenden, sondern

    Code
    StringInStr($line3[0], 'Bevollmächtigter.des.Erzeugers', '', 1)
  • Mit _StringBetween nur jedes 1. - 4. - 7. usw. Vorkommen rausfiltern

    • Moombas
    • 13. Dezember 2018 um 14:13

    Ich habe ja erst an meinem Code gezweifelt aber ein Test ergab, das dieser passt.

    Code
    ;-Code zum testen
    $logname = "log.txt"
    $logfile = FileOpen($logname, 1)
    
    Dim $string
    
    $string = 'CBEV001488 / Bevollmächtigter des Erzeugers'
    
    logging('')
    logging($string)
    logging('')
    logging(StringSplit($string, '/')[1])
    logging('')
    logging(StringSplit($string, '/')[2])
    logging('')
    
    If StringSplit($string, '/')[2] = ' Bevollmächtigter des Erzeugers' Then
        logging('OK')
    EndIf
    
    Func logging($logtext)
        $logtext = $logtext & @CRLF
        FileWrite($logfile, $logtext)
    EndFunc   ;==>logging
    Alles anzeigen

    Ergebnis (mit Kommentaren):

    Zitat

    CBEV001488 / Bevollmächtigter des Erzeugers ;"Ur"-String

    CBEV001488 ;1. Split

    Bevollmächtigter des Erzeugers ;2.Split (mit vorangehendem Leerzeichen, dies nimmt er hier immer raus!

    OK ;Prüfung

    Daher vermute ich, das mit deinem String etwas nicht passt.

    Ich weiß nicht ob dir das hier hilft aber ich hatte mal den Fall, das ich "." anstatt " " in dem String hatte, was nur im Hexmode des Texteditors (Ultraedit) zu sehen war. Da ich nun nicht weiß wo deine Daten ursprünglich herkommen, wäre dies einen Test wert. Also mal deine Quelldatei in Hexadezimal zu öffnen und zu schauen ob die Leerzeichen auch welche sind.

  • Mit _StringBetween nur jedes 1. - 4. - 7. usw. Vorkommen rausfiltern

    • Moombas
    • 12. Dezember 2018 um 16:04

    Wurde ja darauf hingewiesen das ich da falsch war , sorry :|

    Wichtig ist aber schon mal du weist, das deine Strings definitiv richtig ankommen. Nun gilt es herauszufinden warum er mit dem Teilstring mit den Leerzeichen ein Problem hat.

  • Mit _StringBetween nur jedes 1. - 4. - 7. usw. Vorkommen rausfiltern

    • Moombas
    • 12. Dezember 2018 um 15:45

    Möchte jetzt nicht ewig hin und her zitieren.

    @Musashi : Das kann sein, das es mal bei mir durchaus bei Parameterübergabe der Fall war oder wenn ich in einem String " mit übergeben möchte, genau kann ich mich daran aber nicht mehr erinnern, nur das ich seit dem halt wie gesagt lieber ' als " verwende, da ich damit in der Regel auf der sicheren Seite bin, dies an wichtigen Stellen nicht zu "vergessen".

    Aber nun lasst uns wieder BTT, denn mit unserer Diskussion helfen wir dem TE mit seinem Problem nicht weiter außer, dass mein Vorschlag die " mit ' zu ersetzen Sinnfrei ist :)

    Ihr habt ja recht^^

    Vorschlag:

    Um zu prüfen ob hier evtl. Stringreplace ein Problem hat, könntest du mit Stringsplit testen ob die Prüfung auf den Teilstring korrekt läuft

    Code
    if Stringsplit($line3[0], '/')[2] = " Bevollmächtigter des Erzeugers" then ;"OK" in errorfile schreiben
  • Mit _StringBetween nur jedes 1. - 4. - 7. usw. Vorkommen rausfiltern

    • Moombas
    • 12. Dezember 2018 um 15:35
    Zitat von alpines

    Das macht in AutoIt absolut keinen Unterschied da beide Zeichen gültige Stringliterale darstellen.

    Grundsätzlich ja, im Zusammenhang mit Umlauten hat mir dies dennoch schon mal geholfen, weshalb ich selber mittlerweile fast ausschließlich ' nutze.

    Habe meinen Beitrag aber bereits kurz vorher angepasst, da ich denke, das das Problem eher in der casesensitive liegen könnte.

  • Mit _StringBetween nur jedes 1. - 4. - 7. usw. Vorkommen rausfiltern

    • Moombas
    • 12. Dezember 2018 um 15:10

    Wurde überredet, war Sinnfrei ;)

  • Mit _StringBetween nur jedes 1. - 4. - 7. usw. Vorkommen rausfiltern

    • Moombas
    • 12. Dezember 2018 um 14:47

    Was gibt es dabei nicht zu verstehen? Wenn der Wert nicht ersetzt wird, ist eine Prüfung ob der zu ersetzende Wert überhaupt vorhanden ist durchaus Sinnvoll. Bestes Beispiel hierbei ist das Umlaute nicht als Umlaut verarbeitet wurden etc., das kann man dann mit einer solchen einfachen Prüfung kontrollieren.

    Wenn der Wert vorhanden ist aber trotzdem nicht ersetzt wird (Achtung: auch auf doppelte Leerzeichen etc. prüfen) liegt der Fehler in der Umsetzung der Ersetzen-Routine.

    Wenn der Wert nicht vorhanden ist, liegt der Fehler in der Quelle oder deren Einlese/Entstehungs-Routine.

    Ich nutze hier und in Delphi, wenn die Werte passen, liegt meist ein Logik- oder Programmierfehler vor. Nur ohne es zu prüfen, wer kann sich 100%ig sicher sein, das die Werte passen?

  • Mit _StringBetween nur jedes 1. - 4. - 7. usw. Vorkommen rausfiltern

    • Moombas
    • 12. Dezember 2018 um 14:04

    Du kannst eine MsgBox verwenden (temporär zum Fehler finden) oder eine Logdatei (z.B. error.txt) schreiben. Es gibt garantiert noch mehr Möglichkeiten aber MsgBox würde ich nur bei wenigen Datensätzen empfehlen die er durchläuft, sonst wirst du damit zugeballert, dann sollte man eine Logdatei nehmen. Aber bei wenigen durchläufen ist MsgBox die einfachste Prüfung.

    Ich nutze beides nach Bedarf wenn ich im laufenden Programm Fehler suchen muss um die Fehlerquelle einzugrenzen. Bei Fehlern eine error.txt (oderr auch error.log) zu schreiben kann ggf. auch in der finalen Fassung sinnvoll sein.

  • Mit _StringBetween nur jedes 1. - 4. - 7. usw. Vorkommen rausfiltern

    • Moombas
    • 12. Dezember 2018 um 13:34

    Hast du mal geprüft, was er bei dem als x64 kompilierten Skript in $line3 stehen hat bevor er die Prüfung macht?

    OT @TE: Wäre hier nicht auch eine select case Abfrage einfacher als die ganzen if then Abfragen? Dann könntest du mit "else" einen Wert eintragen, wenn keine der Strings gefunden wurden (=Fehler?).

    Code
    Select
      Case StringInStr($line3[0], "Bevollmächtigter des Erzeugers")
              Local $sString = StringReplace($line3[0], "Bevollmächtigter des Erzeugers", "BEV")
      Case StringInStr($line3[0], "Erzeuger")
              Local $sString = StringReplace($line3[0], "Erzeuger", "ERZ")
    ;- ...
      Case Else
              ;-Fehlermeldung 
    EndSelect

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™