Работа с текстовыми файлами

Материал из K3-Macro
Макро | Создание макропрограмм | Переменные и выражения | Вызов из ZIP | Типовые параметры | Создание геом. объектов | Буфер обмена | Сценарии | Параметрические библиотеки | Геометрические характеристики | Атрибуты | Структурные объекты | Текстовые файлы | Системные параметры | Работа с файлами | Редактирование объектов | Удаление объектов | Размеры | Штриховка | Объект «Текст» | Камера | Работа с видом | Наборы параметров | Запрос информации у пользователя | Фильтры | Слои | Графы | Универсальные плоские объекты | Функции работы с системой | Функции работы с объектами сцены | Работа с динамически подключаемыми библиотеками | Функции работы с массивами | Работа со строками | Математические функции | Работа с файлами DBF dBASE IV | Унифицированная работа с базами данных | Вычисление выражений | Присвоение имени объекту | Откатка и восстановление команд | Изменение режима трассировки макропрограмм | Вызов внешних приложений и задач | Проверка условия | Проверка типа переменной | Установка статуса вывода сообщений | Выдача системного сообщения | Выбор объектов | Версия системы | Информация о системе | Проверка принадлежности к списку | Помещение строки в буфер команд | Получение метапути | Установка курсора ожидания | Мебельные команды и функции для макропрограммирования‎

Information48.png

Команды работы с текстовыми файлами позволяют читать текст из файла, записывать текст в файл и выполнять различные сервисные функции при работе с текстовыми файлами, как то поиск строки, подсчет количества строк в файле и пр.

Запись в файл

WriteStr [ANSI | UTF8 | UTF16] <Fname> <N1>, <N2>, <N3>, …, <Ni>

Команда WriteStr записывает значения (числовые или строковые) <N1>, <N2>, <N3>, …, <Ni> в файл с именем <Fname>. Данные будут записаны в текстовом виде по одному значению в строке. Если ключ ANSI, UTF8 или UTF16 не задан, то создаваемый файл имеет кодировку ANSI, иначе файл имеет соответствующую ключу кодировку.

Чтение из файла

ReadStr <Fname> <V1>, <V2>, <V3>, …, <Vi>

Команда ReadStr читает значения из текстового файла с автоматическим распознованием кодировки (ANSI, UTF8, UTF16) с именем <Fname> в переменные с именами <V1>, <V2>, <V3>, …, <Vi>. Данные читаются последовательно, начиная с начала файла. Если число переменных для записи результата больше числа строк в файле, оставшиеся переменные не инициализируются. Строка файла может содержать число или имя переменной, значение которой должно быть определено и иметь числовой или строковый тип. В противном случае выдается ошибка.

Функции работы с текстовым файлом

Функции GetCount, GetStr, PutStr, DelStr, FindStr, ReplaceStr служат для работы с текстовыми файлами — чтением и записью информации из файла и в файл, подсчет количества строк в файле и пр. У всех этих функций — первый параметр <Fname> — полное имя текстового файла. Все функции, кроме GetStr, в случае ошибки чтения/записи возвращают число, меньшее нуля.

GetCount

INT GetCount(STRING <Fname>)

Функция возвращает количество строк в файле с именем <Fname>. Если файла с таким именем нет, то возвращается ноль. Файл должен быть текстовым в любой кодировке: ANSI, UTF8, UTF+BOM, Unicode, Unicode big endian.

GetStr

STRING GetStr(STRING <Fname>, INT <Pos>)

Функция читает строку с номером <Pos> из файла c именем <Fname>. Нумерация строк начинается с единицы. Функция возвращает прочитанную строку. Если файла с таким именем не существует или номер строки выходит за диапазон строк в существующем файле, то возвращается пустая строка. Файл должен быть текстовым в любой кодировке: ANSI, UTF8, UTF+BOM, Unicode, Unicode big endian.

PutStr

INT PutStr(STRING <Fname>, STRING <Str>, INT <Pos>[, INT <Coding>])

Функция записывает строку <Str> в файл с именем <Fname>. Если задан не обязательный параметр <Coding>, то он задаёт кодировку создаваемого файла. Если ошибок не было, функция возвращает не ноль. Если файла именем <Fname> не существует, то он создаётся. Если в качестве имени файла задать "stdout", то вывод будет происходить в командное окно программы, а не в текстовый файл.

Параметр <Pos> — задаёт позицию строки в файле:

<Pos> < 0 — из существующего файла удаляются все строки, <Str> записывается первой строкой;

<Pos> = 0 — в конец существующего файла записывается строка <Str>.

<Pos> > 0 — Перед строкой <Pos> существующего файла записывается строка <Str>.

Параметр <Coding> задаёт кодировку создаваемого файла:

1 — ANSI

2 — UTF8

3 — UTF8+BOM

4 — Unicode

5 — Unicode big endian

