- •Начало работы в среде разработчика FoxPro
- •Константы и переменные
- •Примеры
- •Примеры
- •Примеры
- •Комментарии
- •Процедуры и функции
- •Примеры:
- •Индексы массива
- •Примеры
- •Примеры
- •Примеры
- •2. Считывание информации из файла.
- •3. Перемещение по файлу
- •Примеры
- •Примеры
- •Примеры
- •Примеры
- •Примеры
- •Примеры
- •Задание
- •Примеры
- •Задание
- •Графические функции
- •Шрифтовые свойства
- •Метод line
- •Метод box
- •Метод Circle
- •Функции даты и времени
- •Use [файл | ?] [in рабочаяОбласть] [again] [alias Псевдоним] [exclusive | shared] [noupdate]
- •Добавление и изменение значений полей
- •Относительное перемещение:
- •Контрольные работы
Примеры
Открываем файл в режиме чтение-запись:
nf=fopen('test.txt',2)
Определим текущий размер файла test.txt:
? fseek(nf,0,2)
Результат: 260
Смещаемся в начало файла:
? fseek(nf,0,0)
Записываем в начало файла строку '=======':
? fputs(nf,'=======')
Результат: 9
Общая длина записанной строки в байтах - 9, так как в конце строки записываются спецсимволы CR и LF.
Поскольку первоначальная длина первой строки больше чем длина строки '=======', после записи первая строка разбивается на две.
Определим текущий размер файла test.txt после добавления строки изсеми символов:
? fseek(nf,0,2)
Результат: 260
Таким образом, если строка добавляется в середину файла - его размер не изменяется, просто замещаются старые символы.
Если добавить строку в конец файла, тогда его длина увеличится.
7. Определение конца файла
Функция feof(n1) определяет, установлен ли указатель файла в конце файла.
Параметр n1 - задает номер канала файла, в котором проверяется позиция указателя. В результате выполнения функции возвращается логическое выражение "истина" (.T.), если указатель файла установлен в конце файла или "ложь" (.F.), если указатель файла не находится в конце файла.
Примеры
nf=fopen('test.txt')
Перемещаем указатель на начало файла:
=fseek(nf,0)
? feof(nf)
Результат: .f.
Перемещаем указатель в конец файла, при этом в переменную x запишется длина файла:
x=fseek(nf,0,2)
? x
Результат: 260
? feof(nf)
Результат: .t.
=fclose(nf)
8. Создание файла
Для создания файла применяется функция создания файла nf = fcreate(s1, n1). Она создает новый файл с именем s1 и открывает его с номером nf. Если файл с таким именем уже существует, он перекрывается новым. Если же по каким-либо причинам создать файл нельзя, функция возвращает -1.
В s1 можно задать дисковод и маршрут файла. Если они не заданы, файл создается в директории, принятом по умолчанию. Создаваемому файлу можно назначить атрибуты DOS, для этого предназначен необязательный параметр n1. Hиже приведен список возможных значений этого параметра:
- n1 = 0 - чтение и запись (принимается по умолчанию);
- n1 = 1 - только чтение;
- n1 = 2 - скрытый файл;
- n1 = 3 - только чтение, скрытый файл;
- n1 = 4 - системный файл;
- n1 = 5 - только чтение, системный файл;
- n1 = 6 - системный файл, скрытый файл;
- n1 = 7 - только чтение, скрытый файл, системный файл.
Примеры
Создадим новый файл new1.txt:
newf = fcreate('new1.txt')
Определим размер файла:
s=fseek(newf,0,2)
? s
Результат: 0
Как и должно быть, размер только что открытого файла равен нулю. Запишем в файл текст "Пробный текст" при помощи функции fwrite:
? fwrite(newf,'Пробный текст')
Результат: 13
Эта команда записала в файл 13 символов, но они еще не являются строкой, поскольку не записаны символы CR и LF.
Допишем продолжение первой строки:
? fwrite(newf,' Продолжение первой текстовой строки')
Запишем символы конца строки:
? fwrite(newf,chr(13)+chr(10))
Вторую строку запишем при помощи функции fputs():
? fputs(newf,"Вторая строка текста")
=fclose(newf)
Перед тем, как мы рассмотрим примеры функций и процедур для работы с файлами на низком уровне, полезно познакомиться с еще несколькими очень важными стандартными функциями:
– PARAMETERS()
– TYPE()
Функция PARAMETERS() возвращает числовую величину, определяющую количество параметров, переданных в процедуру. Возвращаемое значение - числовое.
Функция TYPE("e1") проверяет выражение и в результате возвращает одну заглавную букву, которая обозначает тип выражения – e1.
Возможные значения, которые возвращает функция TYPE():
– символьное = C;
– числовое = N;
– дата = D;
– логическое = L;
– неопределенное = U.
Примеры
? TYPE(["Привет"])
Результат: C
s="Привет"
? TYPE("s")
Результат: C
? TYPE("(12*3)+4")
Результат: N
x=204.23
? TYPE("x")
Результат: N
? TYPE ("DATE()")
Результат: D
? TYPE(".F. .OR. .T.")
Результат: L
? TYPE("ANSWER=42")
Результат: U
1. Копирование файла
Процедура копирования файла состоит в том, что предназначенный для копирования файл (источник) открывается в режиме для чтения, создается новый файл в который будет происходить копирование (файл-цель), далее файл-источник считывается построчно (посимвольно) и каждый символ (каждая строка) записывается в файл-цель.
Примеры
function mycopy
parameters file1,file2
close all
set talk off
? 'Процедура копирования файлов'
if parameters() < 2
? 'Вы неправильно вызываете эту функцию'
? 'Использовать ее нужно следующим образом:'
? ' =mycopy(cf1,cf2)'
? ' cf1 - имя файла - источника'
? ' cf2 - имя файла - цели'
return .f.
endif
if type("file1") <> "C"
? 'Первый параметр не строка'
return .f.
endif
if type("file2") <> "C"
? 'Второй параметр не строка'
return .f.
endif
? 'Копируем файл '+ file1
?? ' в файл '+file2
nf1=fopen(file1)
if nf1 < 0
? 'Не могу открыть файл '+file1
return .f.
endif
nf2=fopen(file2)
if nf2 > 0
? 'Файл '+ file2 + ' уже есть на диске!'
=fclose(nf1)
=fclose(nf2)
return .f.
endif
nf2 = fcreate(file2)
do while not feof(nf1)
s=fgets(nf1)
=fputs(nf2,s)
enddo
=fclose(nf1)
=fclose(nf2)
return .t.
Вызывать данную функцию можно обычным образом из командного окна или из другой программы или процедуры.