Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

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






Файловый тип данных






 

Прежде всего, вспомним, что такое файл. Файл – это строго определённый участок памяти на физическом носителе, который имеет своё уникальное имя.

В языке Паскаль имеются три класса файлов: текстовый файл, типизированный и нетипизированный файл. Начнём с текстовых файлов.

В Паскале имеется стандартный файловый тип text. Прежде чем приступить к операциям над текстовыми файлами, необходимо ввести переменные (одну или несколько) типа text:

Var F: text;

Описанные переменные (далее – файловые переменные) будут в дальнейшем связаны с внешними файлами. Это могут быть обычные файлы на жестком или гибком диске, а также файлы, связанные с каким-либо устройством, например, дисплеем, принтером. Файловая переменная далее используется в программе в качестве параметра процедур работы с файлами.

После того как мы описали файловые переменные и связали их с определёнными внешними файлами, то данные файлы можно открыть для того чтобы производить с ними какие-либо действия, и прежде всего это запись в файл или чтение из него. Доступ к текстовому файлу организуется последовательно – это означает, что программа не может в любой момент времени считать из него произвольную порцию информации или произвести запись в произвольное место файла. Любой файл представляет собой линейную последовательность элементов, каждый из которых имеет свой номер. Можно считать, что имеется указатель, который при считывании очередного элемента файла перемещается к следующему элементу (т.е. становится ближе к концу файла).

Рассмотрим теперь процедуры и функции для работы с файлами:

 

Функция Описание
  Procedure Assign (var F, String) Связывает внешний файл, имя которого указано в строковой константе String, с файловой переменной F.
    Procedure Rewrite (var F) Создаёт и открывает новый файл, связанный с файловой переменной F для записи. Если файл с указанным именем уже существует, старый файл будёт стёрт, а на его месте создаётся новый пустой файл. Текущий указатель устанавливается в начало файла.
  Procedure Reset (var F) Открывает существующий файл, связанный с файловой переменной F для чтения. Текущий указатель устанавливается в начало файла.
  Procedure Append (var F: text) Открывает существующий файл, связанный с файловой переменной F, для добавления в него новых записей.
    Procedure Close (var F) Закрывает открытый внешний файл, связанный с файловой переменной F. Если после завершения обработки файла он не был закрыт, то вся информация будет потеряна.
    Function Eof (var F): boolean Возвращает для файла, связанного с файловой переменной F, состояние End-of-File (конец файла): True – если текущее положение указателя находится в конце файла или файл пустой; False – во всех остальных случаях.
  Procedure Read (var F: text; v1, …) Считывает одно или несколько значений из файла, связанного с файловой переменной F, в одну или несколько переменных v1, …
Procedure Readln (var F: text; v1, …) То же, что и Read, но выполняет пропуск до начала следующей строки текстового файла.
  Procedure Write (var F: text; v1, …) Записывает в файл, связанный с файловой переменной F, одно или несколько значений, хранящихся в переменных v1, …
Procedure Writeln (var F: text; v1, …) Делает то же, что Write, но затем записывает в текстовый файл признак конца строки.

 

Рассмотрим пример: Создать на диске файл, содержащий 5 предложений записанных буквами латинского алфавита. Создать на диске другой файл, и в него записать данные из первого файла заменив строчные буквы прописными (функцию Upcase() не использовать).

Program Example;

var f1, f2: text;

s, k: string; i: integer;

Begin

assign (f1, 'd: \l1.txt');

rewrite (f1);

assign (f2, 'd: \l1.new');

rewrite (f2);

for i: =1 to 5 do

Begin

writeln ('Введите ', i, ’ предложение: ’);

readln (k);

writeln (f1, k);

end;

close (f1);

reset (f1);

while not eof (f1) do

Begin

readln (f1, s);

for i: =1 to length (s) do

if (ord (s[i])> = ord ('a')) and (ord (s[i])< = ord ('z'))

Then

s[i]: = chr (ord (s[i])- ord ('а')+ ord ('А'));

writeln (f2, s);

end;

