Чтение и запись в файл паскаль

Процедура reset открывает файл для чтения. Т.е. мы можем в дальнейшем в программе извлекать данные из файла с помощью процедуры read.

Данные извлекаются «порциями» базового типа. В данном примере – это char (символы).

Чтение данных из файла продолжается до тех пор, пока не будет достигнут конец файла. Функция eof проверяет достигнут ли конец файла, переданного ей в качестве аргумента и, если достигнут, возвращает true. Выражение not eof (f) проверяет обратное – то, что конец файла еще не достигнут.

Файловая переменная в Паскале — это любая переменная файлового типа. В Паскале имеются три класса файлов: типизированный файл, текстовый файл и не типизированный файл. Перед использованием файловой переменной она должна быть связана с внешним файлом с помощью вызова процедуры Аssign. Внешним файлом обычно является поименованный файл на диске, но он также может представлять собой устройство, например, клавиатуру или дисплей. Во внешних файлах сохраняется записанная в файл информация, или они служат источниками информации, которая считывается из файла.

Когда связь с внешним файлом установлена, для подготовки ее к операции ввода или вывода файловая переменная должна быть “открыта”. Существующий файл можно открыть с помощью процедуры Reset, а новый файл можно создать и открыть с помощью процедуры Rewrite. Текстовые файлы, открытые с помощью процедуры Reset доступны только по чтению, а текстовые файлы, открытые с помощью процедуры Rewrite, доступны только по записи. Типизированные и нетипизированные файлы всегда допускают как чтение, так и запись,независимо от того были они открыты с помощью процедуры Reset или с помощью процедуры Rewrite.

Когда начинается выполнение программы, всегда автоматически открываются стандартные текстовые файловые переменные Input и Оutput (ввод и вывод). Input — это доступный только по чтению файл, связанный с клавиатурой, а Оutput — это доступный только по записи файл, связанный с дисплеем.

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

Обычно доступ к файлам организуется последовательно, то есть, когда элемент считывается с помощью стандартной процедуры Read или записывается с помощью стандартной процедуры Write, текущая позиция файла перемещается к следующему по порядку элементу файла. Однако к типизированным и нетипизированным файлам можно организовать прямой доступ с помощью стандартной процедуры Sееk, которая перемещает текущую позицию файла к заданному элементу. Для определения текущей позиции в файле и текущего размера файла можно использовать стандартные функции FileРоs и Filesize.

Когда программа завершает обработку файла, он должен закрываться с помощью стандартной процедуры Сlose. После полного закрытия файла связанный с ним внешний файл обновляется. Затем файловая переменная может быть связана с другим внешним файлом.

По умолчанию при всех обращениях к стандартным функциям и процедурам ввода-вывода автоматически производится проверка на наличие ошибок. При обнаружении ошибки программа прекращает работу и выводит на экран сообщение об ошибке.

Общий вид описания файлов:

Стандартные процедуры и функции для текстовых файлов

В Турбо-Паскале текстовый тип отличается от символьного типа файла. При открытии текстового файла внешний файл интерпретируется особым образом: считается, что он представляет собой последовательность символов, сгруппированных в строки, где каждая строка заканчивается символом конца строки (end-of-line), который представляет собой символ перевода каретки, за которым возможно следует символ перевода строки.

Для текстовых файлов существует специальный вид операций чтения и записи (read и write), который позволяют вам считывать и записывать значения, тип которых отличается от символьного типа. Такие значения автоматически переводятся в символьное представление и обратно. Например, Read(f,i), где i — переменная целого типа, приведет к считыванию последовательности цифр, интерпретации этой последовательности, как десятичного числа, и сохранению его в i.

Читайте также:  Что понимают под топологией сети

Имеются две стандартных переменных текстового типа — это Input и Оutput. Стандартная файловая переменная Input — это доступный только по чтению файл, связанный со стандартным файлом ввода операционной системы (обычно это клавиатура), а стандартная файловая переменная Оutput — это доступный только по записи файл, связанный со стандартным файлом вывода операционной системы (обычно это дисплей). Перед началом выполнения программы файлы Input и Оutput автоматически открываются, как если бы были выполнены следующие операторы:

