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

Beiträge von JochenS

  • Button in Programmschleife richtig abfragen !?!?

    • JochenS
    • 28. September 2020 um 20:28

    Hi Greenhorn,

    danke für deine Antwort. Leider kommt sofort die Fehlermeldung

    (43,17) : warning: $nMsg: possibly used before declaration.

    Switch $nMsg

    und

    (43,17) : error: $nMsg: undeclared global variable.

    Switch $nMsg

    was ja logisch ist, da die Variable $nMsg in Zeile 42 deklariert wird.

    Ich habe so auskommentiert:

    Code
    While 1
    
      ;$nMsg = GUIGetMsg()
    
        Switch $nMsg
    
            Case $Button_Start_Client

    Grüße ;)

  • Button in Programmschleife richtig abfragen !?!?

    • JochenS
    • 7. September 2020 um 19:19

    Hallo zusammen,

    ich versuche mich gerade an einem Terminal-Programm. Es soll mittels "TCPRecv" alphanumerische Daten empfangen. Aus der AutoIT Hilfe habe ich mir etwas zurecht gebastelt was bis auf eine Kleinigkeit gut funktioniert.

    Ich kann die IP-Adresse und den Port frei wählen und dann lauschen. Wenn mein Controller Daten sendet wird dies in einem Textfeld korrekt angegeben. Das starten des Clients funktioniert richtig weil es in der Hauptschleife sitzt. Das stoppen kann aber dort nicht funktionieren da ja der "TCPRecv" im Loop läuft. Nun hab ich mir gedacht das der Loop der "TCPRecv" mittels eines Stop Button angehalten werden soll. Und das funktioniert leider nicht. In Zeile 111 unterbricht eine Variable den Loop. Wenn ich auf "Client Stopp" klicke kommen keine Daten mehr aber das Programm lässt sich über das rote X oben rechts nicht beenden oder durch "Client Start" wieder empfangsbereit machen.

    Vielleicht kann mir jemand auf die Sprünge helfen.

    Hier der Code:

    C
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <AutoItConstants.au3>
    #include <FileConstants.au3>
    #include <MsgBoxConstants.au3>
    
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Netzwerk Test Terminal", 1357, 864, 300, 120)                                ;Programmfenster
    
    $Edit1 = GUICtrlCreateEdit("", 104, 88, 873, 529)                                                ;Ergebnistestfeld
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")                                                    ;Schriftart
    
    $IP_Adress = GUICtrlCreateLabel("IP Adresse", 104, 50, 92, 20)                                    ;Label IP Adresse
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")                                                    ;Schriftart
    $TextBox_IP_Adress = GUICtrlCreateEdit("", 200, 50, 209, 20, $ES_WANTRETURN)                    ;Eingabefeld IP Adresse
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")                                                    ;Schriftart
    
    $Port = GUICtrlCreateLabel("Port", 427, 50, 40, 20)                                                ;Label Port
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")                                                    ;Schriftart
    $TextBox_Port = GUICtrlCreateEdit("", 475, 50, 113, 20, $ES_WANTRETURN)                            ;Eingabefeld Port
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")                                                    ;Schriftart
    
    $Button_Start_Client = GUICtrlCreateButton("Client Start", 616, 40, 121, 33)                    ;Button Start Client
    GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")                                                    ;Schriftart
    
    $Button_Stop_Client = GUICtrlCreateButton("Client Stopp", 752, 38, 121, 33)                        ;Button Stopp Client
    GUICtrlSetOnEvent(-1, "ClientStop")
    GUICtrlSetFont(-1, 12, 800, 0, "MS Sans Serif")                                                    ;Schriftart
    
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    
    ;----------------------------------------------------Globale Variablen --------------------------------------------------------------------------
    
    Global $bClientStop = 0
    
    ;--------------------------------------------------- Programmschleife ---------------------------------------------------------------------------
    While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $Button_Start_Client
                TextboxWrite(GUICtrlRead($TextBox_IP_Adress),$Edit1)
                TextboxWrite(GUICtrlRead($TextBox_Port),$Edit1)
                Example()
    
            Case $GUI_EVENT_CLOSE
                Exit
    
        EndSwitch
    WEnd
    
    ;---------------------------------------------------   Example     ----------------------------------------------------------------------------
    
    Func Example()
    
        Opt("GUIOnEventMode", 1)
    
        TCPStartup() ; Start the TCP service.
    
        ; Register OnAutoItExit to be called when the script is closed.
        OnAutoItExitRegister("OnAutoItExit")
    
        ;Adresseingabe des Servers
        Local $sIPAddress = GUICtrlRead($TextBox_IP_Adress)                            ;Server IP-Adresseingabe von Textfeld
        Local $iPort = GUICtrlRead($TextBox_Port)                                     ;Porteingabe von Textfeld
    
        ; Assign a Local variable the socket and connect to a listening socket with the IP Address and Port specified.
        Local $iSocket = TCPConnect($sIPAddress, $iPort)
        Local $iError = 0
    
        ; If an error occurred display the error code and return False.
        If @error Then
            ; The server is probably offline/port is not opened on the server.
            $iError = @error
            MsgBox(BitOR($MB_SYSTEMMODAL, $MB_ICONHAND), "", "Client:" & @CRLF & "Could not connect, Error code: " & $iError)
            Return False
        EndIf
    
        ; Assign Locales Constant variables the number representing 4 KiB; the binary code for the end of the file and the length of the binary code.
        Local Const $i4KiB = 4096
        Local Const $bEOF = Binary(@CRLF & "{EOF}")
        Local Const $iEOFLen = BinaryLen($bEOF)
    
        ; Assign a Local variable the empty binary data which will contain the binary data of the file.
        Local $bData = Binary("")
    
        ; Assign a Local variable to store the length of the data received.
        Local $iDataLen = 0
    
        Do
            $bData = TCPRecv($iSocket, $i4KiB, $TCP_DATA_BINARY)
    
            ; If an error occurred display the error code and return False.
            If @error Then
                $iError = @error
                MsgBox(BitOR($MB_SYSTEMMODAL, $MB_ICONHAND), "", "Client:" & @CRLF & "Connection lost, Error code: " & $iError)
                Return False
            EndIf
    
            $iDataLen = BinaryLen($bData)
    
             ; If nothing is received, retry for the incoming data.
            If $iDataLen = 0 Then ContinueLoop
    
            TextboxWrite(BinaryToString($bData), $Edit1)
    
        Until $bClientStop
        $bClientStop = 0
    
        ; Close the socket.
        TCPCloseSocket($iSocket)
    EndFunc   ;==>Example
    
    Func OnAutoItExit()
        TCPShutdown() ; Close the TCP service.
    EndFunc   ;==>OnAutoItExit
    
    
    ;---------------------------------- Schreibfunktion in Textfeld ---------------------------------------------------------------------
    
    ; Write a line to the memo control
    Func TextboxWrite($sMessage, $idTextfeld)
          GUICtrlSetData($idTextfeld, $sMessage & @CRLF, 1)                    ;Funktion zum Anzeigen der in $sMessage übergebenen Nachricht an in $idTextfeld angegebenes Textfeld
    EndFunc
    
    Func ClientStop()
        $bClientStop = 1
    EndFunc
    Alles anzeigen

    Vielen Dank fürs durchlesen :)

    Grüße Jochen

  • Textfeld mittels "FileSaveDialog" in Textdatei speichern

    • JochenS
    • 18. Juni 2020 um 15:19

    Hallo Oscar,

    danke für deine Hilfe jetzt klappe es wie es soll.

    Grüße Jochen:klatschen:

  • Textfeld mittels "FileSaveDialog" in Textdatei speichern

    • JochenS
    • 17. Juni 2020 um 20:01

    Hier das Script. Da dies mein erstes Programm mit AutoIt ist gibt es sicherlich einige stellen die Merkwürdig sind ;)

    C
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Res_Description=XXX_Abgleichsoftware
    #AutoIt3Wrapper_Res_Fileversion=0.6.0.0
    #AutoIt3Wrapper_Res_LegalCopyright=by Jochen XXX
    #AutoIt3Wrapper_Res_Language=1031
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #cs ----------------------------------------------------------------------------
    
    
    AutoIt Version: 3.3.14.5
    Author:  	Jochen XXX
    Date:		03.2020
    
    
    Script Function:
    Tigger-/Indexabgleich am XXX visualisieren
    V 0.x
    
    
    #ce ----------------------------------------------------------------------------
    
    
    #include <GUIConstantsEx.au3>
    #include <StructureConstants.au3>
    #include <WinAPIDlg.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #include <MsgBoxConstants.au3>
    #include <EditConstants.au3>
    #include <GuiImageList.au3>
    #include <GuiListView.au3>
    
    
    ;--------------------------------------Globale Variablen ---------------------------------------------------------------------
    Global $g_idMemo, $aFile, $idListview, $g_idSettings_ResultFile
    Global $iInpHighRow = 0					;Anzahl der Zeilen mit pos. Flanke an einem Input Musterzeilenzähler
    Global $aData[1][4]						;ArrayData[Zeilen der Datei][Spalten an Daten](Zeilen mit DigInputs)(DigInput-Typ)(Systemincrement)(Abstand Trigger oder Index in mm)
    
    
    ;------------------------------------Start des Programms ---------------------------------------------------------------------
    _Main()									;Aufruf der Hauptfunktion
    
    
    ;-----------------------------------Hauptfunktion ----------------------------------------------------------------------------
    Func _Main()
    ;---------------------------------------- Lokale Variablen ---------------------------------------------------------------
    Local $hGui							;Variable des Hauptfensters
    Local $id_OpenFileDialog			;Variable des Datei-Öffnen-Button
    Local $sError						;Variable Fehler beim Öffnen einer Datei
    Local $idReset						;Variable für Resetbutton
    Local $idSaveResult					;Variable für Ergebnisse speichern
    
    
    ; Create GUI
    $hGui = GUICreate("Abgleichprogramm für XXX/ Trigger- Indexabgleich by Jochen XXXv V0.x", 1196, 800)	;Erzeugung des Hauptfenster mit Titel und Größe in X- und Y-
    GUISetBkColor(0x00E0FFFF)																					;Hintergrundfarbe des Hauptfensters
    GUICtrlCreateTab(1, 1, 1195, 799)
    GUICtrlCreateTabItem("Hauptfenster")
    $g_idMemo = GUICtrlCreateEdit("", 2, 32, 740, 766, $WS_VSCROLL)												;Linkes Textfeld erzeugen
    GUICtrlSetFont($g_idMemo, 9, 400, 0, "Courier New")															;Schriftparameter für linkes Textfeld
    $id_OpenFileDialog = GUICtrlCreateButton("Öffne Abgleich-Logdatei", 300, 7, 130, 20)						;Datei-Öffnen-Button erzeugen
    $idReset = GUICtrlCreateButton("Reset", 450, 7, 130, 20)													;Reset-Button erzeugen
    $idSaveResult = GUICtrlCreateButton("Ergebnisse Speichern", 600, 7, 130, 20)
    $idListview = GUICtrlCreateListView("", 744, 32, 450, 766)													;Ergebnistabelle im rechten Bereich erzeugen
    
    
    
    
    _GUICtrlListView_AddColumn($idListview, "Input in Zeile", 100)												;Spaltentitel und Breite der 1. Spalte festlegen
    _GUICtrlListView_AddColumn($idListview, "Input Typ", 100)													;Spaltentitel und Breite der 2. Spalte festlegen
    _GUICtrlListView_AddColumn($idListview, "Inkrement", 100)													;Spaltentitel und Breite der 3. Spalte festlegen
    _GUICtrlListView_AddColumn($idListview, "Abweichung in mm", 146)											;Spaltentitel und Breite der 4. Spalte festlegen
    
    
    GUICtrlCreateTabItem("Einstellungen")
    GUICtrlCreateLabel("Speicherort für Ergebnis", 20, 40, 120, 20)
    $g_idSettings_ResultFile = GUICtrlCreateEdit("", 150, 40, 740, 20)											;Textfeld Ergebnisdatei Speicherort
    
    
    
    
    
    
    GUISetState(@SW_SHOW)																						;Konfigurierte GUI erzeugen
    
    
    MsgBox(0,"Kurzanleitung","Um Triggerinformationen zu erhalten muss dem XXX via" & @CRLF	& "Protokollsimulator der folgende Befehl gesendet werden:" & @CRLF & @CRLF &"                                       sEN AppConOut 1" & @CRLF & @CRLF & "Diese Daten dann in einer Logdatei sichern." & @CRLF & "Diese Logdatei nach einigen Testpaketen in diesem Programm öffnen.")
    
    
    ;------------------------------------------------- Programmsteuerung --------------------------------------------------------------------------------------------------------------------
    
    
    While 1																										;Programmschleife Endlos bis "Case $GUI_EVENT_CLOSE kommt
    Switch GUIGetMsg()																						;Wartet auf die GUIMessages ($id_OpenFileDialog,$id_Reset,$GUI_EVENT_CLOSE)
    Case $id_OpenFileDialog																				;Aufgaben wenn Button Datei Öffnen ($id_OpenFileDialog) gedrückt
    $aFile = _WinAPI_GetOpenFileName() ; use defaults												;Starte den Datei Öffnen Prozess von Windows
    If @error Then																					;Wenn Prozess "Datei Öffnen" einen Fehler meldet folgendes ausführen
    $sError = _WinAPI_CommDlgExtendedError()													;Trage Fehlerrückmeldung in Vatiable $sError ein
    MemoWrite("CommDlgExtendedError (" & @error & "): " & $sError)								;Trage die Fehlermeldung in linkem Textfeld ein
    MemoWrite("------------------------------------------------------------------------------------------------------" & @CRLF)
    Else																							;Ansonsten führe folgendes aus
    MemoWrite("Die Datei: " & $aFile[1] & $aFile[2] & " wird geöffnet.")						;Geöffnete Datei im Textfeld links ausgeben
    Logic()																						;Führe Auswertelogik aus Funktion "Logic()"
    _MyArrayDisplay()																			;Führe Anzeigelogik aus Funktion "_MyArrayDisplay()"
    _ResetData()																				;Führe Data Reset aus um keine Vermischung der Auswerteläufe auszulösen
    EndIf																							;Dateiverarbeitung Ende
    Case $idReset																						;Aufgaben wenn Reset gedrückt wird
    _ResetData()																					;Führe Data Reset aus um keine Vermischung der Auswerteläufe auszulösen
    _DisplayReset()																					;Beide Textfelder löschen
    Case $idSaveResult																					;Wenn Button Ergebnisse sichern angeklickt wird folgendes ausführen
    SaveResults()																					;Funktion Ergebnisse Speichern aufrufen
    Case $GUI_EVENT_CLOSE																				;Aufgaben wenn Programm über das X-Symbol geschlossen wird
    ExitLoop																						;Programmloop verlassen
    EndSwitch																								;Warten auf die GUI-Messages wird beendet
    WEnd																										;Endlosprogrammschleife wird verlassen
    GUIDelete($hGui)																							;GUI wird gelöscht
    EndFunc   																										;Ende der Funktion Main
    
    
    ; Write a line to the memo control
    Func MemoWrite($sMessage)
    GUICtrlSetData($g_idMemo, $sMessage & @CRLF, 1)																;Funktion zum Anzeigen der in $sMessage übergebenen Nachricht
    EndFunc   																										;Ende der Funktion MemoWrite()
    
    
    Func Logic()
    
    
    ;---------------------------Variablen anlegen -------------------------------------------------------------------------
    Local $iMaxLines						;maximale Zeilen in Datei
    Local $iInkrement = 2.5					;Inkrement z.B. 2,5mm/Inc (Systemincrement)
    Local $iEncoderMax = 65535				;maximaler Drehgeber-Inkrement (normalerweise 65535)
    Local $sCompleteFilePath				;kompletter Dateipfad z.B. C:\Test\Datei.txt
    Local $iAverageValue					;Mittelwert der Inputabstände, kann als Vorschlag zur Triggerkorrektur verwendet werden
    Local $iSummand = 0						;Summand für Mittelwert Berechnung
    Local $k								;Zähler Anzahl der berechneten mm-Werte
    Local $sSearchPattern1_1 = "DigInput1"		;Suchmuster 1_1 - Üblicherweise unser Triggereingang Digital Input 1, Indexempfang oder sonstiges was vom Kunden kommt und abgeglichen werden soll
    Local $sSearchPattern1_2 = "HIGH"			;Suchmuster 1_2 - üblicherweise HIGH bei Inputs, weitere eindeutige Merkmale dieser Zeile
    Local $sSearchPattern2_1 = "DigInput3"	;Suchmuster 2_1 - üblicherweise unsere Lichtschranke an Systemkoordinate X0, der vom Kunden gesendete Trigger wenn Indexabgleich bemacht werden soll
    Local $sSearchPattern2_2 = "HIGH"				;Suchmuster 2_2 - üblicherweise HIGH bei Inputs, weitere eindeutige Merkmale dieser Zeile
    Local $sSearchPattern3	 = "IncAtOrigin: "	;Suchmuster 3 - sich nicht verändernder Text direkt vor dem Inkrement
    Local $sSearchPattern4	 = ";"				;Suchmuster 4 - sich nicht verändernder Text direkt nach dem Inkrement
    ;--------------------------------- Datei Öffnen ---------------------------------------
    $sCompleteFilePath = $aFile[1] & "\" & $aFile[2]
    Local $file= FileOpen($sCompleteFilePath,0) ;Datei öffnen
    if $file = -1 Then
    MsgBox(0,"Fehler","Die Datei konnte nicht geoeffnet werden!")
    EndIf
    
    
    ;--------------------------------- Anzahl der Zeilen feststellen und Anzeigen ---------------------------------------
    $iMaxLines = _FileCountLines($file)													;Zeilen der Datei zählen
    MemoWrite(@CRLF & "Die Datei "& $aFile[2] & " hat: " & $iMaxLines & " Zeilen.")		;Nachricht in linkem Textfelsausgeben das die Datei xxxx yyyy Zeilen hat
    
    
    ;-------- In Zeilen nach DigitalInput und HIGH suchen lassen und Ergebnisse in $aData eintragen -------------
    for $iLine = 1 To $iMaxLines Step 1															;Auswahl der aktuellen Zeile
    $sLine = FileReadLine($file,$iLine)														;Lies die aktuelle Zeile in $sLine ein
    if StringRegExp($sLine,$sSearchPattern1_1) = 1 And StringRegExp($sLine,$sSearchPattern1_2) = 1 Then			;Suche nach den Strings "DigInput" und "HIGH" in $sLine, hier sollten demnächst Variablen für die Strings eingetragen werden um die Suche variabel zu gestelten
    $aData[$iInpHighRow][0] = $iLine													;Eintrag der akt. Zeile in Spalte "Zeilen mit DigInputs"
    $aData[$iInpHighRow][1] = $sSearchPattern1_1										;Eintrag des akt. Input-Typs in Spalte $sSearchPattern1_1
    $aData[$iInpHighRow][2] = _FindIncrement($sLine,$sSearchPattern3,$sSearchPattern4)
    ;$aData[$iInpHighRow][2] = StringMid($sLine,187,5)									;Eintrag des akt. Inkermentstands in die Spalte "Systemincrement"
    $iInpHighRow += 1																	;Erhöhe den Zähler pos. Flanke an DigInputx um eins
    ReDim $aData[UBound($aData) + 1][4]													;vergrößer das Array $aData um eine Array-Zeile um die Daten der nächsten Datei-Zeile aufnehmen zu können
    ElseIf StringRegExp($sLine,$sSearchPattern2_1) = 1 And StringRegExp($sLine,$sSearchPattern2_2) = 1 Then
    $aData[$iInpHighRow][0] = $iLine													;Eintrag der akt. Zeile in Spalte "Zeilen mit DigInputs"
    $aData[$iInpHighRow][1] = $sSearchPattern2_1										;Eintrag des akt. Input-Typs in Spalte $sSearchPattern2_1
    $aData[$iInpHighRow][2] = _FindIncrement($sLine,$sSearchPattern3,$sSearchPattern4)
    ;$aData[$iInpHighRow][2] = StringMid($sLine,187,5)									;Eintrag des akt. Inkermentstands in die Spalte "Systemincrement"
    $iInpHighRow += 1																	;Erhöhe den Zähler pos. Flanke an DigInputx um eins
    ReDim $aData[UBound($aData) + 1][4]													;vergrößer das Array $aData um eine Array-Zeile um die Daten der nächsten Datei-Zeile aufnehmen zu können
    EndIf																					;Ende Bearbeitung aktuelle Zeile
    Next
    
    
    ;------------ Berechnung des Trigger- Indexversatzes ---------------------------------------------------------------------------------
    for $i = 1 To $iInpHighRow Step 2
    if $aData[$i][1] = $sSearchPattern2_1 Then													;ermitteln ob $sSearchPattern2_1 in Zeile 1,3,5,.... Hier sollte man demnächst die Suchmuster anpassen............
    if ($aData[$i-1][2] - $aData[$i][2]) > 0 Then											;wenn $sSearchPattern1_1 größer ist als $sSearchPattern2_1 wird ein Drehgeber-Überlauf angenommen
    $aData[$i][3] = $iInkrement * ($aData[$i][2] - ($aData[$i-1][2] - $iEncoderMax))	;Überlauf berücksichtigen
    Else
    $aData[$i][3] = $iInkrement * ($aData[$i][2] - $aData[$i-1][2])						;normales berechnen Input3 - Input1
    EndIf
    ElseIf $aData[$i][1] = $sSearchPattern1_1 Then												;Auswahl für $sSearchPattern1_1 in Zeile 1,3,5,.... Hier sollte man demnächst die Suchmuster anpassen............
    if ($aData[$i-1][2] - $aData[$i][2]) > 0 Then											;wenn $sSearchPattern2_1 größer ist als $sSearchPattern1_1 wird ein Drehgeber-Überlauf angenommen
    $aData[$i][3] = $iInkrement * ($aData[$i][2] - ($aData[$i-1][2] - $iEncoderMax))	;Überlauf berücksichtigen
    Else
    $aData[$i][3] = $iInkrement * ($aData[$i-1][2] - $aData[$i][2])						;normales berechnen Input1 - Input3
    EndIf
    EndIf
    Next
    
    
    ;------------------------------ Berechnung des Mittelwertes = Vorschlag für die Tiggerkorrektur ------------------------------------------------
    for $j = 1 To $iInpHighRow Step 2				;Starte mit der zweiten Arrayzeile (0 ist die erste!!) und bearbeite immer nur die übernächste (1,3,5,7,9,11.....)
    $iSummand = $iSummand + $aData[$j][3]		;Addiere alle berechneten mm-Werte zusammen
    $k = $k + 1									;Zähle die berechneten mm-Werte
    $iAverageValue = $iSummand / $k				;Dividiere die Summanden auf die Anzahl der Summanden um den Mittelwert zu erhalten
    Next
    
    
    ;---------------------------- Anzeige der Ergebnisse im Hauptfenster -----------------------------------------------------------------------
    MemoWrite("Es wurden " & $iInpHighRow & " Zeilen in der Datei gefunden die den Inhalt >" & $sSearchPattern1_1 & "< und >" & $sSearchPattern1_2 & "< haben.")				;Anzeige im linken Textfeld wieviele Zeilen mit den Suchmustern gefunden wurden
    MemoWrite("Die Summe der Werte ist: " & $iSummand & " und die Anzahl der Werte ist: " & $k  & @CRLF & "Der durchschnittliche Versatz ist: " & $iAverageValue & "mm.")		;Anzeige im linken Textfeld wie groß die Summe aller berechneten Werte ist, wie viele Werte es gibt und die Ausgabe des Durchschnittswertes
    MemoWrite("------------------------------------------------------------------------------------------------------" & @CRLF)													;Anzeige im linken Textfeld Aufgabentrennung mit ---- und leerer Zeile
    
    
    FileClose($file)												;Nach abschluss der Aufgabe -> Datei Schließen
    EndFunc 															;Ende der Funktion logic()
    
    
    ;-------------------------------------------------------- rechtes Textfeld wird hier erstellt -----------------------------------------------------------------------------------------------------
    Func _MyArrayDisplay()													;Funktion Anzeige der Daten
    Local $iI															;Laufvariable
    
    
    _GUICtrlListView_SetItemCount($idListview, $iInpHighRow + 1)		;Zeilenanzahl des rechten Textfeldes auf die Anzahl der Zeilen im Musterzeilenzähler ($iInpHighRow) plus eins einstellen
    
    
    ; Die vier Spalten zeilenweise befüllen
    Local $aItems[$iInpHighRow +1][4]					;Lokales 2-D-Array anlegen Zeilenanzahl = Zeilen im Musterzeilenzähler ($iInpHighRow) plus eins einstellen
    For $iI = 0 To UBound($aItems) - 1					;For-Schleife von 0- (Zeilen im Musterzeilenzähler ($iInpHighRow) minus eins) durchlaufen
    $aItems[$iI][0] = $aData[$iI][0]				;Eintrag in Spalte 1 ins lokale Array vom Globalen Array ($aData)
    $aItems[$iI][1] = $aData[$iI][1]				;Eintrag in Spalte 2 ins lokale Array vom Globalen Array ($aData)
    $aItems[$iI][2] = $aData[$iI][2]				;Eintrag in Spalte 3 ins lokale Array vom Globalen Array ($aData)
    $aItems[$iI][3] = $aData[$iI][3]				;Eintrag in Spalte 4 ins lokale Array vom Globalen Array ($aData)
    Next
    _GUICtrlListView_AddArray($idListview, $aItems)		;Eingetragene Daten im rechten Textfeld anzeigen
    EndFunc   												;Ende Funktion _MyArrayDisplay
    
    
    ;--------------------------------------------------------- Datenresetfunktion des Programms -------------------------------------------------------------------------------------------------------------
    Func _ResetData()										;Funktion ResetData -> notwendig wenn man mehrere Logfileanalysen starten will ohne das Programm neu zu starten
    ReDim $aData[1][4]									;Zum Löschen der Daten wird das Array $aDaten auf eine Zeile gekürzt. Hierdurch werden die eventuell existierenden Daten verworfen
    $aData[0][0] = ""									;Da die Zeile 0 noch Daten enthalten kann werden die Spalten der Zeile mit 0 gefüllt
    $aData[0][1] = ""									;Da die Zeile 0 noch Daten enthalten kann werden die Spalten der Zeile mit 0 gefüllt
    $aData[0][2] = ""									;Da die Zeile 0 noch Daten enthalten kann werden die Spalten der Zeile mit 0 gefüllt
    $aData[0][3] = ""									;Da die Zeile 0 noch Daten enthalten kann werden die Spalten der Zeile mit 0 gefüllt
    $iInpHighRow = 0									;Hier wird der Musterzeilenzähler ($iInpHighRow) auf 0 gesetzt
    EndFunc													;Ende der Funktion _ResetData()
    
    
    ;-------------------------------------------------------- Displayresetfunktion des Programms ----------------------------------------------------------------------------------------------------------
    Func _DisplayReset()														;Funktion _DisplayReset um die beiden Textfelder zu leeren
    GUICtrlDelete($g_idMemo)												;linkes Textfeld wird gelöscht
    $g_idMemo = GUICtrlCreateEdit("", 2, 32, 740, 766, $WS_VSCROLL)			;linkes Textfeld wird neu angelegt
    GUICtrlSetFont($g_idMemo, 9, 400, 0, "Courier New")						;Schriftart im linken Textfeld wieder einstellen
    GUICtrlDelete($idListview)												;rechtes Textfeld wird gelöscht
    $idListview = GUICtrlCreateListView("", 744, 32, 450, 766)				;rechtes Textfeld wird neu angelegt
    _GUICtrlListView_AddColumn($idListview, "Input in Zeile", 100)			;Spalte 1 rechtes Textfeld wird definiert
    _GUICtrlListView_AddColumn($idListview, "Input Typ", 100)				;Spalte 2 rechtes Textfeld wird definiert
    _GUICtrlListView_AddColumn($idListview, "Inkrement", 100)				;Spalte 3 rechtes Textfeld wird definiert
    _GUICtrlListView_AddColumn($idListview, "Abweichung in mm", 146)		;Spalte 4 rechtes Textfeld wird definiert
    
    
    GUISetState(@SW_SHOW)													;GUI wird neu angezeigt
    EndFunc																		;Ende Funktion _DisplayReset()
    
    
    ;------------------------------------------------------- Finden und ausgeben des Inkrments in der Dateizeile -------------------------------------------------------------------------------------------
    Func _FindIncrement($sLine,$sStartPos,$sEndPos)									;Funktion zum finden des Inkrements
    Local $iStartPos
    Local $iEndPos
    Local $iStringLenght
    Local $sIncrement
    
    
    if StringInStr($sLine,":") = 3 Then										;AppConOut-Log erkannt
    $iStartPos = StringInStr($sLine,$sStartPos) + StringLen($sStartPos)	;Position des Endes des Textes vor dem Inkrement
    $iEndPos = StringInStr($sLine,$sEndPos,0,1,$iStartPos)				;Position des Anfang des Testes nach dem Inkrement
    $iStringLenght = $iEndPos - $iStartPos								;Inkrement Länge ermitteln
    $sIncrement = StringMid($sLine,$iStartPos,$iStringLenght)			;Inkrement aus Dateizeile lesen
    Return $sIncrement													;Rückgabe des Inkrement an aufrufende Funktion
    
    
    ElseIf StringInStr($sLine,"-") = 5 Then									;Communication.log erkannt
    $iStartPos = 91														;Inkrement in Communication.log beginnt immer an Zeichen 91
    $iEndPos = StringInStr($sLine,$sEndPos,0,1,$iStartPos)				;Position des Anfang des Testes nach dem Inkrement
    $iStringLenght = $iEndPos - $iStartPos								;Inkrement Länge ermitteln
    $sIncrement = StringMid($sLine,$iStartPos,$iStringLenght)			;Inkrement aus Dateizeile lesen
    Return $sIncrement													;Rückgabe des Inkrement an aufrufende Funktion
    EndIf
    EndFunc
    
    
    ;------------------------------------------------------- Ergebnisse Speichern --------------------------------------------------------------------------------------------------------------------------
    
    
    Func SaveResults()
    ; Erstellt eine Konstante im lokalen Bereich der Nachricht die in FileSaveDialog dargestellt werden soll.
    Local Const $sMessage = "Bitte einen Dateinamen eingeben."
    
    
    ; Zeigt einen Öffnen-Dialog an um eine Datei auszuwählen.
    Local $sFileSaveDialog = FileSaveDialog($sMessage, "::{450D8FBA-AD25-11D0-98A8-0800361B1103}", "Text (*.txt)", $FD_PATHMUSTEXIST)
    If @error Then
    ; Zeigt die Fehlermeldung.
    MsgBox($MB_SYSTEMMODAL, "", "No file was saved.")
    Else
    ; Ermittelt den Dateinamen von dem Dateiordner e.g. Example.txt.
    Local $sFileName = StringTrimLeft($sFileSaveDialog, StringInStr($sFileSaveDialog, "\", $STR_NOCASESENSEBASIC, -1))
    
    
    ; Prüft, ob die Erweiterung .txt an Ende des Dateinamens enthalten ist.
    Local $iExtension = StringInStr($sFileName, ".", $STR_NOCASESENSEBASIC)
    
    
    ; Falls ein Punkt gefunden wurde, so wird geprüft, ob oder ob nicht die Erweiterung gleich .txt ist.
    If $iExtension Then
    ; Falls die Erweiterung nicht gleich .txt ist, dann wird dies an das Ende des Dateipfads angehängt.
    If Not (StringTrimLeft($sFileName, $iExtension - 1) = ".txt") Then $sFileSaveDialog &= ".txt"
    Else
    ; Falls kein Punkt gefunden wurde, dann wird die Erweiterung .txt an das Ende des Dateipfads angehängt.
    $sFileSaveDialog &= ".txt"
    EndIf
    
    
    ; Zeigt die gespeicherte Datei.
    MsgBox($MB_SYSTEMMODAL, "", "Es wurde die folgende Datei gespeichert:" & @CRLF & $sFileSaveDialog)
    EndIf
    EndFunc   ;==>SaveResults
    Alles anzeigen
  • Textfeld mittels "FileSaveDialog" in Textdatei speichern

    • JochenS
    • 17. Juni 2020 um 19:12

    Hallo zusammen,

    ich stelle mich wahrscheinlich gerade selten dämlich an aber ich finde einfach nicht den roten Faden.

    Ich habe ein kleines Script geschrieben welches Textdateien analysiert und die Ergebnisse in einem Textfeld dokumentiert.

    Nun möchte ich das Ergebnis wie z.B. folgendes:

    Die Datei: C:\Users\siegmjo\Documents\Scripte_AUit\Test1Triggerabgleich3.log wird geöffnet.

    Die Datei Triggerabgleich3.log hat: 544 Zeilen. Es wurden 50 Zeilen in der Datei gefunden die den Inhalt >DigInput1< und >HIGH< haben.

    Die Summe der Werte ist: -407.5 und die Anzahl der Werte ist: 25 Der durchschnittliche Versatz ist: -16.3mm.

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

    Die Datei: C:\Users\siegmjo\Documents\Scripte_AUit\Test1Triggerabgleich3_1.log wird geöffnet.

    Die Datei Triggerabgleich3_1.log hat: 418 Zeilen. Es wurden 52 Zeilen in der Datei gefunden die den Inhalt >DigInput1< und >HIGH< haben.

    Die Summe der Werte ist: -55 und die Anzahl der Werte ist: 26 Der durchschnittliche Versatz ist: -2.11538461538462mm.

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

    mit dem "FileSaveDialog" als Textdatei abspeichern.

    Ich habe den "FileSaveDialog" in mein Programm eingebaut und er funktioniert. Ich verstehe nicht wie ich dem Dialog jetzt sagen kann das er alles was mit

    Code
    Func MemoWrite($sMessage)
    GUICtrlSetData($g_idMemo, $sMessage & @CRLF, 1)	;Funktion zum Anzeigen der in $sMessage übergebenen Nachricht
    EndFunc  ;Ende der Funktion MemoWrite()

    in dem Textfeld "$g_idMemo" angezeigt wird in eine Textdatei speichern soll.

    Kurz gesagt das was oben kursiv geschrieben ist soll in eine Textdatei über einen "Speichern (unter) Dialog" gespeichert werden.

    Danke fürs bis hier lesen und vielleicht eine passende Antwort

    Grüße Jochen :)

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™