TXT zusammen mit Fehler

  • Hi,
    ich möchte gerne 100 und mehr txt Dateien mit jeweils 30000Zeilen zu einer machen. Soweit gut bis zu dieser Fehlermeldung

    C:\Programme\AutoIt3\Include\zum testen.au3 (50) : ==> Unable to open file, the maximum number of open files has been exceeded.:
    FileWrite($sammlung, FileRead(FileOpen("C:\Test" & "\" & $FileList[$i], 0)))

    wie kann ich das Ändern?

    Taucher

    Spoiler anzeigen
    [autoit]


    #include'file.au3'
    #include'Array.au3'
    #include'Date.au3'
    #include'String'
    zusammen()
    Func _zusammen()
    Global $FileList = _FileListToArray("C:\test\", "*.txt", 1) ; Dateiende wählen
    _ArrayDisplay($FileList, "")
    ;
    Global $sammlung = FileOpen("C:\Test" & "\" & _Now() & ".txt", 1);Datei zum schreiben
    ;
    For $i = 1 To UBound($FileList) - 1
    FileWrite($sammlung, FileRead(FileOpen("C:\Adtg\Test" & "\" & $FileList[$i], 0)))
    sleep(2500)
    FileClose($sammlung)
    sleep(2500)
    Next
    EndFunc ;==>_zusammen

    [/autoit]

    :P Streite nie mit einem Idioten
    Erst zieht er dich auf sein Niveau herunter und schlägt dich dort mit seiner Erfahrung :D

    Einmal editiert, zuletzt von taucher_2006 (12. Januar 2008 um 17:00)

  • hi,

    danke erstmal aber ich bekomme auch weiterhin die Fehlermeldung
    ?( Taucher

    Spoiler anzeigen
    [autoit]

    Func _zusammen()
    Global $FileList = _FileListToArray("C:\test\", "*.txt", 1) ; Dateiende wählen
    ; X:\xtraconnect Account 2\reports\cdr\Voice\2007\12 2007
    _ArrayDisplay($FileList, "")
    ;
    Global $sammlung = FileOpen("C:\Test" & "\" & _Now() & ".txt", 1);Datei zum schreiben
    ;
    For $i = 1 To UBound($FileList) - 1
    FileWrite($sammlung, FileRead(FileOpen("C:\Test" & "\" & $FileList[$i], 0)))
    Sleep(2500)
    FileClose($FileList[$i])
    Next

    EndFunc

    [/autoit]

    :P Streite nie mit einem Idioten
    Erst zieht er dich auf sein Niveau herunter und schlägt dich dort mit seiner Erfahrung :D

  • lass doch einfach Open und close weg? einfach mal testen:

    [autoit]

    Func _zusammen()
    Global $FileList = _FileListToArray("C:\test\", "*.txt", 1) ; Dateiende wählen
    ; X:\xtraconnect Account 2\reports\cdr\Voice\2007\12 2007
    _ArrayDisplay($FileList, "")
    ;
    Global $sammlung = "C:\Test" & "\" & _Now() & ".txt" ;Datei zum schreiben
    ;
    For $i = 1 To UBound($FileList) - 1
    FileWrite($sammlung, FileRead("C:\Test" & "\" & $FileList[$i])
    Sleep(2500)
    Next

    EndFunc

    [/autoit]
    • Offizieller Beitrag

    Hallo

    FileWrite ohne FileOpen hWnd öffnet und schließt die Datei automatisch.
    Für FileClose brauchst du rückgabe wert von FileOpen, nicht einfach nur den Dateinamen.

    Spoiler anzeigen
    [autoit]

    Func _zusammen()
    Global $FileList = _FileListToArray("C:\test\", "*.txt", 1) ; Dateiende wählen
    ; X:\xtraconnect Account 2\reports\cdr\Voice\2007\12 2007
    _ArrayDisplay($FileList, "")
    ;
    Global $sammlung = FileOpen("C:\Test" & "\" & _Now() & ".txt", 1);Datei zum schreiben
    ;
    For $i = 1 To UBound($FileList) - 1
    FileWrite($sammlung, FileRead("C:\Test" & "\" & $FileList[$i]))
    Sleep(2500)
    Next
    FileClose($sammlung)

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

    EndFunc ;==>_zusammen

    [/autoit]

    Mfg Spider

    Edit: Argh, Carsten war etwas schneller^^

  • hi,

    soweit gut ohne Fehlermeldung. Nun ist die Datei aber leer.

    Taucher

    :P Streite nie mit einem Idioten
    Erst zieht er dich auf sein Niveau herunter und schlägt dich dort mit seiner Erfahrung :D

  • so, ich hab dir mal ein vollständiges script geschrieben, das funktioniert.

    Spoiler anzeigen
    [autoit]

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

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

    _zusammen()

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

    Func _zusammen()
    Global $filelist = _FileListtoArray("C:\Test\", "*.txt");Ordner in dem die ganzen .txt Dateien enthalten sind
    _ArrayDisplay($filelist)
    Global $sammlung = "C:\Test\" & _Now() & ".txt"
    _FileCreate($sammlung);Datei in der die anderen verbunden werden

    For $i = 1 To UBound($filelist)
    FileWrite($sammlung, FileRead($filelist[$i] & ".txt") & @CRLF)
    sleep(1000)
    Next
    EndFunc

    [/autoit]

    ich hoffe es funktioniert so wie du es dir gedacht hast.

  • hi,

    ja auch bei deinem Script bekomme ich
    C:\Programme\AutoIt3\Include\zum testen.au3 (75) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
    FileWrite($sammlung, FileRead($FileList[$i] & ".cdr") & @CRLF)
    FileWrite($sammlung, FileRead(^ ERROR
    Wie müsste es aussehen wenn man das Array in zwei Teile zerlegt und nach einander einliest. Auch habe ich versuch wie von Mega beschrieben die Dateien zu schliessen. Auch das möchte nicht gehen. Was kann ich noch tun. Möchte ungerne auf den Dos Copy Befehl zurückgreifen.
    Taucher :(

    :P Streite nie mit einem Idioten
    Erst zieht er dich auf sein Niveau herunter und schlägt dich dort mit seiner Erfahrung :D

    • Offizieller Beitrag

    Versuch's mal hiermit:

    [autoit]


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

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

    _zusammen()

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

    Func _zusammen()
    Local $filelist = _FileListToArray("C:\Test\", "*.txt"); Ordner in dem die ganzen .txt Dateien enthalten sind
    If IsArray($filelist) Then
    Local $sammlung = "C:\Test\" & _Now() & ".txt"
    $destfile = FileOpen($sammlung, 10); Datei in der die anderen verbunden werden
    If $destfile <> -1 Then
    For $i = 1 To $filelist[0]
    $temp = FileOpen($filelist[$i], 0)
    If $temp <> -1 Then
    FileWrite($destfile, FileRead($temp & ".txt") & @CRLF)
    FileClose($temp)
    EndIf
    Next
    FileClose($destfile)
    EndIf
    EndIf
    EndFunc

    [/autoit]
  • hi Oscar

    irgendwie stehe ich auf dem Schlauch. Habe eine MSGBOX eingebaut um zu sehen wo ich stehe. Leider wird nix zusammengeschrieben. Lediglich die Datei wird erstellt mit 0 kb.

    Taucher

    :P Streite nie mit einem Idioten
    Erst zieht er dich auf sein Niveau herunter und schlägt dich dort mit seiner Erfahrung :D

    • Offizieller Beitrag

    Entschuldige! Ich hatte mein Beispiel gar nicht getestet, deswegen sind mir die Fehler gar nicht aufgefallen.

    Hier jetzt eine getestete Version:

    [autoit]


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

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

    _zusammen()

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

    Func _zusammen()
    Local $filelist = _FileListToArray("C:\Test\", "*.txt"); Ordner in dem die ganzen .txt Dateien enthalten sind
    If IsArray($filelist) Then
    Local $sammlung = "C:\Test\" & StringReplace(_Now(), ':', '-') & ".txt"
    $destfile = FileOpen($sammlung, 10); Datei in der die anderen verbunden werden
    If $destfile <> -1 Then
    For $i = 1 To $filelist[0]
    $temp = FileOpen("C:\Test\" & $filelist[$i], 0)
    If $temp <> -1 Then
    FileWrite($destfile, FileRead($temp) & @CRLF)
    FileClose($temp)
    EndIf
    Next
    FileClose($destfile)
    EndIf
    EndIf
    EndFunc

    [/autoit]