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

Beiträge von shadow667

  • Frage zu StringRegExpReplace

    • shadow667
    • 1. Juni 2011 um 19:41
    Zitat von BugFix


    Bei mir erscheinen keine Leerzeichen am Zeilenanfang. :wacko:
    Das ist meine Konsolenausgabe:

    Code
    N5 M6 T1 (BOHRER D10)
    N10 G0 G54 X10 Y30 S500 M3
    N15 G0 Z30
    N20 G81 R2 Z-15 F500
    N20 G0 G80 Z300

    Das war ja auch nur ein Beispiel-NC-Programm... es kann zwischendurch vorkommen, daß die ein oder andere Zeile kein "N" am Anfang hat

  • Frage zu StringRegExpReplace

    • shadow667
    • 1. Juni 2011 um 19:26
    Zitat von BugFix

    Hier noch die Variante für RegExp, damit es nicht zu haarsträubend wird, habe ich den Klammerausdruck zwischengesichert und nach Leerzeicheneinfügen wieder eingesetzt.
    Ich gehe mal davon aus, dass immer nur ein Klammerausdruck enthalten ist, anderenfalls müßte man das noch abändern.

    Spoiler anzeigen
    [autoit]

    Local $s = _
    "N5M6T1(BOHRER D10)" & @CRLF & _
    "N10G0G54X10Y30S500M3" & @CRLF & _
    "N15G0Z30" & @CRLF & _
    "N20G81R2Z-15F500" & @CRLF & _
    "N20G0G80Z300"

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

    $sBraces = StringRegExp($s, '\(.+\)', 1)
    $sOut = StringRegExpReplace(StringRegExpReplace(StringRegExpReplace($s, '\(.+\)', '(1)'), '([A-MO-Z(])', ' $1'), '\(1\)', $sBraces[0])
    ConsoleWrite($sOut & @CRLF)

    [/autoit]
    Alles anzeigen

    Um's mal salopp zu sagen: Geilomatik :rock:

    Klappt super, auch wenn ich den Syntax net versteh!

    Was müsste geändert werden, wenn ich am Zeilenanfang kein Leerzeichen haben möchte?

    Edit:

    Trotzdem noch 'n Fehler gefunden: Wenn ein Programm nicht nur einen Kommentar enthält, werden alle anderen Kommentare durch diesen ersetzt ?(

    Edit2: Hab zu spät gelesen, daß du das Klammer-Thema schon angeschnitten hast.... Ja, es kommen unterschiedliche Kommentare vor

  • Frage zu StringRegExpReplace

    • shadow667
    • 1. Juni 2011 um 18:31
    Zitat von TheShadowAE

    Ah ja, müsste funktioneren, wenn du das [^)\r\n] in ein [^)\r\n\d] machst!
    https://autoit.de/index.php?page=Thread&amp;threadID=19071 <-- RegExp Tutorial

    Leider nein! Es werden immernoch Zeichen durch Leerzeichen ersetzt

    Danke für den Link zum Tutorial

  • Frage zu StringRegExpReplace

    • shadow667
    • 1. Juni 2011 um 17:31
    Zitat von TheShadowAE

    Mit deiner Technik würde vor jedem Zeichen außer den 2 ein Leerzeichen kommen, versuch lieber hinter Buchstabe-Zahl-nichtklammerzuundnichtzeilenende ein Leerzeichen zu machen. Wenn du es nicht schaffst guck in den Spoiler ^^

    Spoiler anzeigen
    [autoit]

    $new=StringRegExpReplace($old,"(?i)(?s)([A-Z]\d+?)[^)\r\n]","$1 ")

    [/autoit]

    Ich fress den Syntax von StringRegExpReplace net... allerdings, wenn ich deine Zeile in mein Script einfüge, werden die Leerzeichen zwar eingefügt, aber teilweise andere Zeichen dadurch ersetzt... warum auch immer :D

  • Frage zu StringRegExpReplace

    • shadow667
    • 1. Juni 2011 um 16:00

    Ich habe ein "kleines" Problem mit StringRegExpReplace

    Bevor ich nun zu meinem Problem komme, kurz zur Erläuterung:
    Ich bin Programmierer für NC-Werkzeugmaschinen und schreibe aktuell an einem kleinen Editor.
    Wenn ich ein NC-Programm aus der Maschine sichere, hat die Steuerung aus Platzgründen alle Leerzeichen entfernt.

    Hier mal kurz der Aufbau eines NC-Programmes:
    Original:

    Code
    N5 M6 T1 (BOHRER D10)
    N10 G0 G54 X10 Y30 S500 M3
    N15 G0 Z30
    N20 G81 R2 Z-15 F500
    N20 G0 G80 Z300

    Rückgabe aus Maschine:

    Code
    N5M6T1(BOHRER D10)
    N10G0G54X10Y30S500M3
    N15G0Z30
    N20G81R2Z-15F500
    N20G0G80Z300

    Ich hoffe, ihr seht mein Problem. Ich möchte quasi, falls möglich, per StringRegExpReplace() vor allen Buchstaben ausser "N" und vor "(" ein Leerzeichen einfügen, wobei der Text zwischen den Klammern ausgespart werden soll, da dies einen von der Maschine nicht gelesenen Kommentar darstellt, der auch nicht verändert wird.

    Ich bedanke mich schonmal für die Hilfe von euch Profis

    Gruß Shadow

  • Anfrage Listview und Dateienanzeige

    • shadow667
    • 1. Juni 2011 um 12:28
    Zitat von autoBert

    Hallo JaySini,

    hier ein kleines Beispiel:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <File.au3>
    ;
    Global $sIniFile

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

    $idGUI = GUICreate("Ini-Verwaltung", 300, 160)
    $idList = GUICtrlCreateList("", 10, 10, 180, 80)
    $aInis = _FileListToArray(@ScriptDir, "*.ini", 1)
    If IsArray($aInis) Then
    For $i = 1 To $aInis[0]
    GUICtrlSetData($idList, $aInis[$i])
    Next
    EndIf
    $idLabel = GUICtrlCreateLabel("", 10, 100, 290, 22)
    $idBtnMsgBox = GUICtrlCreateButton("MsgBox", 10, 130, 290, 22)
    GUICtrlSetState($idBtnMsgBox,$GUI_DISABLE)
    GUISetState()

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $idList
    $sIniFile = @ScriptDir & "\Daten\" & GUICtrlRead($idList)
    GUICtrlSetData($idLabel, $sIniFile)
    GUICtrlSetState($idBtnMsgBox,$GUI_ENABLE)
    Case $idBtnMsgBox
    MsgBox(0,"ausgewählt:",$sIniFile)
    EndSwitch
    WEnd

    [/autoit]

    Edit: shadow667 hat es ja zwischenzeitlich gelöst, da war ich wohl zu langsam

    mfg autoBert

    Alles anzeigen

    Die Sache, daß direkt beim klicken der Liste eine Aktion ausgeführt wird gefällt mir! Kannte ich so bislang noch nicht...
    Aber man lernt ja nie aus :D

  • Anfrage Listview und Dateienanzeige

    • shadow667
    • 1. Juni 2011 um 12:21

    Bin ja auch doof... manchmal sollte man die angebotenen Scripte auch lesen :huh:
    Ich hatte die ganze zeit ein ListView im Kopf
    Bei GUICtrlCreateList reicht beim Auslesen natürlich ein GUICtrlRead($hListBox)

    Und so funktioniert's dann auch:

    [autoit]

    #AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    #include <GUIListBox.au3>
    #include <GuiConstantsEx.au3>
    #include <Constants.au3>
    #include <WindowsConstants.au3>

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

    Opt('MustDeclareVars', 1)

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

    $Debug_LB = False ; Prüft den Klassennamen (ClassName), der an die ListBox-Funktion übergeben wird. Setze dies versuchsweise auf True und verwende dann ein Handle zu einem anderen Control, um die Funktionsweise zu verstehen.
    Global $hListBox

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

    ; Erstellt eine GUI
    GUICreate("ListBox: Verzeichnis einlesen", 400, 400)
    $hListBox = GUICtrlCreateList("", 2, 2, 200, 296)
    Global $Button1 = GUICtrlCreateButton("test", 10, 320, 320, 20, $WS_GROUP)
    GUISetState()

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

    ; Fügt Dateien hinzu
    _GUICtrlListBox_BeginUpdate($hListBox)
    _GUICtrlListBox_ResetContent($hListBox)
    _GUICtrlListBox_InitStorage($hListBox, 100, 4096)
    _GUICtrlListBox_Dir($hListBox, "*.ini")
    _GUICtrlListBox_AddFile($hListBox, @Scriptdir & "*.ini")
    _GUICtrlListBox_EndUpdate($hListBox)

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

    ; Die Schleife wiederholt sich, bis der Benutzer die Beenden-Aktion der GUI auslöst

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    Button1()

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

    EndSwitch
    WEnd

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

    Func Button1()
    MsgBox(0,"Ausgewählter Eintrag", GUICtrlRead($hListBox))

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

    EndFunc

    [/autoit]
  • Anfrage Listview und Dateienanzeige

    • shadow667
    • 1. Juni 2011 um 11:58
    Zitat von JaySini
    [autoit]


    ; Die Schleife wiederholt sich, bis der Benutzer die Beenden-Aktion der GUI auslöst
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    Button1()

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

    EndSwitch
    WEnd

    [/autoit]

    So startet er ohne fehler, jedoch it button ohne funktion

    Alles anzeigen

    Ja Ne is klar :D

    Schließlicht bleibt dein Script ja in deiner Do...Until-Schleife hängen, noch bevor es in die While-Schleife kommt

  • Anfrage Listview und Dateienanzeige

    • shadow667
    • 1. Juni 2011 um 11:53

    Siehe Edit, ein Post weiter oben :P

  • Anfrage Listview und Dateienanzeige

    • shadow667
    • 1. Juni 2011 um 11:49

    Änder mal

    [autoit]

    $Button1 = GUICtrlCreateButton("test", 10, 320, 110, 20, $WS_GROUP)

    [/autoit]


    nach

    [autoit]

    Global $Button1 = GUICtrlCreateButton("test", 10, 320, 110, 20, $WS_GROUP)

    [/autoit]

    Edit: Für $WS_GROUP musst du noch

    [autoit]

    #include <WindowsConstants.au3>

    [/autoit]


    mit einfügen

    Und setz doch mal $hListBox statt Local Global

  • Problem bei nachträglicher Script bearbeitung

    • shadow667
    • 1. Juni 2011 um 11:46

    Probiers mal statt mit

    [autoit]

    If WinExists($g_szVersion) Then Exit

    [/autoit]

    mit

    [autoit]


    $Win = WinList($g_szVersion)
    If $Win[0][0] >1 Then Exit ;

    [/autoit]
  • Anfrage Listview und Dateienanzeige

    • shadow667
    • 1. Juni 2011 um 11:43

    [quote='JaySini','index.php?page=Thread&postID=221885#post221885']

    [autoit]

    Func Button1()
    MsgBox(0, GUICtrlRead($hListBox), "Keine Ordner gefunden.")

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

    EndFunc

    [/autoit]

    Damit erstellst du dir 'ne MsgBox, welche in der Titelleiste die Nummer deiner ListView-Auswahl anzeigt und den Text "Keine Ordner gefunden" im Fenster.
    Wenn du im Fenster deinen markierten ListView-Eintrag haben willst, dann so:

    [autoit]

    MsgBox(0,"Ausgewählter Eintrag", GUICtrlRead(GUICtrlRead($hListBox)))

    [/autoit]

    Achte auf das doppelte GUICtrlRead

  • Anfrage Listview und Dateienanzeige

    • shadow667
    • 1. Juni 2011 um 11:25

    Probier's mal so:

    [autoit]

    $Var1 = GUICtrlRead(GUICtrlRead($hListBox))

    [/autoit]
  • Anfrage Listview und Dateienanzeige

    • shadow667
    • 1. Juni 2011 um 11:10

    Du kannst deine Schleife etwas erweitern/ändern. Ich persönlich mache das mit den Buttons immer so:

    [autoit]

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    _DeineFunktion()
    Case $Button2
    _DeineAndereFunktion()
    EndSwitch
    WEnd

    [/autoit]

    Damit kannst du in der Schleife alle Button-Eingaben in der GUI abfangen

  • Problem mit StringBetween

    • shadow667
    • 8. Mai 2011 um 20:00

    Danke für den Tip noch!

    Es wird allerdings auch schon meine Original-Datei per @CR@LF beendet, jetz funktioniert's aber!

    Gruß

  • Problem mit StringBetween

    • shadow667
    • 8. Mai 2011 um 19:27

    Scheinbar lag's tatsächlich an der Datei...

    Unsere NC-Programme haben eben die Endung .nc
    Nun habe ich eine Sicherung (vorher .nc) als .txt abgespeichert und mein Script nochmal laufen lassen - siehe da, es lief...


    Wenn du mir jetz noch erklären kannst, warum das so ist wäre ich sehr dankbar!

  • Problem mit StringBetween

    • shadow667
    • 8. Mai 2011 um 18:48
    Zitat von i2c
    Spoiler anzeigen
    [autoit]

    #Region - Timestamp
    ;2011-05-08 18:19:04
    #EndRegion
    #include<array.au3>
    $sPath = ""
    $hFile = FileOpen($sPath)
    $sFile = FileRead($hFile)

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

    $aResult = StringRegExp($sFile, '\:(\d+)\((.*)\)', 1, 1)
    If IsArray($aResult) And UBound($aResult) >= 2 Then
    $sFileName = $aResult[0] & "_" & $aResult[1]
    ConsoleWrite($sFileName & @CRLF)
    EndIf

    [/autoit]
    Alles anzeigen

    Hier wird's wahrscheinlich 'n Problem geben, wenn ein NC-Programm nach der Programmnummer (:0123) keinen Kommentar hat, was zwar selten aber doch von Zeit zu Zeit vorkommt


    Zitat von Raupi

    Funzt mit _StringBetween auch.

    Spoiler anzeigen
    [autoit]

    #Region - Timestamp
    ; 2011-05-08 18:22:55
    #EndRegion

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

    #include <array.au3>
    #include <String.au3>
    $String = FileRead("C:\Program Files (x86)\AutoIt3\SciTE\tools\test.txt") ; $File aus einer FileOpen()

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

    $DateiName = _StringBetween($String, "(", ")")
    _ArrayDisplay($DateiName)
    $Dateiname2= _Stringbetween($String, ":", Chr(13))
    _ArrayDisplay($DateiName2)

    [/autoit]

    Ich denke mal das Problem liegt eher daran, das der TE nicht beachtet hat, das die Rückgabe von _StringBetween ein Array ist.

    Alles anzeigen

    Die Array-Geschichte hat der TE sehr wohl beachtet! :D

    Allerdings passiert folgendes:
    Bei

    [autoit]


    $Start = ":"
    $End = Chr(13)

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

    $Dat = _StringBetween($String, $Start, $End)

    [/autoit]

    G:\Datensicherungs-Splitter.au3 (89) : ==> Subscript used with non-Array variable.:
    $Neu = FileOpen($Pfad&"\"&$Dat[0]&".nc", 2)
    $Neu = FileOpen($Pfad&"\"&$Dat^ ERROR

  • Problem mit StringBetween

    • shadow667
    • 8. Mai 2011 um 18:06

    Ok, dann muß ich aber etwas weiter ausholen:

    Was ich machen möchte ist folgendes:
    Wenn ich auf Arbeit aus meiner CNC-Fräsmaschine eine Datensicherung (NC-Programme) ausspiele, werden alle Programme nacheinander in einer Textdatei abgelegt
    Nun habe ich mit AutoIt ein Script erstellt, welches diese Datei als String ausliest und als einzelne Text-Dateien abspeichert.

    So in etwa ist ein NC-Programm aufgebaut:

    Spoiler anzeigen

    %
    :0123(Kommentar)
    N5 Programmcode
    N10 Programmcode
    N15 Programmcode
    N20 Programmcode[
    N25 M99 (Programmende)
    %

    Mein Problem besteht nun in der "Erstellung" des Dateinamens.
    Bislang habe ich den Dateinamen nur aus dem Wert in der Klammer erstellt, etwa so:

    [autoit]


    $Text = FileRead($File) ; $File aus einer FileOpen()
    $String = String($Text)

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

    $DateiName = _StringBetween($String, "(", ")")

    [/autoit]

    Nun tauchte aber in der Praxis das Problem auf, daß, wenn mehrere NC-Programme den gleichen Kommentar hatten, gleichnamige immer überschrieben werden.
    Mein Lösungsansatz war nun also, die Programm-Nummer mit in den Dateinamen zu übernehmen, also via

    [autoit]

    _Stringbetween($String, ":", Chr(13))

    [/autoit]

    Dieses funktioniert nun leider nicht

    MfG

  • Problem mit StringBetween

    • shadow667
    • 8. Mai 2011 um 15:01

    Guten Tag!

    Ich möchte aus einem String mittels _StringBetween einen Teilstring welcher sich zwischen einem Doppelpunkt ":" und dem nächsten Zeilenumbruch befindet auslesen, nur leider klappt das nicht und ich bekomme immer die Meldung, meine Variable wäre kein Array, was aber bei korrekter Funktion von _StringBetween sein sollte.
    Meine Frage nun: wie muss der Syntax der Zeile richtig lauten?

    MfG

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™