Если добавляем строку в уже существующий файл, кроме случая <Pos> < 0, то кодировка файла НЕ ИЗМЕНЯЕТСЯ, даже если параметр <Coding> задан.

Если создаётся новый файл, а параметр <Coding> не задан, то будет создаваться текстовый файл в кодировке ANSI

DelStr

INT DelStr(STRING <Fname>, INT <Pos>)

Функция удаляет строку с номером <Pos> из файла с именем <Fname>. Нумерация строк начинается с единицы. Если ошибок не было, функция возвращает ноль. Если номер строки находится вне диапазона строк файла, то операция удаления не производится. После удаления единственной строки из файла последний НЕ УДАЛЯЕТСЯ.

FindString

INT FindString(STRING <Fname>, STRING <String>, INT <Pos>, LOGICAL <Usecase>)

Функция определяет, есть ли в файле с именем <Fname> строка <String>. Поиск осуществляется, начиная со строки номер <Pos>. Нумерация строк начинается с единицы. Параметр <Usecase> определяет учёт регистра при поиске:

0 — не учитывать регистр;
1 — учитывать регистр.

Функция возвращает номер первой строки файла, которая содержит строку <String>. Если строка не найдена, функция возвращает ноль.

FindStr

INT FindStr(STRING <Fname>, STRING <Substring>, INT <Pos>, LOGICAL <Usecase>)

Функция определяет, есть ли в файле с именем <Fname> в строке с номером <Pos> подстрока <Substring>. Нумерация строк начинается с единицы. Параметр <Usecase> определяет учёт регистра при поиске:

0 — не учитывать регистр;
1 — учитывать регистр.

Функция возвращает номер символа начала подстроки в строке. Нумерация символов в строке начинается с единицы. Если подстрока не найдена, функция возвращает ноль.

FindStrN

INT FindStrN(STRING <Fname>, STRING <Substring>, INT <Pos>, INT <From>, LOGICAL <Usecase>)

Функция определяет, есть ли в файле с именем <Fname> в строке с номером <Pos> подстрока <Substring>. Поиск начинает с позиции <From>. Параметр <Usecase> определяет учёт регистра при поиске:

0 — не учитывать регистр;
1 — учитывать регистр.

Функция возвращает номер символа начала подстроки в строке. Нумерация символов в строке начинается с единицы. Если подстрока не найдена, функция возвращает ноль.

ReplaceStr

INT ReplaceStr(STRING <Fname>, STRING <Str>, INT <Pos>)

Функция заменяет в файле с именем <Fname> строку с номером <Pos> на строку <Str>.

Нумерация строк начинается с единицы. Если номер строки находится вне диапазона строк файла, то операция замены не производится. Если ошибок не было, функция возвращает ноль.

K3.png

Пример на макроязыке к3:

fn="a.txt"

=PutStr(fn,"Строка № 1",-1) // Записываем первую строку в новый файл
0

=PutStr(fn,"Строка № 3",0) // Дописываем строку в конец файла
0

=PutStr(fn,"Строка № 2",2) // Вставляем новую строку перед 2-й строкой
0

=GetCount(fn)       // В файле 3 строки
3

=GetStr(fn,2)       // Содержимое второй строки
"Строка № 2"

=ReplaceStr(fn,"Новая строка 2",2)  // Заменяем вторую строку
0

=GetStr(fn,2)            // Содержимое второй строки
"Новая строка 2"

=FindStr(fn,"вая",2,0) // Есть ли в строке 2 подстрока "вая"?
           // Да, начинается с 3-го символа
3

=DelStr(fn,2)     // Удаляем вторую строку
0

=FindStr(fn,"вая",2,0) // Есть ли в строке 2 подстрока "вая"? Нет
0

Макро | Создание макропрограмм | Переменные и выражения | Вызов из ZIP | Типовые параметры | Создание геом. объектов | Буфер обмена | Сценарии | Параметрические библиотеки | Геометрические характеристики | Атрибуты | Структурные объекты | Текстовые файлы | Системные параметры | Работа с файлами | Редактирование объектов | Удаление объектов | Размеры | Штриховка | Объект «Текст» | Камера | Работа с видом | Наборы параметров | Запрос информации у пользователя | Фильтры | Слои | Графы | Универсальные плоские объекты | Функции работы с системой | Функции работы с объектами сцены | Работа с динамически подключаемыми библиотеками | Функции работы с массивами | Работа со строками | Математические функции | Работа с файлами DBF dBASE IV | Унифицированная работа с базами данных | Вычисление выражений | Присвоение имени объекту | Откатка и восстановление команд | Изменение режима трассировки макропрограмм | Вызов внешних приложений и задач | Проверка условия | Проверка типа переменной | Установка статуса вывода сообщений | Выдача системного сообщения | Выбор объектов | Версия системы | Информация о системе | Проверка принадлежности к списку | Помещение строки в буфер команд | Получение метапути | Установка курсора ожидания | Мебельные команды и функции для макропрограммирования‎