close (f1); close (f2);

End.

 

Поговорим теперь о типизированных и нетипизированных файлах.

Описание типизированного файла имеет вид:

Var F: file of type_file;

Где type_file может быть любым типом за исключением файлового (text). Элементами типизированного файла являются значения указанного типа.

При работе с типизированными файлами можно использовать уже знакомые нам процедуры Assign, Reset, Rewrite. Следует заметить, что текстовый файл, открытый процедурой Reset, доступен только для чтения, а типизированный – ещё и для записи. Процедуры Read и Write здесь используются по-другому. Отличие заключается в том, что каждый из параметров в рассматриваемом случае должен быть переменной типа type_file, а выражения и константы недопустимы. Процедуры Readln и Writeln применяются только к текстовым файлам.

 

Рассмотрим пример:

Program file_of_extended;

Var

F: file of extended;

F1: text;

X, y: extended; i: word;

Begin

Assign(f1, ’d: \t1.txt’);

Rewrite(f1);

X: =0.0;

For i: =1 to 1000 do

begin

Y: =sin(x);

Writeln(f1, y);

X: =x+0.001;

end;

Close(f1);

Assign(f, ’d: \t.ext’);

Rewrite(f);

X: =0.0;

For i: =1 to 1000 do

begin

Y: =sin(x);

Write(f, y);

X: =x+0.001;

end;

Close(f);

End.

После выполнения этой программы на диске появятся два файла t.ext и t1.txt. Первый является типизированным файлом, а второй – текстовым. Несмотря на то, что эти файлы содержат одинаковую информацию, между ними имеется существенное различие. Если просмотреть содержимое этих файлов, то в текстовом файле мы увидим столбик цифр, а в типизированном – псевдографические символы. Если мы, кроме того, сравним размер обоих файлов, то обнаружим, что текстовый файл занимает объём 25 000 байт, а типизированный файл – 10 000 байт. Почему? Переменная типа Extended занимает 10 байт, поэтому типизированный файл, содержащий 1000 чисел данного типа имеет размер 10 000 байт. Но если переменная типа Extended хранится в виде текстовой строки, то эта строка состоит из 23 символов, т.к. она включает показатель степени «Е+nnnn» или «Е-nnnn». Добавив сюда ещё управляемые символы CR (специальный символ возврата каретки)и LF(символ превода строки), которыми оканчивается каждая строка при вызове процедуры Writeln, и мы получим 25 символов на каждое значение типа Extended, записанное в текстовый файл. В итоге это даст 25 000 байт. По этой причине для хранения числовых данных экономнее использовать типизированные файлы.

Для более эффективного выполнения операций ввода/вывода из внешних файлов в Паскале имеются нетипизированные файлы. При работе с ними можно использовать быстрые дисковые операции низкого уровня. Нетипизированные файлы дают возможность прямого доступа к любому файлу на диске независимо от его типа и структуры. Описание нетипизированной файловой переменной имеет вид:

Var f: file;

Такая файловая переменная связывается с внешним файлом обычным образом. В числе параметров процедур Reset и Rewrite для нетипизированных файлов кроме файловой переменной имеется необязательный второй параметр типа Word: например Reset(f, n). Этот дополнительный параметр описывает размер индивидуальной записи в файле (в байтах). Если параметр отсутствует, его значение по умолчанию принимается равным 128.

 

Практическая работа

Варианты заданий.

 

1. Составить программу осуществляющую поиск в строке:

(Исходное предложение вводится с клавиатуры и записывается в текстовом файле. Затем оно считывается с этого файла, обрабатывается, и результат выводится на экран и в другой текстовый файл).

1.1. Дано предложение. Напечатать все его буквы «и».

1.2. Дано предложение и символьная величина к. Напечатать столбиком все вхождения данного символа в это предложение.

1.3. Дано предложение. Вывести столбиком его 3, 6, 9 и т.д. символ.

1.4. Дано предложение. Вывести все его вхождения символов «м» и «н».

1.5. Дано предложение. Вывести в строчку все вхождения слогов «ло».

