- •Начало работы в среде разработчика FoxPro
- •Константы и переменные
- •Примеры
- •Примеры
- •Примеры
- •Комментарии
- •Процедуры и функции
- •Примеры:
- •Индексы массива
- •Примеры
- •Примеры
- •Примеры
- •2. Считывание информации из файла.
- •3. Перемещение по файлу
- •Примеры
- •Примеры
- •Примеры
- •Примеры
- •Примеры
- •Примеры
- •Задание
- •Примеры
- •Задание
- •Графические функции
- •Шрифтовые свойства
- •Метод line
- •Метод box
- •Метод Circle
- •Функции даты и времени
- •Use [файл | ?] [in рабочаяОбласть] [again] [alias Псевдоним] [exclusive | shared] [noupdate]
- •Добавление и изменение значений полей
- •Относительное перемещение:
- •Контрольные работы
Задание
Создайте в своей директории файл mycopy.prg наберите текст процедуры (или скопируйте) и тщательно прокомментируйте каждый шаг программы. Далее проведите несколько тестовых запусков теперь уже вашей функции копирования файлов и убедитесь, что она устойчиво работает в ситуациях:
– когда вы не указали параметров при вызове этой функции: =mycopy();
– когда вы указали неверное число параметров: =mycopy('f2');
– когда вы указали параметры не тех типов;
– когда вы указали имя несуществующего файла-источника;
– когда вы выбрали в качестве файла-цели уже существующий файл;
– когда вы вызвали функцию с правильными параметрами.
2. Функция, возвращающая строку из данного файла по ее номеру
Назовем эту функцию - str_from и, соответственно, файл с функцией str_from.prg. У функции должно быть два параметра - имя файла и номер строки. Эта функция должна работать примерно по такому сценарию:
1. Проверить число передаваемых параметров, если число параметров меньше двух - выдать сообщение о том, как правильно вызывать функцию и завершить работу и вернуть пустую строку.
2. Проверить тип параметров, если тип первого не текст или тип второго не число - выдать сообщение о том, как правильно вызывать функцию и завершить работу и вернуть пустую строку.
3. Открыть файл, если файл не открывается - выдать сообщение, завершиться и вернуть пустую строку.
4. Задать номер текущей строки равным нулю.
5. Считать строку из файла и увеличить номер текущей строки на единицу.
6. Если при считывании строк обнаружится конец файла - завершить работу и вернуть пустую строку.
7. Как только номер считанной строки будет равен второму параметру - завершить работу и вернуть текущую строку.
8. Если номер считанной строки не равен второму параметру - повторить с пункта e).
Примеры
function str_from
parameter file1,n
set talk off
do case
case parameters() <> 2
clear
? 'Функция возвращает из файла file1 строку с номером n1'
? 's=str_from(file1, n1)'
? 'Например: ? str_from("test.txt",4)'
return ''
case type("file1")<> "C"
clear
? 'Тип первого параметра не строка'
? 'Функция возвращает из файла file1 строку с номером n1'
? 's=str_from(file1, n1)'
? 'Например: ? str_from("test.txt",4)'
return ''
case type("n") <> "N"
clear
? 'Тип второго параметра не число'
? 'Функция возвращает из файла file1 строку с номером n1'
? 's=str_from(file1, n1)'
? 'Например: ? str_from("test.txt",4)'
return ''
endcase
nf = fopen(file1)
if nf < 0
? 'Файл '+ file1 + ' не открывается'
clear all
return ''
endif
n1=0
s=''
do while not feof(nf)
n1 = n1+1
s = fgets(nf)
if n1 = n
=fclose(nf)
return s
endif
enddo
? 'Достигнут конец файла '+file1
? 'В нем всего '+ alltrim(str(n1))+' строк'
=fclose(nf)
return ''
Вызывать данную функцию можно обычным образом из командного окна или из другой программы или процедуры.
Задание
Создайте в своей директории файл str_from.prg наберите текст процедуры (или скопируйте) и тщательно прокомментируйте каждый шаг программы. Далее проведите несколько тестовых запусков теперь уже вашей функции копирования файлов и убедитесь, что она устойчиво работает в ситуациях:
– когда вы не указали параметров при вызове этой функции s=str_from();
– когда вы указали неверное число параметров s=str_from('f2');
– когда вы указали параметры не тех типов s=str_from('rrr','444');
– когда вы указали имя несуществующего файла-источника;
– когда вы указали номер не существующей строки;
– когда вы вызвали функцию с правильными параметрами.