Виды файлов. Файловая переменная
Виды файлов. Файловая переменная
Выполнил: студент гр. Эпи 11
Власов А.Ю.
Принял: Анкудинов В.Б
Вологда 2012
Лабораторная работа №4
Виды файлов. Файловая переменная
Теория:
В Pascal имеются три вида файлов:
текстовый файл (определяется типом text);
типизованный файл (задается предложением file of Тип);
нетипизованный файл (определяется типом file).
Для работы с файлами в программе необходимо определить файловую переменную (файловый тип) в разделе описаний программы
Файловые переменные, описанные в программе, называют логическими файлами. Все основные процедуры и функции, обеспечивающие ввод/вывод данных, работают только с логическими файлами.
При открытии и создании файла для временного хранения его данных автоматически выделяется область в оперативной памяти компьютера, которая называется буфером файла.
Принцип обработки файлов любых типов состоит в следующем: данные из файла сначала считываются в оперативную память компьютера, для чего в программе назначаются переменные подходящих типов, и вся дальнейшая обработка ведется над этими переменными.
q Процедура assign(ФайловаяПеременная, ИмяФайла).
Процедуру assign недопустимо использовать для уже открытого файла. Прежде чем использовать файловую переменную повторно, необходимо закрыть файл с помощью процедуры close.
q Процедура reset(ФайловаяПеременная) открывает существующий файл на чтение (открывает входной файл) и ставит указатель на начало первого элемента файла. При отсутствии внешнего файла с указанным именем возникает сообщение об ошибке File not found (Файл не найден). Если при чтении файла возникнет необходимость вернуть указатель в его начало, достаточно будет просто применить процедуру reset к этому файлу еще раз
q Функция ioresult — возвращает статус последней выполненной операции ввода-вывода (успешно она прошла или нет). При работе с файлами рекомендуется использовать ее при выполнении любого действия, которое может привести к ошибке. Обработка функции ioresult позволит выполнить проверку существования файла на диске более гибко.
Обратите внимание — использование rewrite требует особой аккуратности. Если физический файл с указанным именем уже существует, то он удаляется, и на его месте создается новый пустой файл с тем же именем. Для предотвращения потери информации на практике необходимо создавать резервные копии файлов, над которыми могут производиться опасные действия.
q Процедура close(ФайловаяПеременная). Используя процедуру close, программист закрывает файл, после того как в программе будет завершена его обработка. В противном случае может произойти потеря данных.
Обратите внимание —процедуры rename и erase нельзя использовать для открытых файлов. Их необходимо предварительно закрыть. Если файл не существует, возникает ошибка выполнения программы.
q Логическая функция eof(ФайловаяПеременная) — выполняет проверку, не достигнут ли конец файла (End Of File). Функция возвращает true, если конец файла обнаружен. В противном случае функция возвращает false.
q Текстовый файл — это последовательность символов, сгруппированных в строки, заканчивающиеся специальным символом eoln.
q Процедура append(ФайловаяПеременная). Она открывает существующий файл для дозаписи. Указатель ставится не в начало, а в конец файла, куда и будут дописываться новые компоненты. Процедура append применима только к текстовым файлам.
Исходный текст любого модуля можно разделить на несколько разделов:
q заголовок;
q интерфейсная часть;
q исполняемая часть;
q инициирующая часть.
Собственно программный код располагается в исполняемой части, иногда в инициирующей части. Заголовок и интерфейсная часть задают название модуля и перечисление всех программных элементов, которые предоставляет данный модуль тем программам или другим модулям, которые будут его использовать. Соответственно весь основной текст располагается в исполняемой и инициирующей частях.
В общем виде структура модуля выглядит так:
unit <имя>; { заголовок модуля }
{$R+} { возможно, глобальные директивы компилятора}
interface { начало интерфейсной части }
uses … { список модулей }
label … { объявления общедоступных меток }
const … { объявления общедоступных констант }
tуре … { объявления общедоступных типов }
var … { объявления общедоступных переменных }
procedure… { заголовки общедоступных процедур }
function … { заголовки общедоступных функций }
implementation { начало исполняемой части }
uses … { используемые при реализации модули }
label … { объявления скрытых глобальных меток }
const … { объявления скрытых глобальных констант }
tуре … { объявления скрытых глобальных типов }
var … { объявления скрытых глобальных переменных }
procedure … { заголовки и тела общедоступных и скрытых процедур }
function … { заголовки и тела общедоступных и скрытых функций }
begin { начало инициирующей части }
. . . . . { здесь могут располагаться любые операторы }
end. { конец модуля }
Задание 1
Задан текстовый файл с произвольным именем. Подсчитайте, сколько слов содержит этот файл. Все слова разделены пробелами, не обязательно одиночными. Найдите все слова максимальной длины (или с максимальным количеством гласных букв).
Работа программы.
Исходный текст вводится с клавиатуры на латинском языке
Назначение переменных.
Переменная | Тип | Назначение |
s | real | переменные для строки |
max | real | Максимальное слово |
f | real | Переменная файла |
f | assign | связь между файловой переменной и именем физического дискового файла |
i | integer | Переменная файла |
Текст программы.
vars,max,s1:string;
i:integer;
f:text;
Begin
max:='';
assign(f,'C:\WORK\MAX.txt');
rewrite(f);
Write('Введите строку: ');readln(s);
Fori:=1 tolength(s) do
Begin
ifs[i]<>' ' thens1:=s1+s[i] else begin
ifs1>max thenmax:=s1;
s1:='';
end;
end;
Writeln('Максимальная длина слова - ',length(max));
Fori:=1 tolength(s) do
Begin
ifs[i]<>' ' thens1:=s1+s[i] else begin
iflength(s1)=length(max) thenwrite(f,s1,#13,#10);
s1:='';
end;
end;
close(f);
end.
Алгоритм программы
Начало |
max:='' |
assign(f,'C:\WORK\MAX.txt') |
rewrite(f) |
'Введите строку: ' |
s |
i:=1 to length(s) |
s[i]<>' ' |
Y |
s1:=s1+s[i] |
s1>max |
Y |
max:=s1 |
s1:='' |
'Максимальная длина слова - ',length(max) |
i:=1 to length(s) |
s[i]<>' ' |
Y |
s1:=s1+s[i] |
length(s1)=length(max) |
Y |
f,s1,#13,#10 |
s1:='' |
close(f) |
Конец |
Тестирование.
Текст вводится с клавиатуры на латинском языке
Running "c:\program files (x86)\free pascal\bin\i386-win32\амв.exe
Введите строку:
Максимальная длина слова – 6
Задание 2.
Разработать библиотечный модуль, содержащий следующие подпрограммы (процедуры или функции) для работы со строками:
А.Три функции для удаления концевых пробелов в заданной строке (удалить пробелы в начале строки, в конце строки и с двух концов)
Б. Удаление лишних пробелов (между словами оставить по одному пробелу)
В. Удаление всех пробелов в строке
Написать программу, к которой подключается модуль, демонстрирующую работоспособность всех подпрограмм модуля.
Текст программы
modul
Unit
unit1;
Interface
Procedureprobel(vars:string );
Procedureprobel2(vars:string);
Procedureprob_nach (s:string);
Procedureprob_con (s:string);
Procedureprob_dv (s:string);
Implementation
Procedureprob_dv (s:string);
Begin
Writeln('Введите текст');
readln(s);
while(pos(' ',s)=1) and(pos(' ',s)=length(s)) do begin
delete (s,1,1);
delete (s,length(s),1);
end;
end;
Procedureprob_nach (s:string);
Begin
Writeln('Введите текст');
readln(s);
whilepos(' ',s)=1 dodelete (s,1,1);
end;
Procedureprob_con (s:string);
Begin
Writeln('Введите текст');
readln(s);
whilepos(' ',s)=length(s) dodelete (s,length(s),1);
end;
Procedureprobel(vars:string);
Begin
Writeln('Введите текст');
readln(s);
Whilepos(' ', s)>0 do
delete(s, pos(' ', s), 1);
end;
Procedureprobel2(vars:string);
Begin
Writeln('Введите текст');
readln(s);
Whilepos(' ', s)<0 do
delete(s, pos(' ', s), 1);
end;
end.
Program
Uses
unit1;
Var
s,i:char;
Begin
writeln('1.удалить пробелы в начале строки.');
writeln('2.в конце строки.');
writeln('3.с двух концов.');
writeln('4.Удаление лишних пробелов .');
writeln('5.Удаление всех пробелов в строке.');
writeln('Напишите номер действия, которое будет совершено с текстом');
readln (i);
Casei of
'1': prob_dv(s);
'2': prob_nach(s);
'3': prob_con(s);
'4': probe_l(s);
'5': probe_l2(s);
elsewriteln('Введите цифру от 1 до 5');
end;
end.
Начало |
'1.удалить пробелы в начале строки.' '2.в конце строки.' '3.с двух концов.' '4.Удаление лишних пробелов .' '5.Удаление всех пробелов в строке.' 'Напишите номер действия, которое будет совершено с текстом' |
i |
i |
'1' |
prob_dv(s) |
'2' |
prob_nach(s) |
'3' |
prob_con(s) |
'4' |
probe_l(s) |
'5' |
probe_l2(s) |
else |
'Введите цифру от 1 до 5' |
Конец |