## 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` вычисляет выражения expressionN, превращает результат в строку и записывает её в файл.

Переменная current_frame устанавливается при вычислении выражения равной номеру текущего кадра
(аналогично работает ScriptClip, за подробностями см. эту документацию).
current_frame равна -1 при загрузке скрипта и -2 при закрытии скрипта.

`WriteFile` выдаёт данные для каждого кадра, обрабатываемого фильтром. `WriteFileIf` действует подобно, но выдаёт их только если первое выражение expression1 = `true`. В обоих случаях при открытии и закрытии скрипта данные не выдаются. Заметьте, что так как вывод произвотится только для "обрабатываемых" кадров, то вывода не будет, если результат фильтра не использется для получения конечного результата скрипта.
`WriteFileStart` and `WriteFileEnd` выдают данные только при открытии или закрытии скрипта, не делая никаких действий на каждый кадр. В обоих случаях выражение вычисляется только однажды, в месте расположения фильтра в скрипте.

Если append = `true`, выдаваемая строка будет дописываться к существующему файлу.
Если flush = `true`, файл закрывается и снова открывается после каждой записи, т.о. вы можете немедленно видеть результаты (может замедлять работу).
Для фильтров `WriteFileStart` и `WriteFileEnd` flush всегда `true`.
По умолчанию append = `true` для всех фильтров группы, кроме `WriteFileStart` (для него `false`).

#### Работу фильтров лучше пояснить на простых примерах:

    filename = "c:\myprojects\output.txt"
    # создаём исходный клип
    Version()

    # здесь 'выражение' – это только переменная, вычисляемая на каждом кадре
    # и записываемая в файл. Файл будет содержать номера кадров на каждой строке.
    WriteFile(filename, "current_frame")

    # эта строка записывается при открытии скрипта
    WriteFileStart(filename, """ "Заголовок файла" """)

    # а эта – при закрытии
    WriteFileEnd(filename, """ "Скрипт закончил работу" """)

Вы можете использовать тройные кавычки, чтобы поместить строку внутрь строки.

Если выражение не может быть вычислено, вместо него записывается сообщение об ошибке.
В этом случае в функции `WriteFileIf` результат считается истинным, т.е. ошибка всегда записывается.

    # выдаст сообщение "I don't know what "this" means"
    WriteFile(filename, "this is фуфло")

#### Есть и более простые способы записать номера кадров в файл, однако:

... этот пример показывает, как использовать вычисляемую ("runtime") функцию вместе с FrameEvaluate:

    # создаёт исходный клип
    Version.FadeIn(50).ConvertToYV12

    # печатает номер кадра, двоеточие и среднюю яркость кадра.
    colon = ": "
    WriteFile("F:\text.log", "current_frame", "colon", "AverageLuma")

Можно также напечатать и текущее время:

    # создаём исходный клип
    Version.FadeIn(50).ConvertToYV12

    # печатает номер кадра, текущее время и среднюю яркость кадра
    # тройные кавычки нужны для того, чтобы поместить строку внутрь строки
    WriteFile(last, filename, "current_frame", """ time(" %H:%M:%S") """, "AverageLuma")

#### Ещё примеры:

В функции `WriteFileIf` первое выражение должно выдавать логическое значение (true или false).
Только если оно даёт TRUE, вычисляются остальные выражения и печатается строка.
(Напоминаю: && – логическое "И", || – логическое "ИЛИ", == – равно, != – не равно)
С помощью этой функции можно пропускать строки в выходном файле.

    # создаём исходный клип
    Version.FadeIn(50).ConvertToYV12

    # печатает номер кадра только для тех кадров, средняя яркость которых лежит между 30 и 60
    WriteFileIf(last, filename, "(AverageLuma>30) && (AverageLuma<60)", "current_frame", """ ":" """, "AverageLuma")

`$English Date: 2008/11/16 13:59:30 $
Русский перевод 18.05.2005 Eugene Vasiliev (eugvas@mccme.ru)`
Обновления 06.12.2008 Fizick