Missing subscript dimensions in "Dim" statement?! :O

  • Hallo,

    ich bekomme leider einfach nicht raus wo mein Fehler bei dieser Schleife hängt, vielleicht hat jemand von euch eine Ahnung. :o

    [autoit]

    #include #include
    $file = _FileListToArray(@DesktopDir)

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

    For $i = 1 to _ArrayMax($file) Step 1 If StringInStr($file[$i],".txt") <> 0 Then Dim $count _FileReadToArray($file[$i],$count)Dim $dis[$i] = $count[0]Endif Next
    _ArrayDisplay($dis)

    [/autoit]


    Gruß Bing.

    Einmal editiert, zuletzt von bingbongman (19. Mai 2009 um 07:31)

  • Ich versteh immer noch nicht warum ich die Formatierung hier immer versaue. Vielleicht liegt´s an Chrome. :o

    Also erst will ich gucken ob die Datei eine .txt Datei ist, wenn ja will ich, den Inhalt der Datei in einem Array speichern und dann die $count[0] davon auslesen, um zu erfahren wie viele Zeilen die Datei hat. Und dann wollt ich die Anzahl der Zeilen in ein weiteres Array speichern ($dis[$i]), aber das scheint irgendwie nicht zu klappen. :(

    Hab die Datei nochmal angehängt, zum besser Lesen. :)

    autoit.de/wcf/attachment/4814/

    2 Mal editiert, zuletzt von bingbongman (18. Mai 2009 um 22:01)

    • Offizieller Beitrag

    Wenn Du sowieso nur die Textdateien haben willst, kannst Du doch gleich den Dateifilter entsprechend anpassen: "*.txt"

    Ich habe Dein Script mal entsprechend angepasst:

    Spoiler anzeigen
    [autoit]


    #include <File.au3>
    #include <Array.au3>

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

    While 1

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

    HotKeySet("{F1}", "open")
    HotKeySet("{ESC}", "esc")

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

    WEnd

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

    Func open()
    $open = FileSelectFolder("Choose a folder", "", 0, @ScriptDir)
    If @error Then Return ; Wenn der Benutzer auf "Abbrechen" geklickt hat, dann Funktion verlassen
    $aFiles = FileFindRecursive($open, "*.txt", 1, 1) ; Alle Dateien, mit der Endung ".txt" einlesen
    If $aFiles[0] = 1 Then Return ; Wenn keine Datei gefunden wurde, dann Funktion verlassen
    Dim $aLines[$aFiles[0] + 1][2] = [[$aFiles[0],'']] ; Ein 2D-Array erstellen in der Größe von $aFiles[0] (enthält Anzahl der gefundenen Dateien)
    For $i = 1 To $aFiles[0] ; Schleife, um alle gefundenen Dateien durchzugehen
    $aLines[$i][0] = $aFiles[$i] ; den Dateinamen (+Pfad) in das erste Feld des 2D-Array übernehmen
    $aLines[$i][1] = _FileCountLines($aFiles[$i]) ; die Anzahl der Zeilen der Datei in das zweite Feld des 2D-Array
    Next
    _ArrayDisplay($aLines) ; Array anzeigen
    EndFunc ;==>open

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

    Func esc()
    Exit
    EndFunc ;==>esc

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

    ;===============================================================================
    ; Name: FileFindRecursive
    ; Description: Sucht rekursiv nach Dateien und Ordnern
    ; Parameter(s): $szStartPath = Path ab dem gesucht werden soll
    ; $szFileName = Datei nach der gesucht werden soll
    ; $iFlag (optional) = Gibt an was zurückgegeben werden soll
    ; 0 = Dateien und Ordner (default)
    ; 1 = nur Dateien
    ; 2 = nur Ordner (ignoriert $szFileName)
    ; $iRetFormat (optional) = Rückgabeformat
    ; 0 = als String (default)
    ; 1 = als Array
    ; $szDelim (optional) = Trennzeichen wenn $iRetFormat = 0 (@CRLF ist default)
    ; Requirement(s): keine
    ; Return Value(s): bei Erfolg: Ergebnis als String oder Array
    ; bei Fehler:
    ; Author(s): bernd670
    ;
    ;===============================================================================
    Func FileFindRecursive($szStartPath, $szFileName, $iFlag = 0, $iRetFormat = 0, $szDelim = @CRLF)
    Local $hFF, $szFindName, $szRetValue = ""

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

    If $iFlag = Default Then $iFlag = 0
    If $iRetFormat = Default Then $iRetFormat = 0
    If $szDelim = Default Then $szDelim = @CRLF

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

    If StringRight($szStartPath, 1) <> "\" Then $szStartPath &= "\"

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

    If $iFlag < 2 Then
    $hFF = FileFindFirstFile($szStartPath & $szFileName)

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

    If $hFF <> -1 Then
    While True
    $szFindName = FileFindNextFile($hFF)
    If @error Then
    FileClose($hFF)
    ExitLoop
    EndIf
    If $szRetValue <> "" Then $szRetValue &= $szDelim
    $szRetValue &= $szStartPath & $szFindName
    WEnd
    EndIf
    EndIf
    $hFF = FileFindFirstFile($szStartPath & "*.*")

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

    If $hFF = -1 Then Return $szRetValue

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

    While True
    $szFindName = FileFindNextFile($hFF)
    If @error Then
    FileClose($hFF)
    ExitLoop
    EndIf

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

    If StringInStr(FileGetAttrib($szStartPath & $szFindName), "d") Then
    If ($szRetValue <> "") And (StringRight($szRetValue, StringLen($szDelim)) <> $szDelim) Then $szRetValue &= $szDelim
    If ($iFlag = 0) Or ($iFlag = 2) Then $szRetValue &= $szStartPath & $szFindName & "\" & $szDelim
    $szRetValue &= FileFindRecursive($szStartPath & $szFindName & "\", $szFileName, $iFlag, 0, $szDelim)
    EndIf
    WEnd

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

    If $iRetFormat = 0 Then
    Return $szRetValue
    Else
    Return StringSplit(StringTrimRight($szRetValue, StringLen($szDelim)), $szDelim, 1)
    EndIf
    EndFunc ;==>FileFindRecursive

    [/autoit]


    Jetzt hast Du ein 2D-Array mit den Dateinamen und der Anzahl der Zeilen jeder Datei.

  • Dankeschön Oscar, ich habe das Problem gestern jedoch selbst schon gelöscht (Siehe Scripte). :o
    Ttrotzdem vielen dank für deine Mühe und Arbeit. :)

  • dann solltest du vielleicht einfach deinen thread auf "gelöst" setzen, damit sich keiner mehr unnötig arbeit damit macht...

  • dann solltest du vielleicht einfach deinen thread auf "gelöst" setzen, damit sich keiner mehr unnötig arbeit damit macht...

    Sorry, gestern Abend ging´s nicht mehr. :o