## 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` calcola expressionN, converte il risultato in una stringa e mette il risultato in un file.

La variabile "run-time" current_frame è impostata in modo tale che si possa usare in una "expression"
(questo funziona in modo analogo di ScriptClip, per maggiori info guardare la sua documentazione).
current_frame è impostato a -1 quando lo script è caricato e a -2 quando è chiuso.

`WriteFile` genera un output ad ogni frame, `WriteFileIf` genera un output solo se la prima espressione è `true`, non c'è output al momento dell'apertura dello script o alla sua chiusura.
`WriteFileStart` e `WriteFileEnd` generano output solo al momento dell'apertura dello script o alla sua chiusura, nessuna azione ad ogni frame.

Quando append = `true`, il risultato sarà accodato ad un file esistente.
Quando flush = `true`, il file è chiuso e riaperto dopo ogni operazione in modo tale che si può verificare il risultato immediatamente.
Per `WriteFileStart` e `WriteFileEnd` flush è sempre `true`.
Il default per append è sempre `true`, ecceto che per `WriteFileStart` (dove è `false`).

#### Il tutto è meglio spiegato con qualche esempio:

    filename = "c:\myprojects\output.txt"
    # create a test video to get frames
    Version()

    # l' espressione qui è solo una variabile, che è attualizzata ed inserita nel file
    # si ottiene un file col framenumber in ogni linea
    WriteFile(filename, "current_frame")

    # qu è scritta una riga all'apertura dello script
    WriteFileStart(filename, """ "This is the header" """)

    # e qui quando viene chiuso
    WriteFileEnd(filename, """ "Now the script was closed" """)

Osservate come si possono usare le triple-quotes per digitare una stringa in una stringa!

Se l'espressione non può essere attualizzata, al suo posto è scritto un messaggio di errore.
Nel caso succeda ciò con If-expression in `WriteFileIf` il risultato si assume sia `true`.

    # ne risulta un "I don't know what "this" means"
    WriteFile(filename, "this is nonsense")

#### Ci sono modi più facili di scrivere numeri in un file, MA:

... con questo esempio vedete come si usano le "runtime functions" assieme a FrameEvaluate:

    #
    Version.FadeIn(50).ConvertToYV12
    # questo stampa il frame number, un ":" ed il luma medio
    colon = ": "
    WriteFile("F:\text.log", "current_frame", "colon", "AverageLuma")

O forse volete stampato anche l' actual time:

    # create a test video to get different frames
    Version.FadeIn(50).ConvertToYV12
    # questo stampa il frame number, il current time e l'average luma
    # le triple quotes sono necessarie per inserire quotes dentro una stringa
    WriteFile(last, filename, "current_frame", """ time(" %H:%M:%S") """, "AverageLuma")

#### Ulteriori esempi:

In `WriteFileIf` la PRIMA espressione deve essere boolean (true o false).
Solo se essa è TRUE vengono attualizzate le altre espressioni e viene stampata una riga.
(Ricordare: && è AND, || è OR, == è EQUAL, != è NOT EQUAL)

    # create a test video to get different frames
    Version.FadeIn(50).ConvertToYV12
    # questo stampa il frame number, ma solo dei frames in cui AverageLuma è tra 30 e 60
    WriteFileIf(last, filename, "(AverageLuma>30) && (AverageLuma<60)", "current_frame", """ ":" """, "AverageLuma")

`$Date: 2004/10/03 21:26:01 $`