Dateiendungen aus der Registrierungsdatenbank auslesen und arrays löschen

  • Hallo Leute,
    Ich würde gerne die Dateiendungen aus der Registrierungsdatenbank auslesen.
    Aber mein "Filter" lässt leider alles durch.
    Was muss ich ändern damit nur noch Arrays durchkommen die mit einem Punkt beginnen?

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>

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

    Global $var
    For $i = 1 to 10000 Step +1 ;liest den pfad "HKEY_CLASSES_ROOT\" aus und sichert ihn in $var
    $var &= RegEnumKey("HKEY_CLASSES_ROOT", $i) & @CR
    If @error <> 0 then ExitLoop
    Next
    $array = StringSplit($var,@CR) ;$var wird zu einem Array

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

    For $i = 1 To $array[0] Step +1 ;hier sollten nur noch arrays übrig bleiben die mit einem "punkt" beginnen. (Filter)
    $return = StringLeft($array[$i],1)
    If Not $return == "." Then $array[$i] = ""
    Next
    _ArrayDisplay($array)

    [/autoit]

    Edit:
    Hab schon eine Lösung gefunden:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>

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

    Global $var
    For $i = 1 to 10000 Step +1 ;liest den pfad "HKEY_CLASSES_ROOT\" aus und sichert ihn in $var
    $var &= RegEnumKey("HKEY_CLASSES_ROOT", $i) & @CR
    If @error <> 0 then ExitLoop
    Next
    $array = StringSplit($var,@CR) ;$var wird zu einem Array

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

    For $i = 1 To $array[0] Step +1 ;hier sollten nur noch arrays übrig bleiben die mit einem "punkt" beginnen.
    $return = StringLeft($array[$i],1)
    If $return == "." Then

    Else
    $array[$i] = ""
    EndIf
    Next
    _ArrayDisplay($array)

    [/autoit]


    Noch eine Frage. Wie bekomme ich jetzt die "" (inhaltlosen) Arrays weg?

    3 Mal editiert, zuletzt von senden9 (16. September 2008 um 16:49)

    • Offizieller Beitrag

    Wieso hinterher entfernen, wenn man sie vorher bereits ausfiltern kann:

    [autoit]


    #include <Array.au3>

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

    Global $var =''
    For $i = 1 to 10000 Step +1 ;liest den pfad "HKEY_CLASSES_ROOT\" aus und sichert ihn in $var
    $tmp = RegEnumKey("HKEY_CLASSES_ROOT", $i)
    If @error <> 0 then ExitLoop
    If StringLeft($tmp, 1) = "." Then $var &= $tmp & @CR
    Next
    $array = StringSplit(StringTrimRight($var, 1), @CR) ;$var wird zu einem Array

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

    _ArrayDisplay($array)

    [/autoit]
    • Offizieller Beitrag

    Hi,

    sowas sollte auch gehen:

    [autoit]

    #include <Array.au3>
    Global $re = _getDOSOutput('assoc')

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

    Global $fileExtension_A = StringRegExp($re, '\.(.*)=', 3)
    Global $file_A = StringRegExp($re, '=(\S*)', 3)
    Global $assoc_A[UBound($fileExtension_A)][2]

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

    For $i = 0 To UBound($fileExtension_A) -1
    $assoc_A[$i][0] = $fileExtension_A[$i]
    $assoc_A[$i][1] = $file_A[$i]
    Next
    _ArrayDisplay($assoc_A)

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

    Func _getDOSOutput($command)
    Local $text = '', $Pid = Run('"' & @ComSpec & '" /c ' & $command, '', @SW_HIDE, 2 + 4)
    While 1
    $text &= StdoutRead($Pid, False, False)
    If @error Then ExitLoop
    Sleep(10)
    WEnd
    Return $text
    EndFunc ;==>_getDOSOutput

    [/autoit]

    Mega

    • Offizieller Beitrag

    Ob Windoof das kann, weiß ich gar nicht. Sonst brauchte man ja in Windows nicht die blöden Endungen zur File-Erkennung.
    Und wenn der Header nicht sauber geschrieben ist, hat man auch Pech beim Auslesen.
    Welche Bytes genau dafür zuständig sind weiß ich adhoc nicht - aber GIDF :D