Pfad-Funktion mit Struktur

    • Offizieller Beitrag

    Ich weiß nicht, wie es euch geht, aber ich finde einen Zugriff auf Elemente über Namen recht angenehm.
    Mit der aktuellen AutoIt-Version können wir ja Inhalte von Strukturen mit Punktnotation der Feldnamen abfragen.
    Somit habe ich mal eine Pfadfunktion erstellt, die einen Pfad splittet und Zugriff auf die einzelnen Elemente per Namen erlaubt. Dabei wird der Pfad auch noch in Normalform gewandelt (einheitlich Backslash, relative Adressen werden in absolute Adressen gewandelt). Es können Laufwerksbasierte absolute Pfade, relative Pfade oder UNC-Pfade angegeben werden.

    _Path

    Edit:
    Eine kleine Rolle rückwärts. FileGetLongName kann ausschliesslich relative Pfade auflösen. Bei der Darstellung von UNC-Pfaden (z.B. //host/share/folder/file.ext) gehts in die Hose.

    Also es bleibt dabei, _WinAPI_GetFullPathName ist notwendig. Kann man aber auch ohne Include durch direkten Aufruf der Dll abfragen.

  • Das habe ich gleich mal ausprobiert. Funzt super.

    Bisher kannte ich jedoch die Möglichkeit als Verbindungoperatoren ein ? oder auch das : nicht. Oder wie muss ich diese Zeichen deuten?

    $sFile = ($sFileExt <> '') ? StringLeft($sFileExt, StringInStr($sFileExt, '.', 0, -1) -1) : ''

    Was kann man damit machen? Leider ergibt sich mir auch nicht ganz der Sinn.

    MfG Jescho

    Jeder hat mal klein angefangen - aber nicht jeder kommt groß raus!

  • Das ist der sogenannte ternäre Operator (weil er ein Operator mit 3 Operanden ist).
    Der Aufbau ist prinzipiell folgender: <Wahr/Falsch> ? <Falls Wahr> : <Falls Falsch>.
    Also eine kompakte If-Else-Konstruktion für den Fall einer Wertzuweisung.

    Folgendes:

    [autoit]

    Global $b_Switch = True
    $s_Text = $b_Switch = True ? "Text Eins" : "Text Zwei"
    MsgBox(0, "", $s_Text)

    [/autoit]


    ist demnach also eine Kurzform für:

    [autoit]

    Global $b_Switch = True

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

    If $b_Switch = True Then
    $s_Text = "Text Eins"
    Else
    $s_Text = "Text Zwei"
    EndIf

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

    MsgBox(0, "", $s_Text)

    [/autoit]