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

Материал из GEOS_WIKI
Перейти к: навигация, поиск

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

Запись в файл

WriteStr <Fname> <N1>, <N2>, <N3>, …, <Ni>

Команда WriteStr записывает числовые данные <N1>, <N2>, <N3>, …, <Ni> в файл с именем <Fname>. Данные будут записаны в текстовом виде по одному числу в строке.

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

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

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

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

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

GetCount

INT GetCount(STRING <Fname>)

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

GetStr

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

Функция читает строку с номером <Pos> из файла c именем <Fname>. Нумерация строк начинается с единицы. Функция возвращает прочитанную строку. Если файла с таким именем не существует или номер строки выходит за диапазон строк в существующем файле, то возвращается пустая строка.

PutStr

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

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

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

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

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

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

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>.

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

Пример:

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