## 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`