В язык Паскаль выделяются данные файлового типа, которые служат для работы с информацией, расположенной на внешних устройствах. Эта информация формируется во внешней памяти компьютера, образуя некоторую область, называемую файлом. Файлы имеют имя и представляют собой совокупность однотипных элементов. Обычно они применяются, в случаях большого объема данных, долгосрочного хранения, либо необходимости предоставления доступа нескольким приложениям к одной и той же информации.
Файлы принято разделять на физические и логические. Физические файлы имеют имя, и располагаются на съемном носителе, а логические это те переменные файлового типа, которые их представляют в программе.
В Паскале различают следующие три вида файлов (в скобках описаны ключевые слова для инициализации файловой переменной):
текстовые файлы (text);
типизированные (file of );
Немного позже мы разберемся с каждым из них. А сейчас рассмотрим основные операции для работы с файлами.
Создание файла
Процедура Assign связывает переменную файлового типа с физическим файлом. Например, установить соответствие между переменной Fil и текстовым файлом lot, расположенном на диске D, можно так:
Работа с файлами Pascal
Режим чтения
Процедура Reset открывает файл в режиме чтения, после чего оператором Read(, ) можно осуществить последовательное считывание элементов в программу.
Конец файла
Количество элементов в файле заранее не определяется, но часто необходимо знать о моменте достижения конца файла. Для этого в Паскале существует логическая функция EOF, которая проверяет достигнут ли конец, и если это так, то принимает значение True, иначе – False. Осуществляется проверка, как правило, в цикле, в качестве условного выражения выступает функция EOF.
Режим записи
Открыв файл в режиме записи, можно поэлементно записать в него информацию, воспользовавшись процедурой Write(, ).
Закрытие файла
Процедура Close закрывает открытый файл, а также освобождает файловую переменную, указанную в качестве параметра.
Удаление файла
При помощи процедуры Erase, можно удалить с внешнего носителя, заранее закрытый файл.
Изменение имени файла
Rеnаmе переименовывает физический файл, который перед этим следует закрыть процедурой Close.
Смещение указателя файла
Процедура Sееk устанавливает позицию указателя в файле на необходимый элемент (нумерация элементов начинается с нуля).
Определение положения указателя
Функция FilePos принимает значение порядкового номера элемента, над которым в момент вызова находиться указатель.
Определение количества элементов
Функция FileSize определяет количество всех имеющихся в файле элементов.
Текстовые файлы
Текстовые файлы могут состоять из элементов символьного (char) и строкового (string) типа данных. Ключевое слово Text указывает, что файловая переменная создается для работы именно с текстовым файлом:
Структура текстового файла представляет собой последовательность строк, которые в свою очередь состоят из символов. Любая строка оканчивается признаком «конца строки», а сам файл признаком «конца файла». Для определения конца файла в Паскаль есть функция EOF, а для конца строки – EOLn:
Работа с внешними файлами | Pascal
В случае достижения конца строки она (функция EOLn) принимает значение True, в противном случае False.
Рассмотрим работу с текстовым файлом, на примере программы.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Место создания файла «file.txt» не было указано, поэтому он создаться в папке по умолчанию для вашей среды программирования.
Для текстовых файлов в Паскале определены следующие процедуры и функции:
Процедура Append открывает существующий файл в режиме дозаписи. После чего в его конец можно добавить какую либо информацию.
Если до конца строки остались пробелы/знаки табуляции, то функция SeekEOLn возвращает значение True, иначе False.
Если до конца файла остались лишь строки с пробелами/знаками табуляции, то функция SeekEOF возвращает значение True, иначе False.
Источник: kvodo.ru
15. Работа с файлами в Паскале
1. Описать тип файловой переменной. Например, переменная f в зависимости от типа файла может быть описана так:
Тип file описывает линейную последовательность компонент, указанного типа. Тип файла Text означает файл, состоящий из строк символов.
2. Связать файловой переменной с именем файла — команда Assign(f). Одновременно в программе может быть открыто несколько десятков файлов, каждый из которых должен иметь свою файловую переменную.
3. Открыть файл командой Rewrite(f) для записи во вновь создаваемый файл или Reset(f) для чтения/записи уже имеющегося файла. Если открывается существующий текстовый файл, то используем команду Append(f).
4. Осуществить чтение или запись в файл — команды Read или Write соответственно (для построчной работы с текстовыми файлами можно использовать соответственно ReadLn или WriteLn). Например, команда записи в файл выглядит так: Write(f, а), где f — файловая переменная; а — переменная любого типа (byte, real, string и т. д., соответствующая типу файла). При обращении к командам Read/Write позиция чтения/записи в файле автоматически увеличивается на единицу.
5. Закрыть файл — команда Close(f).
Пример программы, демонстрирующей возможные действия с файлом:
Assign(f, ‘TEST.TXT’);
WriteLn(f,’Исходный текст’);
WriteLn(f,’Добавляемый текст’);
Ниже приведено описание процедур и функций Паскаля, работающих с файлами:
Процедура Append(var f : Text); Открывает существующий текстовый файл f для дополнения.
Процедура Assign(var f; name : String); Связывает внешний файл с именем name и переменную файлового типа f. Все дальнейшие операции с переменной f будут выполняться с указанным внешним файлом.
Процедура Close(var f); Закрывает открытый файл, связанный с переменной f.
Функция Eof(var f); типа Boolean; Показывает значение Истина (True) при наличии признака конца файла для типизированных или нетипизированных файлов, указываемых файловой переменной f.
Функция FilePos(var f); типа Longint; Показывает текущую позицию в файле, указываемом переменной f. Если эта позиция в конце файла, то функция возвращает значение, равное длине файла, а если в начале файла, значение 0.
Функция FileSize(var f); типа Longint; Показывает текущий размер файла f в байтах. Если файл пуст, то 0.
Процедура Reset(var f [ : file; RecSize : Word ] ); Открытие существующего файла. Имя внешнего файла, связанного с f, должно быть ранее определено. Необязательный параметр RecSize: размер записи нетипизированного файла.
Процедура Rewrite(var f : file [;RecSize : Word ] ); Создает и открывает новый файл. Если такой файл уже есть, то он удаляется и создается новый с тем же именем.
Процедура Seek(var f; n : Longint); Перемещает текущую позицию файла к элементу с номером n (не может быть использована для текстовых файлов, первая позиция равна 0).
Процедура Truncate(var f); Усекает размер файла f до текущей позиции в файле.
Ниже приведен пример программы на Паскале, которая открывает сразу два файла (один для чтения, а второй создает вновь для записи). Командой Readln(f1,s); из первого файла считывается строка s. В цикле For организуется доступ к ее отдельным символам и производится замена буквы k на K. Затем преобразованная строка сохраняется во втором файле. Считывание строк проводится в цикле repeat-until и завершается при нахождении конца первого файла Eof(f1).
Источник: studfile.net
#20 Чтение данных — Работа с файлами в Паскаль, assign, reset
В этом уроке мы рассмотрим примеры работы с текстовыми файлами (а именно способы чтения данных) средствами ЯП Паскаль.
Программа на Паскаль может читать текстовые файлы и работать с данными, которые в них хранятся, но чтобы рассмотреть пример такой работы, сначала нам нужно определиться где именно положить файл, который мы будем читать.
Где сохранить текстовый файл
(определим его адрес в файловой системе)
Самый простой способ разместить файл — положить его в ту же папку, в которой лежит исполняемый файл вашего проекта. Определить путь к этой папке можно выполнив код:
begin WriteLn(‘Put k failu programmy: ‘); WriteLn(ParamStr(0)); readln(); end.
На экран вам будет выведено что-то вроде (у вас этот путь может быть другим — действуйте по аналогии):
Put k failu programmy: C:UsersTEMP.UIC.012Documentsproject1.exe
Получается, что директория:
C:UsersTEMP.UIC.012Documents
скорее всего доступна для размещения файлов, и потому в ней создадим файл с именем input.txt, который можно будет прочитать, то есть полный путь к нему будет:
C:UsersTEMP.UIC.012Documentsinput.txt
ПРИМЕЧАНИЕ: убедитесь, что в вашей системе отображается расширение файлов — иначе на деле может оказаться, что ваш файл называется не input.txt, а input.txt.txt
Чтение файлов
Теперь после того как мы создали текстовый файл, открыть его написать пару строк и сохранить любым текстовым редактором.
Теперь пришло время рассмотреть минимальный код, который позволяет прочитать содержимое файла от начала до конца построчно:
Var f1:text; // тип для открытия текстового файла filename, s: string; begin filename := ‘C:UsersTEMP.UIC.012Documentsinput.txt’; // путь к файлу assign(f1, filename); < связывание переменной дескриптора с путём к файлу >reset(f1); // открываем файла для чтения writeln(‘========nachalo faila=====’); while not eof(f1) do // пока не достигнут конец файла begin readln(f1, s); // читаем из него очередную строку writeln(s); // и выводим её в консоль end; writeLn(‘========= konez faila =========’); readln(); end.
Примеры
Пример №1 — чтение содержимого файла с проверкой существовования
Var f1:text; // тип для открытия текстового файла filename, s: string; begin filename := ‘C:UsersTEMP.UIC.012Documentsinput.txt’; // путь к файлу //filename := ‘D:tmpmyinput.txt’; // путь к файлу WriteLn(‘Put k failu programmy: ‘); WriteLn(ParamStr(0)); assign(f1, filename); reset(f1); // попытка открыть файл на чтение с подавлением ошибки if IOResult <> 0 then // если есть ошибки begin writeLn(‘File ‘, filename, ‘ ne naiden!’); end else // если удалось открыть на чтение begin writeLn(‘File ‘, filename, ‘ suchectvuet. I vot ego soderzimoe:’); while not eof(f1) do begin readln(f1, s); writeln(s); end; end; writeLn(‘========= konez faila =========’); readln(); end.
Ещё примеры
- Проверка существования файла
- Фукция ParamStr() — Путь к файлу и папке программы, определить откуда происходит запуск
Задачи /(самостоятельная работа)
- Создайте файл в вашей операционной системе и выведите в консоль всё его содержимое.
- У вас есть текстовый файл с информацией об итогах соревнований (каждая строка имеет формат: имя + произвольное число пробелов + балл 1 + произвольное число пробелов + балл 2):
Вася 16 485 Коля 17 555 Юра 18 61 .
— где:
слева указаны имена участников, а справа число баллов.
Первое число в каждой строке — штрафные баллы набранные участниками, а второе число — «положительные баллы», то есть если у нас есть строка:
Vasya N M
fsd334rgd rfg46gdfg ter5tge56 123gergf
fsd334rgd r fg ter5tge56 123gergf
fsd334rgd r16hyj3f7 23tge6f57 123gergf7
- всегда есть общий корень и это цифра
- по горизонтали цепочка не разрывается пробелами, соединяется же с помощью последовательностей знака — (тире).
- по вертикали цепочка не разрывается переносом строк, соединяется же с помощью вертикальных последовательностей символа | (вертикального разделителя).
Размер схемы не более чем 100 на 100 символов.
1——4—————5——-6———7 | | | |——-5———8 | |——-6———7—7——-9——8—1—-5—3
1——4——8———5——-6———7 | | | | | |——-5———8 | | | |———8-8-8—8—-8 | |——-6———7—7 |—————5-5—5—5
Задача: вывести длина самой длинной цепочки.
Источники (что ещё почитать)
- Ввод/вывод в Паскаль (МЦНМО): http://informatics.mccme.ru/mod/book/vie.
Key Words for FKN + antitotal forum (CS VSU):
- работа с файлами
- Паскаль
- примеры
- онлайн уроки
- чтение файла
- текстовый файл
- дескриптор
- файловый дескриптор. открытие файла на чтение
- $I+
- построчное чтение
- reset
- readln
- assign
Источник: fkn.ktu10.com