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

  • [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.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 = "D:VM-DAT\TV\TRP-Videos\"&$Name
    $PathFiles = _FileListToArray($Path, "*", 1)
    $Command = "copy /b "
    For $i = 0 to UBound ($PathFiles)-1
    If $i = UBound ($PathFiles)-1 Then
    $Command&=$PathFiles[$i]&" "
    Else
    $Command&=$PathFiles[$i]&"+"
    EndIf
    Next
    $Command &= "Z:\!-TS\"&$Name&".ts" ;Pfad wo es hinsoll
    Run ($Command)
    EndFunc

    [/autoit]

    Ich habe das nur so aus dem Kopf geschrieben!
    Also kann es sein das es nicht funktioniert.
    Aber ist auch nur das erste Gerüst.
    Kannst du mir bitte per Mail ein oder 2 .vid Dateien schicken?
    Dann bau ich mir das hier mal nach^^

  • Hi,
    bei einer Aufnahme wird das Video bei 1.540.096 KB (1,46 GByte entspricht etwa 47 min. Laufzeit) automatisch gesplittet (Herstellervorgabe).
    Per Mail kann ich in diesem Umfang die Videodateien nicht schicken.

  • Hier wird's auf jeden Fall Probleme geben.

    [autoit]

    Func _CreateFilm($Name)
    $Path = "D:VM-DAT\TV\TRP-Videos\"&$Name
    $PathFiles = _FileListToArray($Path, "*", 1)
    $Command = "copy /b "

    [/autoit]

    besser :)

    [autoit]

    Func _CreateFilm($Name)
    $Path = "D:\VM-DAT\TV\TRP-Videos\"&$Name
    $PathFiles = _FileListToArray($Path, "*.*", 1)
    $Command = "copy /b "

    [/autoit]
  • Oh danke ! :)
    Das war wohl ein Tippfehler von mir.

    Edit:
    Also natürlich so:

    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.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 = "D:VM-DAT\TV\TRP-Videos\"&$Name
    $PathFiles = _FileListToArray($Path, "*.*", 1)
    $Command = "copy /b "
    For $i = 0 to UBound ($PathFiles)-1
    If $i = UBound ($PathFiles)-1 Then
    $Command&=$PathFiles[$i]&" "
    Else
    $Command&=$PathFiles[$i]&"+"
    EndIf
    Next
    $Command &= "Z:\!-TS\"&$Name&".ts"
    Run ($Command)
    EndFunc

    [/autoit]
  • Hi,
    ich habe das Script soweit getestet und zum Teil ergänzt, dass ich mir den Programmablauf besser angezeigt bekomme (Variableninhalte, und Haltepunkte)

    [autoit]


    ;von PokerFace
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <file.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)
    $Command = "copy /b "
    MsgBox(0,"", $Command) ;nur zur Anzeige
    For $i = 1 to UBound ($PathFiles) - 1
    MsgBox(0,"","For-Schleife") ;nur zur Anzeige
    If $i = UBound ($PathFiles) - 1 Then
    $Command&=$PathFiles[$i]&" "
    MsgBox(0,"",$Command) ;nur zur Anzeige
    Else
    $Command&=$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]

    Alle vid.* Dateien werden eingelesen und als String mit dem Copy /b Befehl erstellt, leider in der falschen Reihenfolge:
    [Blockierte Grafik: http://www.autoit.de/file:///C:/Users/Evolution/Desktop/Reihenfolge%20String%20in%20Schleife.gif](Blöd, kann kein Screenshot einbinden, weiß nicht wie) somit hier in Textform:
    copy /b vid.001+vid.002+vid.trp

    Richtige Reihenfolge müsste immer sein:
    copy /b vid.trp+vid.001+vid.002

    Run wird auch nicht ausgeführt, es passiert nichts.
    Gruß ratatoui

  • vielleicht so:

    Spoiler anzeigen
    [autoit]


    Func _CreateFilm($Name)
    $Path = "C:\!-TRP\"&$Name
    $PathFiles = _FileListToArray($Path, "*.*", 1)
    _ArraySort($PathFiles) ; damit es immer richtig sortiert ist
    $Command = "copy /b "
    MsgBox(0,"", $Command) ;nur zur Anzeige
    $Command&=$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) - 1 Then
    $Command&=$PathFiles[$i]&" "
    MsgBox(0,"",$Command) ;nur zur Anzeige
    Else
    $Command&=$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]
  • Hi latemail,
    danke für deinen Tipp, habe Zeit gebraucht, um zu Testen.
    Habe Änderungen vorgenommen. Nun stimmt der in $Command befindliche String, es wird aber beim Befehl
    run ($Command) nicht ausgeführt.

    Spoiler anzeigen
    [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 = "copy /b "
    MsgBox(0,"", $Command) ;nur zur Anzeige
    $Command&=$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&=$PathFiles[$i]&" "
    MsgBox(0,"",$Command) ;nur zur Anzeige
    Else
    $Command&=$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]
  • Windows 7 ?
    Dann:

    [autoit]

    #requireAdmin

    [/autoit]


    Ganz oben in das Skript schreiben!

    Sehr schön, dass mein Grundgerüst klappt, bis auf die ein - zwei Fehler :love:
    :party:

  • Hi PokerFace,
    danke für deinen Hinweis und dein Engagement.
    Hab´s gleich mal ausprobiert.
    AutoIt läuft bei mir unter Win7-Prof-64-Bit.
    Leider hat dein Tipp keine Auswirkung auf die Kopierfunktion, es wird leider nichts kopiert.

    Ich würde ganz gerne weg von den DOS-Commandos !
    Leider kenne ich mich in AutoIt noch zu wenig aus, als dass ich mir Alternativen entwickeln könnte.

  • Kein Problem.
    Ich helfe gerne ^^

    Ich muss mal deinen Befehl Googlen.
    Vielleicht kann man ja den Befehl "copy /b" in AutoIt umsetzten.

    Ich melde mich, wenn ich Infos hab.

  • Ich hab mal etwas gebastelt.

    [autoit]

    $Name = InputBox ("Dateiname 1", "Bitte den Namen der ersten Datei eingeben:")
    $Name2 = InputBox ("Dateiname 2", "Bitte den Namen der zweiten Datei eingeben:")

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

    $Open = FileOpen ($Name,16)
    $Open2 = FileOpen ($Name2, 16)
    $Inhalt = FileRead ($Open)
    $Inhalt2 = FileRead ($Open2)
    FileClose ($Open)
    FileClose ($Open2)

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

    $Inhalt3 = $Inhalt+$Inhalt2

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

    FileWrite ("Ergebnis.vid", $Inhalt3)

    [/autoit]


    Starte das Skript und geb beide Dateinamen in die Inputboxen ein.
    Bitte MIT Endung (.vid).
    Dann sollte das Skript dir eine Datei erstellen, die beide Dateien "kombiniert".

    Das müsste quasi der Copy /b Befehl sein.

  • Jo, danke...
    werde es gleich testen, aber nicht jetzt.
    Es spielt um 16:00 Argentinien vs Deutschland.
    Das will ich erst in "Ruhe" sehen.
    Viel Spaß beim WM-Spiel.

  • Danke ! :)
    Ich hab es gesehen und bin sowas von begeistert.
    WIR werden Weltmeister. :D

  • Wenn es so kommt, dann fahr ich direkt nach Holland und platzier meinen "Deutschland-Wohnwagen" mitten auf meinen lieblings Campingplatz und schau mir da das Spiel an^^

  • Hi @all,
    ich habe PokerFace FileOpen-script kurz erweitert, damit ich angezeigt bekomme, falls die eingegebene Datei nicht vorhanden sein sollte:

    Spoiler anzeigen
    [autoit]


    #include <File.au3>
    ;------------------vid.trp
    $Name = InputBox ("Dateiname 1", "Bitte den Namen der ersten Datei eingeben:")
    $Open = FileOpen ($Name,16)
    ; Prüfen, ob Datei zum Lesen geöffnet wurde
    If $Open = -1 Then
    MsgBox(0, "Fehler", "Die Datei konnte nicht geöffnet werden.")
    Exit
    EndIf
    FileClose($Open)
    ;------------------vid.001
    $Name2 = InputBox ("Dateiname 2", "Bitte den Namen der zweiten Datei eingeben:")
    $Open2 = FileOpen ($Name2, 16)
    ; Prüfen, ob Datei zum Lesen geöffnet wurde
    If $Open2 = -1 Then
    MsgBox(0, "Fehler", "Die Datei konnte nicht geöffnet werden.")
    Exit
    EndIf
    FileClose($Open2)
    ;------------------
    $Inhalt = FileRead ($Open)
    $Inhalt2 = FileRead ($Open2)
    FileClose ($Open)
    FileClose ($Open2)

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

    $Inhalt3 = $Inhalt+$Inhalt2

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

    FileWrite ("C:\!-trp\Die-Neandertaler\Die-Neandertaler.ts", $Inhalt3)

    [/autoit]


    Für den 1. Dateinamen gebe ich ein: C:\!-trp\Die-Neandertaler\vid.trp
    Für den 2. Dateinamen gebe ich ein: C:\!-trp\Die-Neandertaler\vid.001
    Für die Ausgabedatei: C:\!-trp\Die-Neandertaler\Die-Neandertaler.ts

    Es wird die Ausgabedatei erstellt, doch mit 1KB ist die Datei zu klein.
    Habe sie als txt-Datei eingelesen und siehe da, es steht nur eine Null drin.
    Warum?

  • Ganz einfach:
    Weil du die Datei lesen wolltest, als diese schon geschlossen war ^^
    Bei dir steht nämlich FileRead HINTER FileClose.
    Das ist der Fehler.
    So sollte es gehen:

    [autoit]

    #include <File.au3>
    ;------------------vid.trp
    $Name = InputBox ("Dateiname 1", "Bitte den Namen der ersten Datei eingeben:")
    $Open = FileOpen ($Name,16)
    ; Prüfen, ob Datei zum Lesen geöffnet wurde
    If $Open = -1 Then
    MsgBox(0, "Fehler", "Die Datei konnte nicht geöffnet werden.")
    Exit
    EndIf
    $Inhalt = FileRead ($Open)
    FileClose($Open)
    ;------------------vid.001
    $Name2 = InputBox ("Dateiname 2", "Bitte den Namen der zweiten Datei eingeben:")
    $Open2 = FileOpen ($Name2, 16)
    ; Prüfen, ob Datei zum Lesen geöffnet wurde
    If $Open2 = -1 Then
    MsgBox(0, "Fehler", "Die Datei konnte nicht geöffnet werden.")
    Exit
    EndIf
    $Inhalt2 = FileRead ($Open2)
    FileClose($Open2)
    ;------------------

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

    $Inhalt3 = $Inhalt+$Inhalt2

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

    FileWrite ("C:\!-trp\Die-Neandertaler\Die-Neandertaler.ts", $Inhalt3)

    [/autoit]