Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


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

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

 

 

Выполнил: студент гр. Эпи 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 Переменная файла

 

Текст программы.

var s,max,s1:string;

i:integer;

f:text;

 

Begin

max:='';

assign(f,'C:\WORK\MAX.txt');

rewrite(f);

Write('Введите строку: ');readln(s);

For i:=1 to length(s) do

Begin

if s[i]<>' ' then s1:=s1+s[i] else begin

if s1>max then max:=s1;

s1:='';

end;

end;

Writeln('Максимальная длина слова - ',length(max));

For i:=1 to length(s) do

Begin

if s[i]<>' ' then s1:=s1+s[i] else begin

if length(s1)=length(max) then write(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

Procedure probel(var s:string);

Procedure probel2(var s:string);

Procedure prob_nach (s:string);

Procedure prob_con (s:string);

Procedure prob_dv (s:string);

Implementation

Procedure prob_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;

 

Procedure prob_nach (s:string);

Begin

Writeln('Введите текст');

readln(s);

while pos(' ',s)=1 do delete (s,1,1);

end;

 

Procedure prob_con (s:string);

Begin

Writeln('Введите текст');

readln(s);

while pos(' ',s)=length(s) do delete (s,length(s),1);

end;

 

Procedure probel(var s:string);

Begin

Writeln('Введите текст');

readln(s);

Whilepos(' ', s)>0 do

delete(s, pos(' ', s), 1);

end;

 

Procedure probel2(var s: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);

else writeln('Введите цифру от 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'
 
Конец

 

 




<== предыдущая лекция | следующая лекция ==>
студентами 4 курса историко-филологического факультета | 
Поделиться с друзьями:


Дата добавления: 2016-12-18; Мы поможем в написании ваших работ!; просмотров: 442 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Наглость – это ругаться с преподавателем по поводу четверки, хотя перед экзаменом уверен, что не знаешь даже на два. © Неизвестно
==> читать все изречения...

2675 - | 2239 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.015 с.