WriteFile / WriteFileIf / WriteFileStart / WriteFileEnd

WriteFile (clip, string filename, string expression1, ... , string expression16, bool "append", bool "flush")
WriteFileIf (clip, string filename, string expression1, ... , string expression16, bool "append", bool "flush")
WriteFileStart (clip, string filename, string expression1, ... , string expression16, bool "append")
WriteFileEnd (clip, string filename, string expression1, ... , string expression16, bool "append")

WriteFile  vyhodnocuje výraz   expressionN , převádí výsledek na řetězec a vloží ho do souboru.

"Run-time" proměnná current_frame se nastavuje tak, že ji použijete ve výrazu "expression"
(pracuje to podobně jako ScriptClip, pro více podrobností se podívejte do jeho dokumentace).
current_frame je nastaven na -1 když je skript načten a na -2 když je skript zavřen.

WriteFile  vyhodnocuje výrazy ''expression'' a generuje výstup do každého snímku. WriteFileIf je podobný, ale generuje výstup jen když je první výraz true. V obou případech se při otvírání nebo zavírání skriptu žádné výstupy negenerují. Všimněte si, že protože je výstup produkován jen pro ''rendrované'' snímky, nebude žádný výstup na žádných snímcích, pokud výsledek filtru není použit v odvození finálního výsledku skriptu.

WriteFileStart a WriteFileEnd generují výstup pouze u otvíraného nebo zavíraného skriptu, neprovádí nic se žádnými snímky. V obou případech jsou výrazy ''expression'' vyhodnocovány přesně jednou, na místě filtru ve skriptu.

Když je   append = true , pak bude výsledek připojen k existujícímu souboru.
Když je  flush = true , pak je soubor zavřen a znovu otevřen po každé operaci, takže můžete ihned vidět výsledky (může to být pomalejší).
Pro  WriteFileStart a WriteFileEnd  je flush  vždy true .
Výchozí nastavení append je vždy true , kromě WriteFileStart (zde je false).

Použití se nejlépe vysvětlí na několika jednoduchých příkladech:

filename = "c:\myprojects\output.txt"
# vytvoříme zkušební video
Version()

# výrazem je zde pouze proměnná, která je vyhodnocena a vložena do souboru
# dostanete soubor s číslem snímku v každém řádku
WriteFile(filename, "current_frame")

# tento řádek je napsán při otevření skriptu
WriteFileStart(filename, """ "Toto je zahlavi" """)

# a tento, když je skript zavírán
WriteFileEnd(filename, """ "Nyni byl skript ukoncen" """)

Podívejte se jak můžete použít trojité uvozovky pro napsání řetězce uvnitř řetězce!

Pokud výraz nemůže být vyhodnocen, zobrazí se chybová zpráva.
V tomto případě nastane, že se u výrazu If ve funkci  WriteFileIf  předpokládá hodnota true.

# povede ke sdělení "I don't know what "toto" means"
WriteFile(filename, "toto je nesmysl")

Jsou i jednodušší způsoby jak zapsat čísla snímků do souboru, ALE:

... na tomto příkladu vidíte jak použít  vyhodnocovací funkce ("runtime functions") spolu s FrameEvaluate:

# vytvoří zkušební video pro obdržení různých snímků
Version.FadeIn(50).ConvertToYV12

# toto natiskne číslo snímku, dvojtečka ":" a průměrný jas (luma) tohoto snímku
colon = ": "
WriteFile("F:\text.log", "current_frame", "colon", "AverageLuma")

Nebo můžete natisknout aktuální čas:

# vytvoří zkušební video
Version.FadeIn(50).ConvertToYV12

# toto natiskne číslo snímku, aktuální čas a průměrný jas (luma)tohoto snímku
# trojité uvozovky jsou nutné pro vložení uvozovek místo řetězce
WriteFile(last, filename, "current_frame", """ time(" %H:%M:%S") """, "AverageLuma")

Více příkladů:

Ve  WriteFileIf je PRVNÍ výraz předpokládán logický (true nebo false).
Pouze pokud je TRUE , tak budou další výrazy vyhodnocovány a řádky tištěny.
(Pamatujte: && je AND, || je OR, ==  je EQUAL, !=  je NOT EQUAL)
Způsob jakým můžete zcela vynechat řádky ve výstupním souboru je:

# vytvoří zkušební video pro obdržení různých snímků
Version.FadeIn(50).ConvertToYV12

# toto natiskne číslo snímku, ale jen u snímků kde AverageLuma je mezi 30 a 60
WriteFileIf(last, filename, "(AverageLuma>30) && (AverageLuma<60)", "current_frame", """ ":" """, "AverageLuma")

$English Date: 2008/12/21 09:23:02 $

Český překlad:12.2.2009