- •Работа с массивами чисел
- •6.1. Структурированные типы данных Turbo Pascal 7.0
- •6.2. Массивы
- •Каждый элемент массива имеет свой индекс.
- •6.3. Фрагменты программ обработки массивов
- •6.3.1 Заполнение массивов
- •6.3.2 Вывод элементов массива на экран
- •6.3.3. Подсчет отрицательных и положительных элементов, их сумм и средних значений
- •6.3.4. Нахождение минимального и максимального элементов двумерного массива
- •6.3.5. Сортировка массива
- •7. Лабораторные задания и методические указания по их выполнению
- •9. Контрольные вопросы
- •6.1. Символьный (char) и строковый (string) тип данных
- •6.2.1. Основные задачи обработки текста
- •6.2.3. Выделение слов из текста (слова разделены несколькими пробелами)
- •6.2.4. Выделение символов в строке и расположение их по алфавиту
- •6.2.5. Выделение символов в строке и подсчет их вхождения
- •6.2.6. Выделение символов в строке и подсчет слов в строке
- •6.2.7. Выделение слов и упорядочение их по длине
- •6.2.8. Расположение слов по алфавиту
- •6.3. Файлы
- •Текстовые файлы определяются в разделе Var следующим образом:
- •7. Лабораторные задания и методические указания по их выполнению
- •9. Контрольные вопросы
6.3. Файлы
Набор данных (физический файл) – это совокупность данных, имеющих общее имя и назначение, и существующая на некотором носителе.
В Turbo Pascal наборам данных соответствуют файлы.
Файл – это логическое понятие, связанное с физически существующим набором данных. Связь обеспечивается операционной системой при выполнении программы пользователя.
Любой файл и соответствующий ему набор данных представляют собой линейную последовательность элементов. Число элементов не устанавливается описанием файлового типа. Каждый элемент файла имеет номер. Первый элемент файла имеет номер 0.
В Паскале определены три типа файлов:
1) текстовые; состоят из строк символов. Конец записи определяется концом строки. Чтение и запись в файл осуществляется посимвольно.
2) типизированные могут состоять из записей любого типа.
3) нетипизированные файлы фактически представляют собой каналы ввода/вывода нижнего уровня, используемые в основном для прямого доступа к любому файлу на диске, независимо от его типа и структуры.
Обработка файла может производиться двумя способами:
1) с использованием последовательного доступа;
2) с использованием прямого (произвольного) доступа.
Обычно доступ к элементам файла осуществляется последовательно, т.е. когда элемент считывается или записывается, то текущая позиция файла перемещается к следующему по порядку элементу файла. Однако для типизированных и нетипизированных файлов можно организовать прямой доступ к любому элементу с помощью стандартной процедуры Seek, которая перемещает текущую позицию файла к заданному элементу.
Когда программа завершает обработку файла, его нужно закрыть. Только после этого связанный с ним внешний набор данных будет обновлен. Затем файловая переменная может быть связана с другим набором данных, или обновленный набор данных может быть связан с другой файловой переменной.
Основными операциями над файлами являются: связь с набором данных; открытие; чтение; запись; закрытие; усечение.
Текстовые файлы определяются в разделе Var следующим образом:
Var Имя_текстового_файла : Text;
Var Input, Output : Text;
Для чтения и записи в текстовые файлы используются стандартные операторы Read (Readln) и Write (Writeln). Общий вид операторов ввода-вывода для текстовых файлов следующий:
Readln(имя файла, запись);
Writeln(имя файла, запись);
где запись – имя данного, которое читается (записывается) из файла. Это может быть символ, строка или число.
Работа с существующим файлом обычно включает в себя операции открытия его для чтения, и затем считывания из него записей, пока не появится признак "Конец файла" – Eof(Файл). Поэтому соответствующие программы содержат циклы вида
While Not Eof (Файл) do readln(Файл, Запись);
Процедуры и функции для работы с файлами приведены в таблице 6.1.
Таблица 6.1 – Процедуры и функции для работы с файлами
ФУНКЦИЯ |
ОПИСАНИЕ |
procedure Append(var f : text) |
Открывает существующий файл, связанный с файловой переменной f , для добавления в него новых записей |
procedure Assign(var f: String) |
Связывает внешний файл, имя которого указано в строковой константе String, с файловой переменной f |
procedure BlockRead(var R file; var But; Count: Word) |
Считывает из нетипизированного файла, связанного с файловой переменной f , одну или несколько записей (их количество задается целочисленным выражением Count) в переменную Buf |
Procedure BlockWrite(var R file; var Buf; Count: Word) |
Записывает в нетипизированный файл, связанный с файловой переменной f , одну или несколько записей (их количество задается целым выражением Count) из переменной Buf |
procedure ChDir(S: String) |
Выполняет смену текущего каталога на каталог, маршрут к которому указан в текстовой переменной S |
procedure Close(var F) |
Закрывает открытый файл, связанный с файловой переменной F |
procedure Erase(var F) |
Стирает внешний файл, связанный с файловой переменной F |
function Eof(var F): Boolean |
Возвращает состояние End-of-file (конец файла) для файла, связанного с файловой переменной F: True - если текущее положение указателя находится в конце файла или файл пустой; False - во всех остальных случаях |
Продолжение таблицы 6.1
function FilePos(var F): Longlnt |
Возвращает текущую позицию для файла, связанного с файловой переменной F. При положении текущего указателя в начале файла возвращает нулевое значение. Для текстовых файлов не используется |
function FileSize(var F): Longtnt |
Возвращает текущий размер файла, связанного с файловой переменной F. Если файл пустой, возвращает нулевое значение. Для текстовых файлов не используется |
procedure Flush(var F: text) |
Сбрасывает буфер текстового файла, связанного с файловой переменной F и открытого для вывода процедурой Rewrite или Append. Это дает гарантию того, что вся информация, записываемая в файл, будет сохранена во внешнем файле. Не влияет на файлы, открытые для ввода |
procedure GetDir(D: Byte; varS: String); |
Возвращает текущий каталог на заданном диске. Имя каталога находится в строковой переменной S, а диск задается значением параметра D: 0 - текущий диск; 1 - диск А; 2 - диск В; 3 - диск С, и т. д. Если значение, заданное в параметре D, неверное, возвращается результат «Х:\» |
function IOResult: Integer |
Возвращает целое значение, являющееся состоянием последней выполненной операции ввода-вывода. Нулевое значение соответствует нормальному завершению операции |
Продолжение таблицы 6.1
procedure MkDir(S: String) |
Создает подкаталог, имя для которого задается строковой переменной S |
procedure Read(var R text;v1,...) |
Считывает одно или несколько значений из файла, связанного с файловой переменной F, в одну или несколько переменных vl, ... |
procedure ReadLn(var R text; v1,...) |
То же, что и Read, но выполняет пропуск до начала следующей строки текстового файла |
procedure Rename(var F, S) |
Переименовывает внешний файл, связанный с файловой переменной F, присваивая ему имя, содержащееся в строковой переменной S |
procedure Reset(var F) |
Открывает существующий файл, связанный с файловой переменной F. Текущий указатель устанавливается в начало файла. Текстовый файл открывается только для чтения |
procedure Rewrite(var F) |
Создает и открывает новый файл, связанный с файловой переменной F. Если файл с указанным именем уже существует, старый файл стирается, а на его месте создается новый пустой файл. Текущий указатель устанавливается в начало файла |
procedure RmDir(S: String) |
Удаляет пустой подкаталог, маршрут которого указан в строковой переменной S |
procedure Seek(var F, N: Longint) |
Перемещает текущую позицию в файле, связанном с файловой переменной F, на заданный элемент. Началу файла соответствует нулевое значение N. Для текстовых файлов не используется |
Продолжение таблицы 6.1
function SeekEof(var R text): Boolean |
Возвращает состояние «конец файла» для текстового файла, связанного с файловой переменной F |
function SeekEoln(var R text): Boolean |
Возвращает состояние «конец строки» для текстового файла, связанного с файловой переменной F |
procedure SetTextBuf(var F. text; var Buf) |
Назначает буфер ввода-вывода для текстового файла, связанного с файловой переменной F. Никогда не применяется к открытым файлам, поскольку в этом случае возможны потери данных |
procedure Truncate(var F) |
Усекает размер файла, связанного с файловой переменной F, до текущей позиции. Вся информация после текущего положения указателя теряется. Для текстовых файлов не используется |
procedure Write(var P. text, vl,...) |
Записывает в файл, связанный с файловой переменной F, одно или несколько значений, хранящихся в переменных vl, ... Файловая переменная может быть связана не только с текстовым файлом. В случае текстового файла значения могут иметь целый, вещественный, строковый, символьный или булев типы. В случае типизированного файла тип значений должен совпадать с типом компонентов файла |
Procedure WriteLn(var R text, v1,...) |
Делает то же, что Write, но затем записывает в текстовый файл признак конца строки |