## 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` avalia expressionN, converte o resultado a uma string e põe o resultado num arquivo.

A variável "run-time" current_frame é fixada de forma a poder usar em uma "expression" (isto trabalha semelhante como com ScriptClip, olhe lá no doc. para mais infos).

current_frame é fixado a -1 quando o escrito estiver carregado e para -2 quando está fechado.

`WriteFile gera saída a cada quadro, WriteFileIf só gera se a primeira expressão for true e nenhuma ao abrir ou fechar.`
`WriteFileStart e WriteFileEnd só gera saída em escrito que abre e fecha, não há nenhuma ação em cada quadro.`

Quando append = `true` o resultado será juntado em qualquer arquivo existente.
Quando flush = `true` o arquivo é fechado e reaberto depois de cada operação, assim você pode ver o resultado imediatamente (isto pode ser mais lento).
Para WriteFileStart e WriteFileEnd flush é sempre true.
O padrão para append é sempre true, com exceção de WriteFileStart (aqui é false).

#### Isto é melhor explicado com alguns exemplos simples:

    filename = "c:\myprojects\output.txt"
    # crie um vídeo de teste para ter quadros
    Version()

    # a expressão aqui é apenas uma variável que é avaliada e posta no arquivo
    # você terá um arquivo com o número de quadro em cada linha
    WriteFile(filename, "current_frame")

    # esta linha é escrita quando o escrito é aberto
    WriteFileStart(filename, """ "Este é o cabeçalho" """)

    # e isto quando o escrito se fechar
    WriteFileEnd(filename, """ "Agora o escrito está fechado" """)

Olhe como você pode usar aspas triplas para digitar uma string dentro de uma string!

Se a expressão não pode ser avaliada, a mensagem de erro é escrita em seu lugar.
No caso de acontecer isso com If-expression em WriteFileIf o resultado é assumido que é true.

    # resultará em "eu não sei o que "isto" significa"
    WriteFile(filename, "isto é tolice")

#### Há modos mais fáceis para escrever números em um arquivo, MAS:

... com este exemplo você pode ver como usar as "runtime functions" com FrameEvaluate:

    # crie um vídeo de teste para obter quadros diferentes
    Version.FadeIn(50).ConvertToYV12

    # isto imprimirá o número do quadro, um ":" e a média luma desse quadro
    colon = ": "
    WriteFile("F:\text.log", "current_frame", "colon", "AverageLuma")

Ou talvez você quer a hora atual também impressa:

    # crie um vídeo de teste para obter quadros diferentes
    Version.FadeIn(50).ConvertToYV12

    # isto imprimirá o número do quadro, a hora atual e a média luma desse quadro
    # as aspas triplas são necessárias para inserir aspas dentro de uma string
    WriteFile(last, filename, "current_frame", """ time(" %H:%M:%S") """, "AverageLuma")

#### Mais exemplos:

É esperado em WriteFileIf que a PRIMEIRA expressão seja boolean (true ou false).

As outras expressões só são avaliadas se é TRUE e então a linha é impressa.

(Lembre-se: && é AND, || é OR, == é EQUAL, != é NOT EQUAL)

Deste modo você pode omitir completamente as linhas do seu arquivo.

    # crie um vídeo de teste para obter quadros diferentes
    Version.FadeIn(50).ConvertToYV12

    # isto imprimirá o número do quadro, mas só onde AverageLuma está entre 30 e 60
    WriteFileIf(last, filename, "(AverageLuma>30) && (AverageLuma<60)", "current_frame", """ ":" """, "AverageLuma")

`$Date: 2006/03/26 18:11:19 $ Portuguese translation by RoLon`