Regulärer Ausdruck.

  • Hi,
    ich versuche mich gearde an regulären ausdrücken. Dabei schlage ich mich der Logik rum. Aber ich versteh das einfach noch nicht ich habe z.B. folgende werte:

    [1]|!TET13060NAT!
    [2]|!TET13060NAU00!
    [3]|!TET13060NAU01!
    [4]|!TET13060NBE!
    [5]|!TET13060NBR!
    [6]|!TET13060NCA!
    [7]|!TET13060NCH!
    [8]|!TET13060NCN!
    [9]|!TET13060NCZ!
    [10]|!TET13060NDE!
    [11]|!TET13060NDK!
    [12]|!TET13060NES!
    [13]|!TET13060NFI!
    [14]|!TET13060NFR!
    [15]|!TET13060NGB!
    [16]|!TET13060NGR!
    [17]|!TET13060NIE!
    [18]|!TET13060NIT!
    [19]|!TET13060NJP!
    [20]|!TET13060NKR!
    [21]|!TET13060NNL!
    [22]|!TET13060NPL!
    [23]|!TET13060NPT!
    [24]|!TET13060NRU!
    [25]|!TET13060NSE!
    [26]|!TET13060NUS00!
    [27]|!TET13060NUS01!
    [28]|!TET13060NUS02!
    [29]|!TET13060NUS03!
    [30]|!TET13060NUS04!
    [31]|!TET13060NUS05!
    [32]|!TET13060PDE!
    [33]|!TET13060PWO!
    [34]|!TET13060REP!

    Und ich möchte immer das TET raus haben. Das TET kann aber auch beliebig andere drei buchstaben beinhalten. Die Länge der Zahlen ist immer 5 und die Endung ist wieder beliebig mit Buchstaben und Zahlen.

    Kann mir jemand ein tipp geben?

    Franz

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---

    2 Mal editiert, zuletzt von franzp (22. September 2008 um 15:54)

    • Offizieller Beitrag

    Und ich möchte immer das TET raus haben.


    Also verstehe ich richtig: Du willst "TET" - oder 3 andere Buchstaben an diese Position entfernen, also ersatzlos aus dem String löschen?

    [autoit]

    $str = "|!TET13060NAU00!"
    $str = Stringleft($str, 2) & StringTrimLeft($str, 5)

    [/autoit]


    Man muß nicht zwingend RegEx verwenden, wenn Stringoperationen es auch ermöglichen. Zumal diese auch schneller sind als RegEx.

  • Ich versteh dein Problem nicht ganz :)
    willst du einfach nur TET weg haben?
    Dann mach einfach

    [autoit]


    dim $array[2]

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

    $array[0] = "!TET13060NAT!"
    $array[1] = "!TET13060NAU00!"

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

    ConsoleWrite (StringLeft ($array[0],1) & StringMid ( $array[0], 5 ))

    [/autoit]
    • Offizieller Beitrag

    Ich steuere mal noch eine StringRegExpReplace-Version und einen Geschwindigkeitstest bei:

    [autoit]


    $t = TimerInit()
    $str = "|!TET13060NAU00!"
    $str = Stringleft($str, 2) & StringTrimLeft($str, 5)
    MsgBox(0,0,$str & @CRLF & Round(TimerDiff($t), 4))

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

    $t = TimerInit()
    $str = "|!TET13060NAU00!"
    $str = StringRegExpReplace($str, '(\|!)(.{3})', '$1')
    MsgBox(0,0,$str & @CRLF & Round(TimerDiff($t), 4))

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

    $t = TimerInit()
    $str = "|!TET13060NAU00!"
    $str = StringLeft($str,2) & StringMid($str, 6)
    MsgBox(0,0,$str & @CRLF & Round(TimerDiff($t), 4))

    [/autoit]

    Die Version von Tom99 ist dabei die Schnellste.

  • BugFix .
    das geht nicht. da bleibt !T13060NAT! Achso vermutlich weil das | eigentlich garnicht im Array vorhanden ist.

    @Tom99 
    das klappt.

    aber ich versteh auch hier beides nicht... Wieso bleibt der Rest rechts von Stringmid dann weiterhin erhalten? Schaut so einfach aus, aber ich sitz einfach aufm Schlauch. Und mit Sringleft zeigt er mit doch die Zeichen von links an. Wieso verschwinden die dann?

    Franz

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---

  • Oscar

    ja das klappt auch super. Und wenn ich es anschau ist es im nachinein sogar noch am logischten. Geschwindigkeit spielt hier keine Rolle. Sind nur einige tausend Werte..

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---

  • Was ein wiederspruch lol ;)

    Zitat

    Geschwindigkeit spielt hier keine Rolle. Sind nur einige tausend Werte..

  • @Tom99

    das geht recht schnell... und nur ein einziges mal...

    jetzt ist mir die Erleuchtung aufgegangen...

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---

    3 Mal editiert, zuletzt von franzp (19. September 2008 um 15:34)

  • ich hätte noch eine Frage... Ich habe ganz viele Folder:

    X:\blabla\blabla\das möchte ich\blöabla\blabla

    Ich möchte die Namen der Ordner, der dritten ebene. Die Filenamen sind unterschiedlich lang. Es kann auch sein, dass hinter unterhalb der dritten ebene keine Ordner mehr kommen. Aber ich schätze das spielt keine Rolle.

    Kann mir jemand behilflich sein?

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---

  • oh ja... so einfach.. ^^
    manchmal sitz ich einfach aufm Schlauch.

    Danke

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---

  • Ich hab das mal ganz anders gelöst.
    Einfach mal probieren :D

    [autoit]

    #Include <Array.au3>

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

    $Ordnerfile = @ScriptDir&"\Ordnerstruktur.txt"
    $Ordner = FileSelectFolder("Basisordner auswählen","C:\")
    Dim $Ebene3[1]
    Dim $i = 0

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

    If @error Then Exit
    RunWait(@ComSpec & " /c " &@SystemDir&'\tree.com /a > "'&$Ordnerfile&'"', $Ordner, @SW_HIDE)

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

    $Datei = FileOpen($Ordnerfile,0)

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

    $Pattern1 = "| \---"
    $Pattern2 = "| | +---"
    $Pattern3 = "| | \---"
    $Pattern4 = "| \---"
    $Pattern5 = "| +---"
    $Pattern6 = " \---"

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

    While 1
    $line = FileReadLine($Datei)
    If @error = -1 Then ExitLoop
    If StringLeft($line,12) = $Pattern1 Or StringLeft($line,12) = $Pattern2 Or StringLeft($line,12) = $Pattern3 Or StringLeft($line,12) = $Pattern4 Or StringLeft($line,12) = $Pattern5 Or StringLeft($line,12) = $Pattern6 Then
    $Ebene3[$i] = StringTrimLeft($line,12)
    $i += 1
    ReDim $Ebene3[$i + 1]
    EndIf
    Wend

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

    _ArrayDisplay($Ebene3)

    [/autoit]
  • ok hier spielt die laufzeit schon eine Rolle, da es 60.000 Ordner sind :wacko:

    aber der Gedanke ist gut!

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---