Виды файлов. Файловая переменная

Виды файлов. Файловая переменная

Выполнил: студент гр. Эпи 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'
 
Конец

Наши рекомендации