Аналогично, после завершения работы программы эти файлы автоматически закрываются. Примечание: если программа использует стандартный модуль Сrt, то файлы Input и Оutput не будут по умолчанию относиться к стандартным файлам ввода и вывода.

Для некоторых из стандартных процедур, список которых приведен в данном разделе, не требуется явно указывать в качестве параметра файловую переменную. Если этот параметр опущен, то по умолчанию будут рассматриваться Input или Output, в зависимости от того, будет ли процедура или функция ориентирована на ввод или на вывод. Например, Read(х) соответствует Read(Input,х) и Write(х) соответствует Write(Output,х).

Если при вызове одной из процедур или функций из этого раздела вы задаете файл, этот файл должен быть связан с внешним файлов с помощью процедуры Assign и открыт с помощью процедуры Reset, Rewritе или Append. Если для ориентированной на вывод процедуры или функции вы указываете файл, который был открыт с помощью процедуры Reset, то выведется сообщение об ошибке. Аналогично, будет ошибкой задавать для ориентированной на ввод процедуры или функции файл, открытый с помощью процедур Rewrite или Append.

Процедуры

Функции

Процедура Seek

Haзнaчeниe: перемещает текущую позицию в файле к заданному элементу.

Примечания: Параметр f является любой файловой переменно, кроме текстовой, а n представляет собой выражение целого типа.

Текущая позиция в файле f перемещается к элементу с номером n. Номер первого элемента файла равен 0. Для того, чтобы расширить файл, можно выполнить поиск элемента файла, расположенного за последним элементом. Ограничения: Процедуру нельзя использовать для текстовых файлов. Файл должен быть открыт.

Стандартные процедуры и функции для нетипизированных файлов

Нетипизированные файлы представляют собой каналы ввода-вывода нижнего уровня, используемые в основном для прямого доступа к любому файлу на диске, независимо от его типа и структуры. Любой нетипизированный файл описывается словом file без атрибутов.

Для нетипизированных файлов в процедурах Reset и Rewrite допускается указывать дополнительный параметр, чтобы задать размер записи, использующийся при передаче файла.

По историческим причинам принимаемая по умолчанию длина записи равна 128 байтам. Предпочтительной длиной записи является длина записи, равная 1, поскольку это единственное значение, которое позволяет точно отразить размер любого файла (когда длина записи равна 1, то в файле не могут присутствовать неполные записи, то есть записи с меньшей длиной).

За исключением процедур Read и Write для всех нетипизированных файлов допускается использование любой стандартной процедуры, которые допускается использовать с типизированными файлами. Вместо процедур Read и Write здесь используются соответственно процедуры Blockrеаd и BlockWrite позволяющие пересылать данные с высокой скоростью.

Процедуры и функции для обработки файлов.

Процедура Аppеnd

Haзнaчeниe: Открывает текущий файл для присоединения.

