Помимо файлов настроек cleo поддерживает работу с обычными текстовыми файлами. Это может подойти, например, для создания лога работы скрипта.
Но первым делом мы идем в настройки SannyBuilder. Откройте вкладку "Форматирование" и установите регистр букв на "Как есть". Дело в том, что некоторые параметры, такие как режим открытия файла и идентификаторы должы писаться в нижнем регистре, а компилятор по умолчанию изменяет регистр на верхний, что влечет за собой ошибку в работе скрипта. Что ж, раз теперь все в порядке, можно заняться изучением клео.
Так как мы работаем с текстовым файлом, его для начала нужно открыть. Делается это командой
Код
0A9A: 0@ = openfile "Cleo\file.txt" mode "at"
Первый параметр - переменная. В нее запишется хендл файла. Если не углубляться, это - как бы его номер в игре, он нужен для того, чтобы отличить его от других файлов, ведь мы можем работать сразу с несколькими файлами. Следовательно, если мы используем переменную 0@, то для обращения к этому файлу нужно будет использовать ее же. Второй параметр - путь к файлу, расширение опять таки можно любое. Самый интересный параметр - третий. Состоит он из двух букв. Первая означает режим открытия. Их всего три: r - для чтения, w - для записи, каждый раз при открытии файла его содержимое стирается, a - для записи, прежнее содержимое остается. Вторая буква - тип файла. Их два: t - текстовые файлы, b - бинарные. Отличий, как я понял, между ними нет, но все же рекомендуется использовать текстовый режим, так как могут возникнуть проблемы с двойными переносами срок (спасибо wmysterio).
С открытием файла разобрались, теперь можно и записать в него что-нибудь. Для записи используется следующий опкод:
Код
0AD9: write_formatted_text "Тест %d" in_file 0@ 115
После этого опкода в файл запишется текст "Тест 115". Но я ведь написал %d! Вот тут стоит упомянуть об идентификаторах. Всего их четыре: %d - целое число, %f - дробное число, %c - символ, %s - строка. С числами и строкой все ясно, но что за символ? У каждого символа есть свой номер. Но зачем еще какой-то символ, когда есть два типа чисел, да еще и строки? Предположим, нам нужно вставить символ переноса строки, так как по умолчанию текст в файл записывается без переносов, в одну строку. Тогда в конец текста добавляем %c, а в конец опкода - символ переноса 0xD:
Код
0AD9: write_formatted_text "Тест %d %с" in_file 0@ 115 0xD
Тогда у нас каждая запись будет на своей строчке. Кстати, вместо заранее заданных значений в конце опкода можно использовать переменные.
Теперь стоит рассмотреть считывание строк из файла. Для этого стоит сменить режим открытия файла на rt. Сам опкод для считывание значений из файла:
Код
0ADA: 3@ = scan_file 0@ format "Тест %d %с" 1@ 2@
Как видите, формат считываемой строки должен в точности совпадать с записанным в него текстом, символ переноса строки тоже следует считывать, иначе - считать значения из файла не получится. Если в файле больше одной строки, считывание удобно заключить в цикл. Условием для цикла послужит опкод
Код
0AD6: end_of_file 0@ reached
Он проверяет, достигнут ли конец файла.
После работы с файлом его необходимо закрывать, чтобы другие программы имели к нему доступ: