_FileListToArray

  • Hallo,

    leider ist dieser Thread irgendwie verschwunden ..... also nochmal.

    Laut Hilfe kann man ja Fragezeichen eingeben um die Länge des zu lesenden Dateinamen zu steuern.

    _FileListToArray(@ScriptDir, "???????.jpg", 1)

    Bei der Angabe von 6 Fragezeichen werden auch nur Dateien mit 6 Zeichen berücksichtigt.

    Verwende ich aber 7 Fragezeichen werden auch 12-stellige Dateinamen gelesen.

    Ist dies ein Fehler?

    Danke.

    leertaste

    Einmal editiert, zuletzt von leertaste (10. Dezember 2007 um 20:02)

  • Hallo!

    probiers mal so mit StringRegExp:

    ===============schnipps aus meinem Cod========================


    $FolderList=_FileListToArray($PDFDIR & "\", "*.pdf",1) ; Flag 2 = nur Ordner
    If (Not IsArray($FolderList)) then

    MsgBox (0,"XXXXXXXX" ,"Keine PDF-Dateien gefunden.",5)
    ELSE


    For $i = 1 To $FolderList[0]
    ; Beginn German PDFs
    $pattern="[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]_[0-9][0-9][0-9]+\.[pP][dD][fF]"
    if StringRegExp($FolderList[$i],$pattern) then
    ...
    ========================================================================

    Gruss

    German
    PS: bin da auch nicht der große Experte, hab mir ne kleine StringRegExp-Anleitung aus dem Internet besorgt
    Pearl_Basics.pdf (ist zwar nur eine Seite drin, ist aber auch für Nichtinformatiker verständlich)

  • Hi,

    interessante Möglichkeit, aber mit StringRegExp hab ich mich noch nicht beschäftigt.

    Die Hilfe dazu ist eine schwere Kost.

    Vielleicht hilft mir ja deine Anleitung, konnte sie aber auf die schnelle nicht finden.

    Danke für die Hilfe.

    leertaste

  • Schau im tutorial anch (link : wiki.autoit.de) da ist eine erklärung & ein link zu BugFix (C) (TM) (REGISTERED) StringRegExp() Howto 8o

    • Offizieller Beitrag

    Hallo,

    mach es doch einfach mit StringLen, dabei muss man nur bedenken das die Dateierweiterung zur StringLänge hinzuaddiert werden muss!

    Beispiel
  • Hallo,

    danke. Es geht ja noch einfacher.

    Um das ganze in ein array zu schreiben habe ich folgendes versucht.

    Spoiler anzeigen

    Dim $n_array[Ubound($aFiles)][2]
    $FileLen6 = ""

    For $i = 1 To $aFiles[0]
    If StringLen($aFiles[$i]) >= 14 Then $FileLen6 = $aFiles[$i]
    $n_array[$i][0] = $FileLen6
    $n_array[$i][1] = FileGetTime($pfad & "\" & $FileLen6, 0, 1)
    Next

    Irgendwie schaut das array nicht so gut aus.

    Irgendwie sollte ja ein ReDim erfolgen da ja das array $aFiles ja nicht komplett genutzt wird.

    Edit1:
    Hab vergessen zu zeigen wie es ausschaut....

    [0]
    [1]
    [2]
    [3] 12345678911.txt
    [4] 12345678912.txt

    Für jede Datei die kürzer ist als 14 Stellen erfolgt ein Leerfeld.


    Wie könnte man es besser machen?

    Danke.

    leertaste

    Einmal editiert, zuletzt von leertaste (29. November 2007 um 20:25)

  • Hallo zusammen,

    die leeren Zeilen habe ich mit ReDim beseitigen können. Jetzt aber taucht ein Eintrag mehrmals auf.

    [0] 12345678911.txt
    [1] 12345678911.txt
    [2] 12345678911.txt
    [3] 12345678911.txt
    [4] 12345678912.txt

    So sieht der code aus:

    Dim $n_arr[1]
    $sname = ''

    For $i = 1 to $a_Files[0]
    If StringLen($a_Files[$i]) > 14 Then $sname = $a_Files[$i]
    If $n_arr[Ubound($n_arr)-1] <> '' Then
    ReDim $n_arr[Ubound($n_arr)+1]
    EndIf
    $n_arr[Ubound($n_arr)-1] = $sname
    Next

    Was habe ich falsch gemacht?

    Danke.

    Bis bald

    leertaste

  • Bei dir muss $name in jedem Durchlauf auf "" zurückgesetzt werden.
    Einfacher ist es aber so:

    Spoiler anzeigen
    [autoit]

    #include <File.au3>

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

    #include <Array.au3> ;Für ArrayDisplay
    $pfad = @DesktopDir
    $aFiles = _FileListToArray($pfad,"*.lnk")
    _ArrayDisplay($aFiles,"Ergebnis von FileListToArray")
    Dim $n_array[Ubound($aFiles)][2]
    Dim $entry = 0 ;Aktueller Index des neuen Arrays

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

    For $i = 1 To $aFiles[0]
    If StringLen($aFiles[$i]) >= 14 Then
    $n_array[$entry][0] = $aFiles[$i]
    $n_array[$entry][1] = FileGetTime($pfad & "\" & $aFiles[$i], 0, 1)
    $entry += 1 ;Index um 1 erhöhen
    EndIf
    Next
    ReDim $n_array[$entry][2]
    _ArrayDisplay($n_array,"Ergebnis. Alle Dateinamen > 14")

    [/autoit]


    Außerdem wird hier keine Zeit verschwendet dadurch, dass das Array dauernd neu definiert wird.

  • Hi progandy,

    Danke für den Tipp. Habs gleich ausprobiert mit ca. 7000 Dateien, aber hier schleicht sich ein Fehler ein.

    Ab der Zeile 3999 wird die Col0 und Col1 in die Row geschrieben.

    [3997] 12345678911.txt 20071121073054
    [3998] 12345678911.txt 20071121073054
    [3999]|12345678911.txt|20071121073054


    Seltsam....

  • Ist das nur im Array-Display oder auch im array selbst so? Das könnte an den großen Mengen liegen, dass die ListView überfordert ist.

    • Offizieller Beitrag

    Hallo,

    das ist ein Fehler in _ArrayDisplay, bei der Umstellung auf die neue UDF hat sich da ein Bug eingeschlichen. ListView hat mit der Menge kein Problem!