Автор работы: Пользователь скрыл имя, 20 Марта 2012 в 22:50, курсовая работа
Введение файлового типа в язык ПАСКАЛЬ вызвано необходимостью обеспечить возможность работы с периферийными (внешними) устройствами ЭВМ, предназначенными для ввода, вывода и хранения данных.
Файл определяет упорядоченную совокупность произвольного числа однотипных компонент.
I. Теоретическая часть 3
1.1. Основные процедуры для работы с файлами 3
1.2. Текстовые файлы 5
1.3. Типизированные файлы 8
II. Практическая часть 10
ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ
ФИЛИАЛ ГОСУДАРСТВЕННОГО ОБРАЗОВАТЕЛЬНОГО УЧРЕЖДЕНИЯ
ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ ГОСУДАРСТВЕННОГО УНИВЕРСИТЕТА УПРАВЛЕНИЯ
В Г.ОБНИНСКЕ
Кафедра управления в экономических и социальных системах
Курсовой проект.
по дисциплине «Компьютерная подготовка»
на тему «Работа с файлами в среде Паскаль».
Выполнила студентка
очной формы обучения
специальности «Менеджмент организации»
специализации «Финансовый менеджмент»
I курса
Руководитель
Обнинск - 2008
Оглавление
I. Теоретическая часть
1.1. Основные процедуры для работы с файлами 3
1.2. Текстовые файлы
1.3. Типизированные файлы
II. Практическая часть
Основные процедуры для работы с файлами
Введение файлового типа в язык ПАСКАЛЬ вызвано необходимостью обеспечить возможность работы с периферийными (внешними) устройствами ЭВМ, предназначенными для ввода, вывода и хранения данных.
Файл определяет упорядоченную совокупность произвольного числа однотипных компонент.
Общее свойство массива, множества и записи заключается в том, что количество их компонент определено на этапе написания программы, тогда как количество компонент файла в тексте программы не определяется и может быть произвольным.
Понятие файла достаточно широко. Это может быть обычный файл на диске, коммуникационный порт ЭВМ, устройство печати, клавиатура или другие устройства.
При работе с файлами выполняются операции ввода - вывода. Операция ввода означает перепись данных с внешнего устройства (из входного файла) в основную память ЭВМ, операция вывода - это пересылка данных из основной памяти на внешнее устройство (в выходной файл).
Файлы на внешних устройствах часто называют физическими файлами.
С файловой системой TURBO PASCAL связано понятие буфера ввода - вывода. Ввод и вывод данных осуществляется через буфер. Буфер - это область в памяти, которая выделяется для каждого файла. При записи в файл вся информация сначала направляется в буфер и там накапливается до тех пор, пока весь объем буфера не будет заполнен. Только после этого или после специальной команды сброса происходит передача данных на внешнее устройство. При чтении из файла данные вначале считываются в буфер, причем данных считывается не столько, сколько запрашивается, а сколько поместится в буфер.
Внешняя память Оперативная память
Механизм буферизации позволяет более быстро и эффективно обмениваться информацией с внешними устройствами. Для работы с файлами в программе необходимо определить файловую переменную. Файловые переменные, которые описаны в программе, называют логическими файлами.
Все основные процедуры и функции, обеспечивающие ввод - вывод данных, работают только с логическими файлами. Физический файл должен быть связан с логическим до выполнения процедур открытия файлов.
TURBO PASCAL вводит ряд процедур и функций, применимых для любых типов файлов: Assign, Reset, Rewrite, Close, Rename, Erase, Eof, IOResult.
Процедура Assign
Assign (var f; FileName: String) связывает логический файл f с физическим файлом, полное имя которого задано в строке FileName. Будучи однажды установленной, связь между файловой переменной и физическим файлом сохраняется до следующего вызова Assign с той же файловой переменной f.
Процедура Reset
Reset (var f) открывает логический файл f для последующего чтения данных или, как говорят, открывает входной файл. Только после открытия файла становится возможным чтение данных. После успешного выполнения процедуры Reset файл готов к чтению из него первого элемента. Эта процедура фиксирует размер буфера файла. Процедура может применяться многократно к одному и тому же файлу. Если файл до этого был открыт, то он автоматически предварительно закрывается. Повторный вызов Reset переустановит последовательность чтения вновь на самый первый элемент файла, при этом потеря данных исключена.
Процедура ReWrite
ReWrite(var f) открывает логический файл f для последующей записи данных (открывает выходной файл). После успешного выполнения этой процедуры файл готов к записи в него первого элемента. Процедура также фиксирует размер буфера файла. Повторное обращение к ReWrite сотрет текущее содержимое файла и подготовит его к заполнению с первого элемента.
Процедура Close
Close (var f) закрывает открытый до этого логический файл. Вызов процедуры Close необходим при завершении работы с файлом.
Если по какой-то причине процедура Close не будет выполнена, файл все же будет создан на внешнем устройстве, но содержимое последнего буфера в него не будет перенесено, поэтому процедура особенно важна для файлов открытых для записи. Закрытие файла гарантирует сохранность и полноту заполнения. Однако попытка закрыть уже закрытый (или еще не открытый) файл вызовет сбой программы. Для входных файлов использование оператора закрытия файла необязательно.
Логическая функция EOF
EOF (var f): Boolean возвращает значение True , когда чтении достигнут конец файла. Это означает, что уже прочитан последний элемент в файле или файл после открытия оказался пуст. Иначе возвращает False.
Текстовые файлы
Особое место в языке ПАСКАЛЬ занимают текстовые файлы, компоненты которых имеют символьный тип. Для описания текстовых файлов в языке определен стандартный тип Тext, например
Var
t: Text;
Текстовые файлы представляют собой последовательность строк, а строки - последовательность символов. Строки имеют переменную длину, каждая строка завершается признаком конца строки (символ ASCII #13).
При записи в текстовый файл чисел, строк и логических значений они преобразуются в символьный (текстовый) вид. При чтении чисел и строк они автоматически преобразуются из текстового представления в машинное.
Другими словами, при вводе мы имеем дело с текстовым потоком. При пустом буфере оператор ввода инициирует передачу очередной порции текста в буфер (длина порции равна размеру буфера). По умолчанию значение размера буфера для текстового файла равно 128 байт. Если буфер не исчерпан, то передача данных ведется непосредственно из буфера.
Итак, в буфере имеется информация в текстовой форме. Далее по определенным правилам выделяется подстрока, представляющая значение очередной вводимой переменной. Эта подстрока преобразуется к типу вводимой переменной (если это возможно) и полученное значение (его машинное представление) заносится в поле вводимой переменной.
При выводе преобразуется форма представления значения выводимых переменных из машинной в строковую и полученная строка переносится в буфер. Если при этом буфер окажется заполненным, то произойдет перенос на диск.
Процедуры и функции для текстовых файлов
Процедура Append
Append (var f: Text) служит для специального открытия выходных файлов. Она применима к уже существующим физическим файлам и открывает их для дозаписи в конец файла, т.е. файл не стирается, как при вызове ReWrite. Новый файл может быть создан только процедурой ReWrite. Если Append применяется к несуществующему файлу, то возникает ошибка времени исполнения. А в остальном процедура Append ничем не отличаются от процедуры ReWrite.
Процедура Flush
Flush (var f: Text) применяется к открытым выходным файлам. Данные для записи накапливаются в буфере файла и только после полного его заполнения записываются в физический файл. Она же принудительно записывает данные из буфера в файл независимо от степени его заполнения. Процедура не закрывает файл и не влияет на последовательность вывода.
Функция EOLn
EOLn (var f: Text): Boolean возвращает True, если текущая позиция в файле – конец строки или конец файла, и False, если нет.
Функция SeekEOLn
SeekEOLn (var f: Text): Boolean возвращает значение True, если до конца строки остались только пробелы.
Функция SeekEOF
SeekEOF (var f: Text): Boolean возвращает значение True, если до конца файла остались строки, заполненные пробелами.
Операции ввода-вывода в текстовые файлы
Ввод и вывод числовой и текстовой информации в Турбо Паскале осуществляется процедурами:
ввод - Read(f,x) или Read(f,x1,x2,...,xn) и
Readln(f,x) или Readln(f,x1,x2,...,xn);
вывод - Write(f,x) или Write(f,x1,x2,...,xn) и
Writeln(f,x) или Writeln(f,x1,x2,...,xn).
Readln(f) - пропускает строку до начала следующей;
Writeln(f) - завершает строку файла, в которую производится запись, признаком конца строки и переходит к началу следующей.
Для работы с текстовыми файлами введена расширенная форма операторов ввода и вывода.
Оператор Read(f,x1,x2,...Xn) эквивалентен группе операторов
Begin
Read(f,x1);
Read(f,x2);
...........
Read(f,xn)
end;
Здесь f - текстовый файл, а переменные x1, x2,...xn могут быть либо переменными целого, действительного или символьного типа, либо строкой. При чтении значений переменных из файла они преобразуются из текстового представления в машинное.
При вводе из текстового файла, необходимо помнить правила чтения значений переменных. Когда вводятся числовые значения, два числа считаются разделенными, если между ними есть хотя бы один пробел, символ(ы) табуляции или символ(ы) конца строки.
Если читается символьное значение, то в соответствующую переменную запишется очередной символ за последним введенным до этого. Здесь уже нет никаких разделителей:
И, наконец, ввод строк. Начало строки идет сразу за последним, введенным до этого символом (с первой позиции, если соответствующая строчная переменная стоит первой в списке ввода). Считывается количество символов, равное объявленной длине строки. Но, если во время считывания попался символ 13 (конец строки), то чтение строки прекращается. Сам символ 13 (конец строки) служит разделителем строк и в переменную никогда не считывается.
Процедура ReadLn считывает значения в текущей строке и переводит позицию на начало следующей строки, даже, если в текущей строке остались непрочитанные данные.
Оператор Write(f,x1,x2,...xn) эквивалентен группе операторов
Begin
Write(f,x1);
Write(f,x2);
...........
Write(f,xn)
end;
Здесь f - также текстовый файл, но переменные x1,x2,...xn могут быть целого, действительного, символьного, логического типа или строкой. При записи значений переменных в файл они преобразуются из внутреннего представления в текстовый.
Процедура Write выводит данные в текущую строку и не закрывает ее, т.е. следующие данные запишутся в ту же строку. Формально во внешнем файле размер строки не ограничен.
Процедура WriteLn выводит именно строку данных и закрывает ее: приписывает символ 13 в ее конец (точнее, символы 13 и 10). Это автоматически открывает следующую строку.
Список вывода Write или WriteLn может содержать константы, переменные, выражения, вызовы функций - лишь бы они имели соответствующие типы и были разделены запятыми. Все, что стоит в кавычках или является строковыми (символьными) константами, выведется в том виде, в каком представлено.
Обмен с текстовым файлом более медленный из-за преобразования из текстового формата в формат, соответствующий типу вводимой переменной. Однако их легко создавать средствами любого текстового редактора, и с ними удобно работать, так как это визуальные файлы.
Типизированные файлы
Типизированный файл - это файл с объявленным типом его компонент. Другими словами, типизированный файл имеет очень четкую структуру. Между записями нет никаких разделителей. Перед первым обращением к процедурам ввода-вывода указатель файла стоит перед первой записью с номером 0.
Компонентные файлы состоят из машинных представлений значений переменных, они хранят данные в том же виде, что и память ЭВМ (т.е. в машинном формате). Значит, при вводе из файла не требуется преобразование формата, а, следовательно, операции обмена выполняются намного быстрее. Но, в отличие от текстового файла, типизированный файл создается только программой и его невозможно читать без предварительного перекомпилирования в текстовый файл.