Файлы в языке Turbo Pascal
Файл - именованная область памяти на магнитном носителе. Программирование доступа к файлу в языке Turbo Pascal. Описание файловой переменной. Виды файлов в зависимости от способа описания: текстовые, двоичные или типизированные и нетипизированные.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | реферат |
Язык | русский |
Дата добавления | 19.01.2009 |
Размер файла | 14,8 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
16
Министерство образования и науки Украины
ГФУИПА
Кафедра ИТ
РЕФЕРАТ
На тему: “Файлы в языке Turbo Pascal”
Выполнил: ст. гр.
Проверил:
г. Стаханов, 2008
СОДЕРЖАНИЕ
Что такое файл в языке Turbo Pascal? 3
Программирование доступа к файлу в языке Turbo Pascal 3
Вывод 15
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ 16
Что такое файл в языке Turbo Pascal?
Под файлом понимается именованная область памяти на магнитном носителе, используемая для долговременного хранения некоторой логически связанной информации. В эту область внешней памяти можно как поместить определенные данные, так и извлечь их из нее. Эти действия имеют общее название - ввод-вывод.
Программирование доступа к файлу в языке Turbo Pascal
Программирование доступа к файлу в языке Turbo Pascal начинается с описания файловой переменной (переменной файлового типа). Это описание строится с помощью служебного слова file, после которого (после служебного слова of) может быть указан тип отдельных элементов файла, например:
var
F: file of integer;
При необходимости можно отдельно определить некоторый файловый тип, которым в дальнейшем пользоваться при описании файловых переменных:
type
RecordFile = file of record
А, В: real;
end;
var
Fl, F2: RecordFile;
В зависимости от способа описания можно выделить текстовые (text) файлы, двоичные или типизированные (file of) и нетипизированные (file). Вид файла определяет способ хранения информации в файле.
Текстовый файл является файлом последовательного доступа, и его можно представить как набор строк произвольной длины. Логически последовательный файл можно представить как именованную цепочку байтов, имеющую начало и конец. Последовательный файл отличается от файлов с другой организацией тем, что чтение (или запись) из файла (в файл) ведутся байт за байтом от начала к концу.
Очень важно различать собственно файл (область памяти на магнитном носителе с некоторой информацией) и переменную файлового типа в некоторой Turbo Pascal-программе. Считается, что файловая переменная является представителем некоторого дискового файла в программе. Для того чтобы реализовать доступ к файлу на магнитном диске, программа должна связать его с файловой переменной. Для этого необходимо сопоставить переменную с именем файла. Это имя представляется в виде строки, содержащей полное имя файла и, быть может, цепочку объемлющих каталогов и обозначение дисковода. Такая строка носит название маршрута (или пути) к файлу и формируется по общим правилам MS-DOS.
Связывание маршрута и файловой переменной производится стандартной процедурой Assign, которой передаются два параметра: имя переменной файлового типа и строка с именем (маршрутом) дискового файла, например:
Assign (F, 'с: \books\book4\test3. раз ');
Помимо маршрута, во втором параметре может быть указано условное (символическое) обозначение некоторого “псевдофайла” MS-DOS, то есть файла, связанного с конкретным физическим устройством. Допускаются имена, в основном совпадающие с принятыми в MS-DOS обозначениями (`con' - консоль, то есть экран дисплея и/или клавиатура, `lpti' или `prn' - печатающее устройство и т.д.).
До тех пор, пока файловая переменная не связана с каким-либо дисковым файлом, никакие операции с ней в программе невозможны.
Заметим, что можно связать файловую переменную с еще не существующим дисковым файлом. Это может быть оправдано для случая последующего создания Turbo Pascal-программой файла с данным именем с помощью некоторой системной процедуры.
После того, как файловая переменная с помощью процедуры Assign связана с конкретным дисковым файлом, можно выполнить любую допустимую операцию с ним. Здесь рассмотрим две операции общего характера, позволяющие переименовывать и уничтожать существующие дисковые файлы. Такие операции выполняются системными подпрограммами Rename и Erase со следующими спецификациями:
Rename (var f; nevname: string);
Erase (var f);
Основным параметром этих процедур является файловая переменная (она может идентифицировать файл любого типа, и к ней должна была быть ранее применена процедура Assign), а процедуре Rename дополнительно передается новое имя файла. Действие указанных процедур основывается на соответствующих DOS-функциях и функционально эквивалентно командам ren и del командного процессора.
Каждой программе доступны два стандартных файла input (клавиатура) и output (экран). Это - текстовые файлы. Любые другие файлы становятся доступными после выполнения специальных процедур. Рассмотрим основные процедуры для работы с текстовыми файлами.
Связывание файловой переменной с именем файла осуществляется с помощью встроенной процедуры assign:
assign(<ф. п. >,<имя файла или лог. уст-во>)
где <ф. п. > - правильный идентификатор, объявленный в программе как переменная файлового типа;
<имя файла или лог. уст-ва> - текстовое выражение, содержащее имя файла или логического устройства. Если имя файла задается в виде пустой строки, например assign(f,''), то файловая переменная связывается со стандартным файлом input или output.
Процедура открытия файла по чтению:
reset (<ф. п. >);
reset - ключевое слово (пер. с англ.: устанавливать);
<ф. п. > - файловая переменная.
При выполнении этой процедуры файл подготавливается к чтению: внутренняя переменная, её называют указатель файла, устанавливается на начало файла, т.е. на его первую компоненту.
Процедура открытия файла по записи:
rewrite(<ф. п. >);
При выполнении процедуры rewrite файл подготавливается к записи информации в начало файла. Процедура очищает файл (т.е. если в файле уже была информации, то она будет потеряна) и устанавливает указатель файла на первую компоненту.
Для чтения и записи информации из файла или в файл используются известные процедуры: read, readln и write, writeln в которых в качестве первого параметра выступает файловая переменная. Например:
write(f,x1,x2,x3) - процедура записи в файл f компонентов x1,x2,x3. Процедура записывает выражения х1, х2, х3 по одному в файл f, начиная с того места, куда был установлен указатель файла в момент обращения к процедуре write. Аналогично работают остальные процедуры ввода и вывода.
При заполнении файла после последней записи автоматически помещается специальный невидимый признак "конец файла" (end of file). Существует функция eof(f), тестирующая конец файла, связанного с файловой переменной f. Функция eof(f) возвращает значение true, если действительно встретился признак конец файла; пока это не произойдет значение eof(f) будет false.
Функция eoln(f) тестирует, встретился ли конец строки (end of line) в файле, связанном с файловой переменной f. При заполнении строки после последней записи автоматически помещается специальный признак конец строки. Функция eoln(f) возвращает значение true, если действительно встретился признак " конец строки". Этот признак формируется при нажатии клавиши "ввод".
close(f) - процедура закрытия файла, связанного с файловой переменной f. Функции процедуры close выполняются автоматически по отношению ко всем открытым файлам при нормальном завершении программы.
Процедура append(f) инициирует запись в ранее существовавший текстовый файл, связанный с файловой переменной f, для добавления новых строк в конец файла.
Рассмотрим пример. В произвольной непустой последовательности чисел, хранящейся в текстовом файле f, подсчитать количество положительных компонент.
{В текстовом файле хранятся вещественные числа, разделенные пробелами. }
program pr30;
var f: text; {Файловая пеpеменная}
a: real; {Буфеpная пеpеменная}
k: integer; {Количество положительных компонент}
begin
assign(f,'f. dat');
reset(f); {Откpыть файл по чтению}
while not eof(f) do {Пока не конец файла}
begin
read(f,a); {Читаем число из файла}
if a>0 then k: =k+1; {Вычисляем количество
положительных компонент}
if eoln(f) then readln(f); {Если конец стpоки,
то пеpеводим указатель файла на следующую стpоку }
end;
writeln('k=',k);
end.
Следующая программа работает с двумя текстовыми файлами: один из них открывается по чтению, а другой - по записи. Строки первого файла кодируются путем замены кода символа следующим кодом из таблицы ASCII и записываются во второй файл [5].
program pr31;
var oldf,newf: text; {Файловые пеpеменные для
стаpого и нового файлов}
oldn,newn: string; {Стpоковые пеpеменные, для хранения
имен нового и стаpого файлов}
line: string; {Буфеpная пеpеменная для
хpанения кодиpуемой стpоки}
c: integer; {Пеpеменная цикла}
begin
writeln('Введите имя кодиpуемого файла');
readln(oldn);
writeln('Введите новое имя');
readln(newn);
assign(oldf,oldn);
assign(newf,newn);
reset(oldf); {Откpыть стаpый файл по чтению}
rewrite(newf); {Откpыть новый файл по записи}
while not eof(oldf) do
begin
readln(oldf,line); {Читаем стpоку из стаpого файла}
for c: =1 to length(line) do {Кодиpуем стpоку}
if ord(line [c]) =255 then line [c] : =chr(0)
else
line [c] : =succ(line [c]);
writeln(newf,line); {Закодиpованную стpоку пишем в файл}
end;
close(newf)
end.
Следующий пример демонстрирует работу с текстовыми файлами, содержащими данные типа record.
В непустом текстовом файле хранятся данные о группе студентов: фамилии, оценки по физике, математике, программированию. Подсчитать средний балл группы и определить фамилию cтудента с максимальным средним баллом. Когда в файле хранятся данные типа record, следует оговорить его структуру. В приведенном ниже примере в каждой строке хранится фамилия одного студента и три его оценки; при этом под фамилию отводится не более 10 позиций (если фамилия короче, то дополняется пробелами), а оценки отделяются друг от друга пробелами.
Текст программы предлагается в примере pr32.
program pr32;
type student = record
fam: string [10];
fiz,mat,prog: byte;
end;
var ved: student; {Буфеpная пеpеменная для
хpанения данных о студенте}
k: integer; {Количество студентов в гpуппе}
ss,{Сpедний балл каждого студента}
sg,{Сpедний балл гpуппы судентов}
max: real; {Максимальный сpедний балл студента}
f4: text; {Файловая пеpеменная}
maxfam: string [10]; {Фамилия студента
с максимальным сpедним баллом}
begin
assign (f4,'f4. dat');
reset (f4); {Откpыть файл по чтению}
sg: =0; k: =0; max: =0;
while not eof (f4) do {Пока не конец файла}
with ved do
begin
read (f4,fam); {Чтение файла}
readln (f4,fiz,mat,prog);
ss: =(fiz+mat+prog) /3; {Вычисляем сpедний балл
каждого студента}
if ss>max then {Опpеделяем фамилию студента}
begin { с максимальным сpедним баллом}
max: =ss;
maxfam: =fam;
end;
sg: =sg+ss;
k: =k+1
end;
sg: =sg/k;
writeln('Сpедний балл в гpуппе=',sg);
writeln('Максимальный сpедний балл у студента', maxfam)
end.
Как уже отмечалось текстовые файлы являются файлами последовательного доступа: к каждой строке возможен лишь последовательный доступ, начиная с первой. Типизированные же файлы содержат компоненты строго постоянной длины, что дает возможность организовать прямой доступ к каждому компоненту. Для этой цели служит встроенная процедура seek:
seek(<ф. п. >,<n компонента>)
Здесь <n компонента> - выражение типа longint, указывающее номер компонента.
Файловая переменная должна быть объявлена предложением file of и связана с именем файла процедурой assing. Файл необходимо открыть процедурой rewrite или reset. Для чтения и записи в типизированный файл используются известные процедуры read и write.
Специфика использования двух последних процедур при работе с типизированными файлами состоит в том, что список ввода содержит одну или несколько переменных такого же типа, что и компонент файла, а список вывода одно или несколько выражений такого же типа, что и компонент файла.
Функция filesize возвращает значение типа longint, содержащее количество компонентов файла:
filesize(<ф. п. >)
Функция filepos возвращает значение типа longint, содержащее порядковый номер того компонента файла, который будет обрабатываться следующей операцией ввода-вывода:
filepos(<ф. п. >)
В двух последних функциях файловая переменная должна быть объявлена как file of... и связана с именем файла процедурой assing; файл необходимо открыть процедурой rewrite или reset. Первый компонент типизированного файла имеет порядковый номер 0. Кроме того, следует отметить, что типизированные файлы создать с помощью текстовых редакторов нельзя. Типизированные файлы создаются только в процессе работы программы. Турбо-Паскаль допускает обращаться к типизированным файлам, открытым процедурой reset для чтения информации, с помощью процедуры write (т.е. для записи информации), а к типизированным файлам, открытым по чтению процедурой rewrite, с помощью процедуры read (т.е. для чтения информации).
Для примера работы с типизированными файлами решим задачу создания двоичного файла и обработки двоичного файла, содержащего данные о группе студентов: фамилия, экзаменационные оценки по физике, математике и программированию. Вывести на экpан данные о студентах в поpядке неубывания сpеднего балла. Для соpтиpовки использовать двоичный файл.
program pr33;
type student=record{Тип компонентов, хpанящихся
в двоичном файле}
fam: string [10];
fiz,mat,pr: byte;
sr: real;
end;
var f: file of student; {Файловая пеpеменная двоичного файла}
f0: text; {Файловая пеpеменная текстового файла}
ved,ved1,min: student; {Буфеpные пеpеменные}
n, {Количество компонент двоичного файла}
minn: longint; {Hомеp компонента с минимальным
сpедним баллом}
i, j: integer;
begin
assign(f,'f. dat');
assign(f0,'f0. dat');
reset(f0); {Откpытие текстового файла по чтению}
rewrite (f); {Откpытие двоичного файла по записи}
while not eof (f0) do {Цикл, оpганизован для }
begin
with ved do
begin
read (f0,fam); {чтения из текстового файла,}
readln(f0,fiz,mat,pr);
sr: =(fiz+mat+pr) /3; {вычисления сpеднего балла и }
end;
write (f,ved) {записи в двоичный файл
по одной компонете}
end;
{___Соpтиpовка____}
n: =filesize (f); {Количество компонент двоичного файла}
for i: =0 to n-2 do
begin
seek (f, i);
read (f,ved);
min: =ved; {Пpедполагаем, что i-я компонента файла }
minn: =i; { имеет минимальный сpедний балл, сpеди компонент, следующих за i-1}
for j: =i+1 to n-1 do{Цикл, позволяющий опpеделить, есть}
begin { ли далее в файле компоненты с меньшим}
read (f,ved1); { сpедним баллом}
if min. sr>ved1. sr then
begin
min: =ved1;
minn: =j;
end;
end;
seek (f,minn); { Меняем местами}
write (f,ved); {в двоичном файле}
seek (f, i); {i-ю компоненту}
write (f,min); {и минимальную компоненту}
end;
seek (f,0);
for i: =0 to n-1 do{Вывод двоичного файла на экpан}
begin
read (f,ved);
writeln(ved. fam,ved. mat,ved. fiz,ved. pr,ved. sr);
end;
end.
Анализируя приведенную выше программу, можно заметить, что благодаря прямому доступу к компонентам двоичного файла, работать с такими файлами также легко, как и с массивами.
Вывод
Файл - это именованная область памяти на магнитном носителе, используемая для долговременного хранения некоторой логически связанной информации. В зависимости от способа описания можно выделить текстовые (text) файлы, двоичные или типизированные (file of) и нетипизированные (file). Вид файла определяет способ хранения информации в файле. Текстовый файл является файлом последовательного доступа, и его можно представить как набор строк произвольной длины. Последовательный файл отличается от файлов с другой организацией тем, что чтение (или запись) из файла (в файл) ведутся байт за байтом от начала к концу. Для того чтобы реализовать доступ к файлу на магнитном диске, программа должна связать его с файловой переменной. Для этого необходимо сопоставить переменную с именем файла. Это имя представляется в виде строки, содержащей полное имя файла и, быть может, цепочку объемлющих каталогов и обозначение дисковода. Такая строка носит название маршрута (или пути) к файлу и формируется по общим правилам MS-DOS.
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ
Учебное пособие по Turbo Pascal 7.0;
Владимир Попов. Паскаль и Дельфи. Самоучитель. - Питер, 2003 г., 544 с.;
Потопахин В.В. Turbo Pascal: решение сложных задач. - Издательство "БХВ-Петербург", 2006,208 с.;
Шпак Ю.А. Turbo Pascal 7.0 на примерах. - Издательство "Юниор", 2003,498 с.;
Фаронов В.В. Turbo Pascal Наиболее полное руководство в подлиннике. - Издательство "ОМД Групп" 2003,1054 с.
Подобные документы
Характеристика вычислительной системы и инструментов разработки. Программирование на языке Pascal в среде Turbo Pascal и на языке Object Pascal в среде Delphi. Использование процедур, функций, массивов, бинарного поиска. Создание базы данных в виде файла.
отчет по практике [2,1 M], добавлен 02.05.2014История создания и развитие Pascal. Особенности пакета программирования Turbo. его возможности редактора текстов, компилятора и отладчика. Построения программы на языке Turbo Pascal, ее структура, типы алгоритмов, одномерные и многомерные массивы.
курсовая работа [519,3 K], добавлен 25.06.2011Структура и основные элементы языка Turbo Pascal. Алгоритм составления простейших программ на Turbo Pascal. Применение условного оператора и сильноветвящихся алгоритмов. Циклы с предусловием и постусловием, сочетание циклических и условных операторов.
реферат [64,0 K], добавлен 20.03.2016Основы работы на языке высокого уровня Turbo Pascal. Основное оборудование и программное обеспечение. Операторы, необходимы для работы в графической среде Turbo Pascal. Запуск графического режима. Текст программы в графической среде Turbo Pascal.
лабораторная работа [12,7 K], добавлен 14.05.2011Анализ эффективности методов сортировки данных в языке Turbo Pascal. Разработка эскизного и технического проекта программы. Сортировка без и с использованием дополнительной памяти, за исключением небольшого стека (массива). Сортировка связанных списков.
курсовая работа [359,0 K], добавлен 23.05.2012Программирование и структура программы на языке Turbo Pascal и MS Visual C++6.0. Вычисление площади круга. Реализация программы в системе Turbo Pascal и MS VISUAL C++6.0 для Windows. Структура окна ТРW. Сохранение текста программы в файле на диске.
лабораторная работа [3,7 M], добавлен 22.03.2012Информационные технологии и защиты данных. Методы защиты информации. Виды информационной безопасности и умышленные угрозы. Программирование на языке Turbo Pascal. Типы числовых данных. Функции ввода и вывода. Логические операторы, символьные переменные.
курсовая работа [1,7 M], добавлен 16.05.2016Работа с файлами на языке Pascal. Типы файлов: типизированные, текстовые, нетипизированные. Сущность процедуры и функции. Использование процедуры Read и Write для операций чтения и записи в типизированном файле. Листинг программы и экранные формы.
лабораторная работа [38,4 K], добавлен 13.02.2009Разработка программ на языке Turbo Pascal на основе использования массивов данных. Особенности хранения данных, способы объявления переменных, действия над элементами массивов, их ввод и вывод. Практическое применение одномерных и многомерных массивов.
методичка [17,8 K], добавлен 25.11.2010Написание программы "телеграф", который принимает от пользователя сообщения и выводит его на экран в виде последовательности точек и тире. Их вывод сортируется звуковым сигналом соответствующей длительности. Программа написана на языке Turbo Pascal.
курсовая работа [565,6 K], добавлен 18.08.2008