Тема: Чтение и запись данных в файл на Паскаль.
Для чего нам нужно уметь работать с файлами в Паскаль?
А для того, чтобы Вы могли начать самостоятельно решать задачи на портале и зарабатывать рейтинг.
Ранее мы рассмотрели ввод вывод данных в Паскаль. Ввод данных в этом случае осуществлялся вручную, с помощью клавиатуры и результат мы также смотрель сами в окне вывода. Для того чтобы Вам быть увереным в том, что программа написана правильно необходимо протестировать её.
Для того чтобы наша система автоматически тестировала Ваше решение необходимо, ввод и вывод данных осуществлять из текстовых файлов.
Ввод мы будем осуществлять из файла input.txt
Вывод будем производить в файл output.txt
Это не только наш принцип, по такой же схеме тестируются задачи на всех этапах республиканских олимпиад по информатике. Так что это важный момент, который Вам необходимо освоить.
Для того, чтобы организовать ввод данных из файла нам надо:
1. Завести преременную типа текст и переменную в которую будем записывать прочитанное значение.
Var
t:text;
a:integer;
2.
Связать эту текстовую переменную с файлом из которого будет производиться
чтение.
Begin
assign(t,'input.txt');
3.
Открыть файл для чтения.
reset(t);
4. Теперь можно читать данные. Тут нужно понимать и помнить отличия процедуры read, от readln. Про что я? Если в файле данные записаны в одной строке, через пробел, то мы пользуемся все время процедурой read столько раз, сколько чисел нужно прочитать.
Если же строк несколько, то когда доходим до символа стоящего в конце строки, используем readln. В результате чего будет считано последнее число строки и курсор переместится на новую.
read(t,a);
Внимание! Для чтения из файла в скобках необходимо на первом месте указать ту текстовую переменную которую Вы связали с входным файлом, затем список переменных для чтения.
Самой распространенной ошибкой является то что забывают ставить эту переменную (текстовую).
5. Как только мы прочитали все переменные необходимо закрыть файл.
close(t);
Внимание! Процедура close освобождает
переменную t и мы можем её использовать в других целях, например для
вывода данных. Если мы её не закрыли (нужно продолжать чтение), то для вывода
необходимо будет завести еще одну текстовую переменную.
На этом ввод окончен.
Опишем процесс вывода результатов в текстовый файл.
1. Опять как и в случае со вводом, необзодимо связать текстовую переменную с выходным файлом. Только файл уже называется (для нашего портала) output.txt.
assign(t,'output.txt');
2. Затем необходимо создать или перезаписать файл output.txt
rewrite(t);
3. Выводим данные. Не забываем ставить файловую переменную в
начале списка вывода.
write(t,'Вот число из файла input.txt ', a);
4. Как и в предидущем случае после вывода всех данных необходимо
закрыть файл.
close(t);
Запишем программу целиком.
Program Vvod_Vivod;
var
a:longint;
t:text;
Begin
assign(t,'input.txt');
reset(t);
read(t,a);
close(t);
assign (t,'output.txt');
rewrite(t);
write(t,a);
close(t);
End.
Практическое задание к уроку.
Ваша задача сейчас состоит в том, чтобы ввести программу в среде программирования Free Pascal (можно и в ABC Pascal) и запустить ее на исполнение.
Если у Вас появилась ошибка типа: Ошибка ввода/вывода 2: Не удается найти указанный файл (для ABC Pascal) или exited with exitcode=2 (для Free Pascal), создайте в папке где сохранена ваша программа файл input.txt и введите в него число.
В этой же папке, после удачного (без ошибок) запуска программы на исполнение должен появиться файл output.txt .
Для любознательных.
Другие функции для работы с файлами в Паскале:
1. текстовый var f: text;
2. типизированный var f: file of <тип компонента>;
3. нетипизированный var f: file;
Данные в
типизированных и нетипизированных файлах хранятся в формате
внутримашинной обработки.
Текстовый файл на диске – это полная модель клавиатуры и экрана (input, output).
Текстовый файл печати – lst (модуль printer).
ФУНКЦИИ для работы с файлами в Паскале
Функция |
Назначение |
Пример вызова |
Значения |
eof(file) |
условие «конец файла» |
if eof(f) then ... |
[true; false] |
eoln(file) |
условие «конец строки» |
if eoln(f) then ... |
[true; false] |
filepos(file) |
получить номер позиции для обмена |
if filepos(f) > 0 then ... |
[0;n] |
filesize(file) |
получить размер файла [количество записей] |
seek(f, filesize(f)) |
[0;n] |
ioresult |
номер ошибки ввода-вывода ({$I-}) |
if ioresult = 0 then ... |
[0;n] |
ПРОЦЕДУРЫ для работы с файлами в Паскале
Процедура |
Назначение |
Пример вызова |
Тип файла |
assign(file, имя) |
назначить файл для файловой переменной |
assign(f, ’a: text’) assign(f, path) |
Все файлы |
close(file) |
закрыть файл |
close(f) |
Все файлы |
reset(file [,длина-з.]) |
открыть файл |
reset(f) |
Все файлы |
rewrite(file [,длина-з.]) |
создать файл |
rewrite(f, 1) |
Все файлы |
append(file) |
открыть для добавления |
append(f) |
Text |
read(file, данные) |
ввод данных |
read(f, mydata) |
Все файлы |
readln(file, данные) |
ввод данных, пропуск конца строки |
readln(f, a, b, c) |
Text |
write(file, данные) |
вывод данных |
write(f, mydata) |
Все файлы |
writeln(file, данные) |
вывод данных, вывод конца строки |
writeln(f, a:10:2) |
Text |
blockread(f, данные, n, результат) |
ввод блока из n записей, результат = сколько передано |
blockread(f, a, 50,p) |
File |
blockwrite(f, данные, n, результат) |
вывод блока из n записей |
blockwrite(f, a,50,p) |
File |
seek(file, номер позиции) |
установить номер позиции для обмена [0;n], n = число записей |
seek(f, 0) |
Кроме text |
Скачано с www.znanio.ru
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.