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.
Filmtitel aus txt-formatierter Datei auslesen, auswählen und in String mit Filmtitel speichern
-
- [ gelöst ]
-
ratatoui -
30. Juni 2010 um 14:04 -
Geschlossen -
Erledigt
-
-
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. -
Ich hab erstmal die 2 Skripte in 1 gefasst.
[autoit]#include <ButtonConstants.au3>
[/autoit][autoit][/autoit][autoit]
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <File.au3>
#include <Array.au3>#Region ### START Koda GUI section ###
[/autoit][autoit][/autoit][autoit]
$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 ###While 1
[/autoit][autoit][/autoit][autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button
_CreateFilm(GUICtrlRead($InputName))
EndSwitch
WEndFunc _CreateFilm($Name)
[/autoit]
$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
EndFuncSieht 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
[autoit]
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")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.
[autoit]
Probier das mal:#include <ButtonConstants.au3>
[/autoit][autoit][/autoit][autoit]
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <file.au3>
#include <array.au3>#Region ### START Koda GUI section ###
[/autoit][autoit][/autoit][autoit]
$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 ###While 1
[/autoit][autoit][/autoit][autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button
_CreateFilm(GUICtrlRead($InputName))
EndSwitch
WEndFunc _CreateFilm($Name)
[/autoit]
$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)
EndFuncDie 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.
Aber ich geh mein bestes -
Hi @All,
das Problem mit dem DOS-Copy-Befehl habe ich wie folgt gelöst:
Vielleicht kann es ja jemand brauchen.Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [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 !$vids = "C:\!-trp\Die-Neandertaler\vid.trp" &"+" &"C:\!-trp\Die-Neandertaler\vid.001" &"+"&"C:\!-trp\Die-Neandertaler\vid.002"
[/autoit] [autoit][/autoit] [autoit]
$CreateVideoTS = "Copy /b "&$vids &" " &$TS_Pfad&$TS_Filmname
MsgBox(0,"videocreate",$CreateVideoTS); nur zur Anzeige_RunDOS($CreateVideoTS)
[/autoit] [autoit][/autoit] [autoit]Func _RunDOS($sCommand)
[/autoit]
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
Dank an alle, die mir geholfen haben. -