RegExp Pattern.....

  • Hey,

    brauche mal einen regExp Pattern...

    so sieht die datei aus

    dn desc
    CN=S0myT001,OU=Servers,OU=_Global,OU=E0my,DC=test,DC=my,DC=net Terminal Server
    CN=S0myT010,OU=Servers,OU=TS0RV,OU=E0my,DC=test,DC=my,DC=net Citrix Server
    CN=S0myT011,OU=Servers,OU=TS0RV,OU=E0my,DC=test,DC=my,DC=net Citrix Server
    CN=s0myt020,OU=Servers,OU=TS0RV,OU=E0my,DC=test,DC=my,DC=net Terminalserver my


    und das will ich haben:
    S0myT001
    S0myT010
    S0myT011
    s0myt020

    Kann mir mal jemand helfen....

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

    Einmal editiert, zuletzt von subzero007 (15. Oktober 2009 um 11:01)

  • Bei sowas würde ich nicht auf reguläre Ausdrücke ausweichen - ein einfaches Stringbetween sollte da besser geeignet sein:

    Spoiler anzeigen
    [autoit]

    #Include <string.au3>
    #include <Array.au3>

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

    $String = 'dn desc' & @CRLF & _
    'CN=S0myT001,OU=Servers,OU=_Global,OU=E0my,DC=test,DC=my,DC=net Terminal Server' & @CRLF & _
    'CN=S0myT010,OU=Servers,OU=TS0RV,OU=E0my,DC=test,DC=my,DC=net Citrix Server' & @CRLF & _
    'CN=S0myT011,OU=Servers,OU=TS0RV,OU=E0my,DC=test,DC=my,DC=net Citrix Server' & @CRLF & _
    'CN=s0myt020,OU=Servers,OU=TS0RV,OU=E0my,DC=test,DC=my,DC=net Terminalserver my'

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

    $Array = _StringBetween($String, 'CN=', ',')
    _ArrayDisplay($Array)

    [/autoit]
  • Was mache ich falsch;

    [autoit]

    For $i = 2 To $aFile[0] - 2
    $aFile[$i] = StringStripWS($aFile[$i], 7)

    $Array = _StringBetween($aFile[$i], 'CN=', ',')
    _ArrayDisplay($Array)

    GUICtrlCreateListViewItem($Array, $hListView)
    Next

    [/autoit]

    Arraydislay ist alles ok bloss die items werden nicht erstell?

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Hi !

    Wie wäre es wenn du dem Array eine Nummer gibst!?

    [autoit]


    For $i = 2 To $aFile[0] - 2
    $aFile[$i] = StringStripWS($aFile[$i], 7)

    $Array = _StringBetween($aFile[$i], 'CN=', ',')
    _ArrayDisplay($Array)

    GUICtrlCreateListViewItem($Array[1], $hListView) ;<------ Hier zb.
    Next

    [/autoit]

    If not :?: then ?( else :thumbup:

  • Hi,
    hast du mal geschaut was GUICtrlCreateListViewItem() als "text" erwartet? Das Beispiel in der Hilfe zeigt einen STRING, bei dem die einzelnen Items durch ein Pipe getrennt sind, du übergibst der Funktion aber ein Array....
    ciao
    Andy

    /*EDIT*/ _ArrayToString() sollte da weiterhelfen...

  • kriege dann diesen fehler wenn ich dem array eine nummer gebe:
    ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • HI!

    Die Array[1] war nur ein Beispiel!
    Wenn Arraydislay funktioniert dann siest du in der obersten Zeile die Nummer die du angeben musst. Ich nehme an bei dir ist es die 0 -> $Array[0]
    Eine Überprüfung ob es ein Array ist wäre auch nicht schlecht.

    [autoit]


    If IsArray($Array) Then ;z.B.

    [/autoit]

    If not :?: then ?( else :thumbup:

  • Ich habe es gelösst:


    For $i = 2 To $aFile[0] - 2
    $aFile[$i] = StringStripWS($aFile[$i], 7)

    $Array = _StringBetween($aFile[$i], 'CN=', ',')
    _ArrayDisplay($Array)
    $ArrayString = _ArrayToString($Array)
    GUICtrlCreateListViewItem($ArrayString, $hListView) ;<------ Hier zb.


    Danke an alle...........

    _Arraytostring war es....

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Array[0] sollt aber trotzdem funktionieren!

    [autoit]


    #include <String.au3>
    #include <array.au3>
    Dim $aFile[5] = ["String ohne Suchziel", "CN=S0myT001,OU=Servers,OU=_Global,OU=E0my,DC=test,DC=my,DC=net Terminal Server", "CN=S0myT010,OU=Servers,OU=TS0RV,OU=E0my,DC=test,DC=my,DC=net Citrix Server", "CN=S0myT011,OU=Servers,OU=TS0RV,OU=E0my,DC=test,DC=my,DC=net Citrix Server", "CN=s0myt020,OU=Servers,OU=TS0RV,OU=E0my,DC=test,DC=my,DC=net Terminalserver my "]
    For $i = 0 To 4
    $aFile[$i] = StringStripWS($aFile[$i], 7)
    $Array = _StringBetween($aFile[$i], 'CN=', ',')
    _ArrayDisplay($Array)
    If IsArray ($Array) Then
    ConsoleWrite($Array[0] & @CRLF)
    ;GUICtrlCreateListViewItem($Array[0], $hListView)
    EndIf
    Next

    [/autoit]

    LG
    Concara

    If not :?: then ?( else :thumbup:

    2 Mal editiert, zuletzt von Concara (15. Oktober 2009 um 11:35)

    • Offizieller Beitrag

    Da die Ausdrücke im gesuchten Bereich konstante Längen haben, kannst du dir auch _StringBetween schenken und mit den schnelleren Stringfunktionen arbeiten:

    [autoit]

    $s = "CN=S0myT001,OU=Servers,OU=_Global,OU=E0my,DC=test,DC=my,DC=net Terminal Server"
    $select = StringTrimLeft(StringLeft($s, 11), 3)
    ConsoleWrite('$select = ' & $select & @crlf)

    [/autoit]
  • Also irgendwie sehe ich jetzt nicht mehr durch was ihr hier macht.
    Subzero sag mal bitte konkret was du machen willst und wo das Problem ist.
    Warum zerlegt ihr das jetzt nochmal in einzelne Zeilen?
    Stringbetween schluckt doch den gesamten String - und dann einfach per For-In-Schleife durchgehen.
    Oder wo liegt jetzt das Problem?:
    Mal das Beispiel angepasst:

    Spoiler anzeigen
    [autoit]

    #Include <string.au3>

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

    $String = 'dn desc' & @CRLF & _
    'CN=S0myT001,OU=Servers,OU=_Global,OU=E0my,DC=test,DC=my,DC=net Terminal Server' & @CRLF & _
    'CN=S0myT010,OU=Servers,OU=TS0RV,OU=E0my,DC=test,DC=my,DC=net Citrix Server' & @CRLF & _
    'CN=S0myT011,OU=Servers,OU=TS0RV,OU=E0my,DC=test,DC=my,DC=net Citrix Server' & @CRLF & _
    'CN=s0myt020,OU=Servers,OU=TS0RV,OU=E0my,DC=test,DC=my,DC=net Terminalserver my'

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

    $Array = _StringBetween($String, 'CN=', ',')

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

    For $sCN in $Array
    MsgBox(0,"", $sCN) ;Daraus dein GUICtrlListViewItem machen
    Next

    [/autoit]

    BugFix
    Durchaus ist das schneller - aber nicht einfacher.
    Denn das Beispiel was du gemacht hast funktioniert nur für eine einzelne Zeile.
    Er muss also vorher den Gesamtstring zeilenweise trennen.
    Da ist _StringBetween die denkbar einfachste Wahl - und ebenfalls ausreichend performant.

    Edit: Mal davon abgesehen - wenn dann warum nicht einfach per StringMid($String,4, 8 ) ?

    2 Mal editiert, zuletzt von AspirinJunkie (15. Oktober 2009 um 12:02)

  • Hey,

    vermutlich kommen die Daten ja aus einer .log oder ähnliches.
    Die Vorgehensweise ist jetzt abhängig vom einlesen.
    Zeile für Zeile in ein Array?
    Alles in eine Variable?
    Zeile für Zeile als Variable?

    und danach mit der schnellsten Möglichkeit den String verändern.
    Zeile für Zeile in eine Variable mit der Methode von Bugfix wäre wahrscheinlich meine Wahl.

  • Wohl nicht die schnellste, aber einfachste komplett ohne Schleifen...

    [autoit]

    #include <Array.au3>
    #Include <string.au3>

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

    $Array = _StringBetween(fileread("logfile.log"), 'CN=', ',')
    $listviewitems=_arraytostring($array)
    GUICtrlCreateListViewItem($$listviewitems, $hListView) ;Ab damit in die listview

    [/autoit]

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    Einmal editiert, zuletzt von Andy (15. Oktober 2009 um 12:54)