Пример использования функций работы с файлами (TFREAD, TFWRITE и т.п.)Данный скрипт удаляет из произвольного файла строчные комментарии.
#name "Delete comments"
// Инициализируем переменные
$filename = "test.txt"//Имя файла
$i = 1//Индекс строки
WHILE( $i < TFCOUNT($filename) + 1 ) // Выполняем до тех пор, пока не кончатся строки
$string = TFREAD($filename, $i) // Читаем строку $i из файла
$pos = STRPOS($string, "//") // Ищем в строке "//"
IF($pos ! 0) // Если "//" в строке есть
TFDELETE($filename, $i) // Удаляем эту строку
IF($pos ! 1) // Если до "//" вообще есть какой-то текст
TFWRITE($filename, STRCUT2($string, 1, $pos - 1), $i) // То пишем его в файл, на ту же строку, которую удалили.
END_IF
ELSE
INC($i, 1) // Если никаких комментариев в строке нету, то переходим к другой строке
END_IF
END_CYC
HALT // Останавливаем скрипт
Используемые команды:
- TFREAD - Чтение строки из файла
- TFWRITE - Запись строки в файл
- TFDELETE - Удаление строки из файла
- TFCOUNT - Количество строк в файле
- STRPOS - Нахождение строки
- STRCUT2 - Обрезание строки
- INC - Увеличение значения переменной
- WHILE - Цикл
Пояснение некоторых моментов:
WHILE( $i < TFCOUNT($filename) + 1 ) // Выполняем до тех пор, пока не кончатся строки
"+ 1" является заменой выражения меньше-равно. Счет строк в Кликермане начинается с 1 и просто выражение "меньше" обработает все строки кроме последней.
IF($pos ! 0) // Если "//" в строке есть
В Кликермане функция STRPOS возвращает ноль, если ничего не найдено. Счет тут так же начинается с 1.
TFWRITE($filename, STRCUT2($string, 1, $pos - 1), $i) // То пишем его в файл, на ту же строку, которую удалили.
Синтаксис функции STRCUT2 - STRCUT2($string, $begin, $end)
Эта функция в качестве третьего аргумента ($end) принимает номер символа считая с нуля. При этом второй аргумент ($begin) считает от 1.
Т.е. функция STRCUT2("test", 1, 1) вернет "t". Поэтому в данном случае от переменной $pos отнимается 1.
Пример файла test.txt:
tesst
te//
te
te//
//
//
//
foo
foo//
//
bar
ba
//
//
test
bar//foo
foo
Результат работы скрипта:
tesst
te
te
te
foo
foo
bar
ba
test
bar
foo