1.6. Дано предложение. Определить число пробелов в нем.

1.7. Дано предложение. Определить сколько в нем слов.

1.8. Дано предложение. Определить сколько в нем слов начинающихся на слог «ла».

1.9. Дано предложение. Определить сколько в нем слов оканчивающихся на слог «ло».

1.10. Дано слово. Получить перевертыш этого слова.

1.11. Дано предложение. Вывести на экран его самое короткое слово.

1.12. Дано предложение. Вывести на экран его самое длинное слово.

 

2. Составить программу осуществляющую поиск и замену в строке:

(Исходное предложение вводится с клавиатуры и записывается в текстовом файле. Затем оно считывается с этого файла, обрабатывается, и результат выводится на экран и в другой текстовый файл).

2.1. Дано предложение. Заменить в нем все пробелы на символ _ (подчеркивания).

2.2. Дано предложение. Все его символы стоящие на четных местах заменить на символ «ы».

2.3. Дано предложение. Все его символы стоящие на 3, 6, 9 и т.д. местах заменить на символ «А».

2.4. Дано предложение. Заменить в нем все слоги «ах» на «ух».

2.5. Дано предложение. Заменить в нем все словосочетания «про» на «нет».

2.6. Дано предложение. Заменить в нем все вхождения подстроки1 на подстроку2.

2.7. Дано предложение. Заменить все слова, у которых окончания «а» на «о».

2.8. Дано предложение. Заменить все слова, которые начинаются на «о» буквой «а».

2.9. Дано предложение. Заменить все слова, начинающиеся на слог «на» слогом «по».

2.10. Дано предложение. Заменить все окончания слов «ни» на слог «ми».

2.11. Дано предложение. Заменить все слова, которые начинаются на слог «по» словом «при».

2.12. Дано предложение. Заменить все слова с окончанием «ла» словом «нет».

 

3. Составить программу осуществляющую обработку цифр в строке:

(Исходное предложение вводится с клавиатуры и записывается в текстовом файле. Затем оно считывается с этого файла, обрабатывается, и результат выводится на экран и в другой текстовый файл).

3.1. Дан символ. Определить, является ли он цифрой.

3.2. Дан текст. Напечатать все имеющиеся в нем цифры.

3.3. Дан текст. Определить количество цифр в нем.

3.4. Дан текст. Найти сумму цифр в нем.

3.5. Дан текст. Найти его максимальную цифру.

3.6. Дан текст. Найти его минимальную цифру.

3.7. Дан текст. Найти сумму его четных цифр.

3.8. Дан текст. Найти произведение цифр находящихся на нечетных местах.

3.9. Дан текст. Найти количество четных цифр в нем.

3.10. Дан текст. Найти наибольшее количество подряд идущих цифр.

3.11. Дан текст. Найти сумму всех имеющихся в нем четных цифр.

3.12. Дан текст. Найти максимальное из имеющихся в нем цифр.

 


§-10. Множества

Тип «множество» задает интервал значений, который является множеством всех подмножеств базового типа. Множество описывается в разделе var с помощью зарезервированного слова set. Базовым типом множества может быть любой конечный тип, состоящий не более чем из 256 элементов. В силу этого базовый тип множества не может быть коротким целым (Shortint), целым (Integer), длинным целым (Longint) или словом (Word). Вот пример описания множества:

Var

S: set of Char;

Для того чтобы пояснить особенность данного типа, приведу пример. Если переменная типа «множество описана как set of 1..3, то она может принимать значения из следующего множества: {(1, 2, 3), (1, 2), (1, 3), (2, 3), (1), (2), (3), ()}.

Константы множественного типа записываются с помощью квадратных скобок [ ] и списка элементов. Примеры:

Const

a=[‘A’..’Z’, ’a’..’z’];

empty = [];

digits = [O..9];

 

Отсутствие списка элементов в квадратных скобках обозначает пустое множество. Зарезервированное слово in используется для определения принадлежности элемента множеству:

if ch in alphabet


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.016 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал