Filmtitel aus txt-formatierter Datei auslesen, auswählen und in String mit Filmtitel speichern

  • Hi PokerFace,
    klar, wenn FileClose vor FileRead steht !, Sorry, mein Fehler.
    Habe dann deine Korrektur getestet:
    Die erste Datei vid.trp wird eingelesen. Bis das 2. Inputfenster erscheint dauert es allerdings etwas.
    Die zweite Datei vid.001 wird eingelesen. Dann allerdings erscheint eine Fehlermeldung:
    "Error allocating memory."
    Na ja, immerhin sind beide Dateien zusammen fast 3 GByte groß.
    Da scheint Copy /b anders zu arbeiten.

  • Das es war dauert ist logisch, denn eine große Datei benötigt dementsprechend lange Zeit zum öffnen.
    Weg dem Error muss ich mich mal erkundigen.
    Ich melde mich dann sofort.

    Edit:
    Der Fehler bedeutet, dass Ressourcen nicht ausreichen.
    AutoIt kann maximal mit ca. 2,5 Gb "umgehen".
    Sonst wird das einfach zu viel für das Programm.
    Gibt es eine Möglichkeit die Datei zu splitten? (Vom Receiver aus?)
    Dann könnte man das Maximum der Größe einer Datei zum Beispiel auf 1,5 Gb setzten.
    Dann hätte man zwar mehr Dateien, aber das wäre nicht so schlimm, denn dann würde alles gehen.

    Einmal editiert, zuletzt von PokerFace (4. Juli 2010 um 19:24)

  • Ich hab erstmal die 2 Skripte in 1 gefasst.

    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #include <Array.au3>

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

    #Region ### START Koda GUI section ###
    $Form = GUICreate("Skript für ratatoui", 236, 173, -1, -1)
    $Label = GUICtrlCreateLabel("Ordnername:", 56, 32, 65, 17)
    $InputName = GUICtrlCreateInput("", 56, 56, 121, 21)
    $Button = GUICtrlCreateButton("Film erstellen", 56, 96, 121, 33, $WS_GROUP)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button
    _CreateFilm(GUICtrlRead($InputName))
    EndSwitch
    WEnd

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

    Func _CreateFilm($Name)
    $Path = "C:\!-TRP\"&$Name
    $PathFiles = _FileListToArray($Path, "*.*", 1)
    _ArraySort($PathFiles)
    For $i = 1 to UBound($PathFiles)-1
    $Open = FileOpen ($PathFiles[$i], 16)
    $Content = FileRead($Open)
    FileWrite ("C:\!-TRB\"&$Name&".vid", $Content)
    FileClose ($Open)
    $Open = ""
    $Content = ""
    Next
    EndFunc

    [/autoit]

    Sieht gleich viel schöner aus ^^
    Aber der Fehler sollte immernoch kommen..
    Oder?

  • Hi PokerFace,
    danke für deine Mühe, aber es wird weiterhin nichts kopiert.

    Ich habe mal mit dem Run-Befehl weitergearbeitet. Mit der folgenden Zeile kann ich problemlos die gesplitteten Videodateien
    in eine einzige TS-Datei hintereinander kopieren:

    [autoit]


    Run(@ComSpec & " /c " & "copy /b C:\!-trp\Die-Neandertaler\vid.trp + C:\!-trp\Die-Neandertaler\vid.001 + C:\!-trp\Die-Neandertaler\vid.002 C:\!-trp\Die-Neandertaler\Die-Neandertaler.ts")

    [/autoit]

    Ich muss nur noch herausbekommen, wie ich die notwendigen Ordnerangaben (hier das Beispiel mit
    C:\!-trp\Die-Neandertaler\ ) als String einfügen kann.
    Schönen Abend noch.

  • Ich denke langsam finden wir des Rätsels Lösung.
    Probier das mal:

    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <file.au3>
    #include <array.au3>

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

    #Region ### START Koda GUI section ###
    $Form = GUICreate("Skript für ratatoui", 236, 173, -1, -1)
    $Label = GUICtrlCreateLabel("Ordnername:", 56, 32, 65, 17)
    $InputName = GUICtrlCreateInput("", 56, 56, 121, 21)
    $Button = GUICtrlCreateButton("Film erstellen", 56, 96, 121, 33, $WS_GROUP)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button
    _CreateFilm(GUICtrlRead($InputName))
    EndSwitch
    WEnd

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

    Func _CreateFilm($Name)
    $Path = "C:\!-TRP\"&$Name
    $PathFiles = _FileListToArray($Path, "*.*", 1)
    _ArraySort($PathFiles) ; damit es immer richtig sortiert ist
    $Command = @ComSpec & " /c " & "copy /b "
    MsgBox(0,"", $Command) ;nur zur Anzeige
    $Command&=$Path&"\"&$PathFiles[UBound($PathFiles) - 1]&"+" ; immer letzten Eintrag nehmen -> vid.trp
    MsgBox(0,"", $Command) ;nur zur Anzeige
    For $i = 1 to UBound ($PathFiles) - 2 ; nur bis zum vorletzten Eintrag
    MsgBox(0,"","For-Schleife") ;nur zur Anzeige
    If $i = UBound ($PathFiles) - 2 Then
    $Command&=$Path&"\"&$PathFiles[$i]&" "
    MsgBox(0,"",$Command) ;nur zur Anzeige
    Else
    $Command&=$Path&"\"&$PathFiles[$i]&" + "
    MsgBox(0,"",$Command) ;nur zur Anzeige
    EndIf
    Next
    $Command &= "C:\!-TS\"&$Name&".ts" ;Pfad wo es hinsoll
    MsgBox(0,"",$Command) ;nur zur Anzeige
    Run($Command)
    EndFunc

    [/autoit]

    Die MsgBoxen sollten dir ja sagen, ob alles soweit stimmt.

    Ich würde dir gerne ein fertiges Skript liefern und selbst testen etc. leider hab ich nicht derartige Dateien. 8)
    Aber ich geh mein bestes :D

  • Hi @All,
    das Problem mit dem DOS-Copy-Befehl habe ich wie folgt gelöst:
    Vielleicht kann es ja jemand brauchen.

    Spoiler anzeigen
    [autoit]


    $TS_Pfad = "C:\!-TS\"
    $TS_Filmname = '"Die Neandertaler.ts"'
    ;Die Hochkommata ermöglichen die Erstellung des Dateinamens mit Leerzeichen
    ;Copy leistet dies nicht, es erfolgt ein Abbruch !

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

    $vids = "C:\!-trp\Die-Neandertaler\vid.trp" &"+" &"C:\!-trp\Die-Neandertaler\vid.001" &"+"&"C:\!-trp\Die-Neandertaler\vid.002"
    $CreateVideoTS = "Copy /b "&$vids &" " &$TS_Pfad&$TS_Filmname
    MsgBox(0,"videocreate",$CreateVideoTS); nur zur Anzeige

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

    _RunDOS($CreateVideoTS)

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

    Func _RunDOS($sCommand)
    Local $nResult = RunWait(@ComSpec & " /C " & $sCommand, "", @SW_HIDE)
    MsgBox(0,"_RunDOS","Es wurde folgende TS-Datei erstellt" &@CRLF &$TS_Pfad &@CRLF &$TS_Filmname) ; nur zur Anzeige
    Return SetError(@error, @extended, $nResult)
    EndFunc ;==>_RunDOS

    [/autoit]


    Dank an alle, die mir geholfen haben.