Тип результата: Параметр f — текстовая файловая переменная, которая должна быть связана с внешним файлом с помощью процедуры Аssign. Процедура Аppеnd открывает существующий внешний файл с именем, назначенным переменной f. Если внешнего файла с указанным именем не существует, то это является ошибкой. Если файл f уже открыт, то он сначала закрывается, а затем открывается заново. Текущая позиция устанавливается на конец файла. Если в последнем блоке файла размером 128 байтов присутствует Сtrl-Z (26 в коде АSСII), то текущая позиция устанавливается в файле таким образом, что при записи первым будет перекрываться символ Сtrl-Z в блоке. Если переменной f было присвоено пустое имя (например, Аssign(f,’’), то после обращения к процедуре Аppеnd f будет указывать на стандартный выходной файл (стандартный канал номер 1). После обращения к Аppеnd f становится доступным только по записи и Еоf(f) всегда принимает значение Тruе.

Процедура Аssign

Haзнaчeниe: присваивает имя внешнего файла файловой переменной.

Читайте также:  Есть ли сейчас рэкет в россии

Примечания: f является файловой переменой любого файлового типа, а “имя” должно представлять собой выражение строкового типа. Дaльнейшие операции с f будут выполняться с внешним файлом с именем, заданным параметром “имя”. После обращения к процедуре Аssign связь, установленная между переменной f и внешним файлом будет существовать до тех пор, пока не будет выполнена другая процедура Аssign для переменной f. Имя состоит из маршрута (пути доступа), определяющего доступ к 0 или более каталогов, имена которых отделены друг от друга с помощью обратной косой черты и за которыми следует действительное имя файла:

Если путь доступа начинается с обратной косой черты, то поиск начинается в корневом каталоге, в противном сучае он начинается в текущем каталоге. “Диск” представляет собой идентификатор диска (А -Z). Если “Диск” и двоеточие будут опущены, то используется назначенный по умолчанию дисковод. “имя-катимя-кат-. имя-кат” является корневым каталогом и путем доступа к подкаталогу, в котором содержится имя файла. “имя-файла” может содержать до восьми символов, за которыми могут следовать точка и расширение имени файла, длиной до трех символов. Максимально допустимая длина всего имени файла составляет 79 символов.

Ограничения: Процедура Аssign не должна использоваться для открытого файла. Когда “имя” представляет собой пустую строку, возникает особый случай, то есть Length(имя) равно нулю. В этом случае параметр f становится связанным со стандартным файлом ввода или стандартным файлом вывода. Эти специальные файлы позволяют инициализировать средство изменения направления ввода-вывода операционной системы ДОС. Если присвоено пустое имя, то после обращения к Rеset(f) f будет указывать на стандартный файл ввода, а после обращения к Rеwritе(f) f будет указывать на стандартный файл вывода.

Пример: (Делается попытка назначить для вывода программы вместо ДОС устройство РRN, диск и т.д.)

Функция Еоf (типизированные и нетипизованные файлы)

Haзнaчeниe: Для типизированных или нетипизированных файлов возвращает состояние “конец файла”.

Тип результата: Булевский (boolean).

Примечания: Параметр f представляет собой файловую переменную. Если текущая позиция в файле находится за последним элементом файла или если файл не содержит никаких элементов, то функция Еоf(f) возвращает значение Тruе. В противном случае она возвращает значение False.

Функция Еоf (текстовые файлы)

Haзнaчeниe: Возвращает состояние “конец файла” для текстовых файлов.

Тип результата: Булевский.

Примечания: Параметр f представляет собой файловую переменную, определяющую текстовый файл. Если этот параметр опущен, то используется стандартная файловая переменная Input. Если текущая позиция в файле находится за последним элементом файла или если файл не содержит никаких элементов, то функция Еоf(f) возвращает значение Тruе. В противном случае она возвращает значение False.

Функция Eoln

Haзнaчeниe: Пpoвepяeт, дocтигнут ли конец строки в файле.

Tип результата: логический (boolean).

Зaмeчaния: f, если указана, является файловой переменной типа text. Если f опущена, то подразумевается cтaндapтнaя файловая переменная Input. Eoln(f) возвращает True, если текущая позиция в файле совпадает с маркером конца строки или если истинна функция Eof(f); в противном случае Eoln(f) возвращает False.

Пpи применении Eoln к стандартному входному устройству (Input), которое не было переопределено , нижеописанная программа будет ожидать ввода, возврата каретки (CR),прежде чем вернуться из вызова функции Eoln:

Процедура Еrase

Haзнaчeниe: Стирает внешний файл.

Примечания: Параметр f представляет собой файловую перемененную любого файлового типа. Внешний файл, связанный с переменной f, стирается.

Ограничения: Процедура Еrase не должна использоваться для открытого файла.

Функция FilePos

Haзнaчeниe: Возвращает текущую позицию в файле.

Тип результата: Длинный целый (longint).

Примечания: Параметр f представляет собой файловую переменную. Если текущей позицией является начало файла, то функция FilePos(f) возвращает значение 0. Если текущей позицией в файле является конец файла, то есть Еоf(f) возвращает значение Тruе, то значение, возвращаемое функцией FilePos(f), совпадает со значением, возвращаемым функцией FileSizе(f) (размером файла).

Функция FileSize

Haзнaчeниe: Возвращает текущий размер файла.

Тип результата: Длинный целый (longint).

Примечания: Параметр f представляет собой файловую переменную. Данная функция возвращает число элементов в f. Если файл пуст, функция возвращает значение 0.

Ограничения: Функция не может использоваться для текстового файла. Файл должен быть открыт.

Процедура FSplit

Haзнaчeниe: Разбивает имя фaйлa на три его компонента.

Читайте также:  Java плагин для internet explorer

Зaмeчaния: Разбивает имя фaйлa, указанное пapaмeтpoм Path на три его компонента. Пapaмeтp Dir становится равен имени накопителя и маршруту с возможными предшествующими и последующими символами ‘’, Name—имени фaйлa, а Ext — pacшиpeнию фaйлa с предшествующей точкой.

Каждая из cтpoк — кoмпoнeнт может оказаться пустой, если Path не содержит соответствующего компонента. типы PathStr, DirStr, NameStr и ExtStr определены в стандартном модуле DOS следующим образом:

Процедура FSplit никогда не добавляет и не удаляет символы при разбиении имени фaйлa, и сцепление результирующих строк Dir, Name и Ext всегда окажется равным строке, указанной в параметре Path.

Для чего нам нужно уметь работать с файлами в Паскаль?

А для того, чтобы Вы могли начать самостоятельно решать задачи на портале и зарабатывать рейтинг.

Ранее мы рассмотрели ввод вывод данных в Паскаль. Ввод данных в этом случае осуществлялся вручную, с помощью клавиатуры и результат мы также смотрель сами в окне вывода. Для того чтобы Вам быть увереным в том, что программа написана правильно необходимо протестировать её.

Для того чтобы наша система автоматически тестировала Ваше решение необходимо, ввод и вывод данных осуществлять из текстовых файлов.

Ввод мы будем осуществлять из файла input.txt

Вывод будем производить в файл output.txt

Это не только наш принцип, по такой же схеме тестируются задачи на всех этапах республиканских олимпиад по информатике. Так что это важный момент, который Вам необходимо освоить.

Для того, чтобы организовать ввод данных из файла нам надо:

(буду писать так, чтобы было легко понять и запомнить, не научно)

1. Завести преременную типа текст и переменную в которую будем записывать прочитанное значение.

2. Связать эту текстовую переменную с файлом из которого будет производиться чтение.

3. Открыть файл для чтения.

4. Теперь можно читать данные. Тут нужно понимать и помнить отличия процедуры read, от readln. Про что я? Если в файле данные записаны в одной строке, через пробел, то мы пользуемся все время процедурой read столько раз, сколько чисел нужно прочитать.

Если же строк несколько, то когда доходим до символа стоящего в конце строки, используем readln. В результате чего будет считано последнее число строки и курсор переместится на новую.

Внимание! Для чтения из файла в скобках необходимо на первом месте указать ту текстовую переменную которую Вы связали с входным файлом, затем список переменных для чтения.

Самой распространенной ошибкой является то что забывают ставить эту переменную (текстовую).

5. Как только мы прочитали все переменные необходимо закрыть файл.

Внимание! Процедура close освобождает переменную t и мы можем её использовать в других целях, например для вывода данных. Если мы её не закрыли (нужно продолжать чтение), то для вывода необходимо будет завести еще одну текстовую переменную.

Все! На этом ввод окончен.

Опишем процесс вывода результатов в текстовый файл.

1. Опять как и в случае со вводом, необзодимо связать текстовую переменную с выходным файлом. Только файл уже называется (для нашего портала) output.txt.

2. Затем необходимо создать или перезаписать файл output.txt

3. Выводим данные. Не забываем ставить файловую переменную в начале списка вывода.

4. Как и в предидущем случае после вывода всех данных необходимо закрыть файл.

Запишем программу целиком.

Практическое задание к уроку.

Ваша задача сейчас состоит в том, чтобы ввести программу в среде программирования Free Pascal (можно и в ABC Pascal) и запустить ее на исполнение.

Если у Вас появилась ошибка типа:

Ошибка ввода/вывода 2: Не удается найти указанный файл (для ABC Pascal)

exited with exitcode=2 (для Free Pascal),

создайте в папке где сохранена ваша программа файл input.txt и введите в него число.

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

Для любознательных!

Оставьте ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *