Файловый тип данныхв Turbo Pascal
В английском языке слово "file" имеет вполне понятный смысл: "вереница", что очень хорошо отражает внутреннюю структуру любого файла.
Файл - это именно вереница символов, причем связанных в определенной последовательности: символы файла не могут по своему желанию перепрыгивать с одного места на другое.
Евграфова Ольга Владимировна, 2017 год
Общие положения
Множества значений или переменных с
одним общим именем называются структурированными (составными) типами.
Основные разновидности структурированных типов:
регулярный тип (массивы);
строки (одномерный массив из символов);
комбинированный тип (записи);
файловый тип (файлы);
множественный тип (множества).
Описание
Файл – это область памяти на внешнем носителе, в которой хранится некоторая информация.
В языке Паскаль файл представляет собой последовательность элементов одного типа.
В файлах последовательного доступа, чтобы получить доступ к элементу, необходимо последовательно просмотреть все предыдущие.
Объявление файловой переменной
Турбо Паскаль поддерживает три файловых типа: текстовые файлы, типизированные файлы, нетипизированные файлы.
VAR <имя>: FILE OF <тип>;
Например:
VAR SPISOK1: FILE;
VAR IMENA: FILE OF CHAR;
VAR SPISOK2: TEXT;
В разделе описания переменных:
TYPE DETI = RECORD
fio: STRING[25];
god: INTEGER;
END
VAR class: FILE OF DETI;
В разделе описания типов:
текстовый файл
типизированный файл
нетипизированный файл
Файл, в описании которого указывается тип элементов, называется типизированным. Все элементы файла пронумерованы начиная с нуля.
С каждым файлом связан так называемый файловый указатель. Это неявно описанная переменная, которая указывает на некоторый элемент файла. Все операции производятся с элементом, на который указывает файловый указатель.
(0)
(1)
(k)
(…)
(k+1)
(…)
Файловый указатель
Операции с файлами
Отождествление физического файла с файловой переменной в программе
ASSIGN (имя файловой переменной, имя файла);
Например:
Имя файловой переменной: spisok
Физическое имя файла: klass11A.txt
Тогда перед работой с файлом нужно выполнить процедуру:
ASSIGN (spisok, ‘ klass11A.txt ’);
Чтение из файла.
Под чтением из файла понимается пересылка данных из внешнего файла, находящегося на диске, в оперативную память.
Для чтения из файла необходимо:
1) открыть файл для чтения процедурой:
2) чтение данных из файла осуществить процедурой:
Примечание: переменные должны иметь тот же тип, что и компоненты файла.
READ (имя файловой переменной, список переменных);
RESET (имя файловой переменной);
Запись в файл.
Под записью в файл понимается вывод результатов программы из оперативной памяти ЭВМ в файл на диске.
Для записи в файл необходимо
1) открыть файл для записи процедурой
2) запись данных в файл осуществить процедурой
После работы с файлом его необходимо закрыть.
REWRITE (имя файловой переменной);
WRITE (имя файловой переменной, список значений);
если такого файла не существует, он будет создан;
если файл с таким именем уже есть, вся содержавшаяся в нем ранее информация исчезнет;
Закрытие файла.
После того как данные из файла прочитаны, его необходимо закрыть посредством процедуры
Признак конца файла.
Так как число элементов файла заранее не известно, необходимо уметь определять, что файл закончился. Для этого используется логическая функция
Она принимает истинное значение (True), если достигнут конец файла, и ложное (False) – в противном случае.
CLOSE (имя файловой переменной);
EOF (имя файловой переменной);
Пример 1
…….
Assign(F1, ‘A:\INT.DAT’);
{связываем файловую переменную с файлом на диске}
Reset(F1); {открываем файл для чтения}
While Not EOF(F1) Do
{пока не достигнут конец файла F1}
Begin
Read (F1, n); {считываем очередное число}
Write (n, ‘ ‘); {выводим его на экран}
End;
Close (F1); {закрываем файл}
……
Прочитать из файла целые числа и вывести их на экран:
Пример 2
Program Exampl_2;
Var F: File Of Integer;
n: Integer;
Begin
Assign (F, ‘DAN1.DAT’); {связываем файловую переменную
с файлом на диске}
Rewrite(F); {открываем файл для записи}
Writeln (‘Конец ввода чисел – 0’);
Repeat {пока не будет введен 0}
Writeln (‘Введите число’);
Readln(n); {Если введено число, отличное от 0, то записываем его в файл}
If n<>0 Then Write(F, n);
Until n=0; {Если введен 0, то выходим их цикла}
Close (F);
End.
Ввести с клавиатуры и записать в файл DAN1.DAT последовательность целых чисел. Признак конца ввода чисел - 0.
Текстовые файлы
Текстовые файлы – это файлы, содержащие символы, разделенные на строки.
Строки могут иметь различную длину, и в конце каждой строки стоит признак конца строки.
Для их описания используется служебное слово Text.
Var A: Text;
Для обработки текстовых файлов используются те же процедуры и функции, что и для обработки обычных типизированных файлов.
Обработка текстовых файлов
Для связывания файловой переменной с файлом на диске употребляется процедура Assign.
Для чтения данных применяется процедура Read.
Если необходимо после чтения данных перейти на следующую строку, то используется процедура Readln.
Процедура Write записывает данные в текущую строку.
Если надо записать данные и перейти к следующей строке, то можно использовать процедуру Writeln, которая записывает в файл признак конца строки и устанавливает файловый указатель на начало следующей строки.
Продолжение
Так как в строках может быть разное количество символов, имеется логическая функция:
Функция принимает значение True, если достигнут конец строки.
Кроме перечисленных процедур и функций, к текстовым файлам применяется процедура
Она открывает файл для "дозаписи", помещая файловый указатель в конец файла.
Eoln (<имя файловой переменной>);
Append (<имя файловой переменной>);
Пример 3
Создать текстовый файл, содержащий только целые числа (в каждой строке может быть несколько чисел), которые разделяются пробелом. Вывести на экран все числа с учетом разбиения на строки и подсчитать количество элементов в каждой строке.
Пусть в файле содержится информация:
1 2 3 4 5 6 7
-1 -2 -3 -4
-1 -2
Этот файл можно создать:
Создать новый файл (меню File команда New).
Записать все числа в строках через пробелы.
Сохранить его, например, A:\UNT1.TXT
Или написать программу для создания текстового файла.
Решение
Program Example_3;
Var F: Text; x, k: Integer;
Begin
Assign (F, 'UNT1.TXT'); {Связываем файловую
переменную с файлом на диске}
Reset (F); {Открываем файл для чтения}
While Not Eof(F) Do {Пока не достигнут
конец файла}
Begin
k:=0; {Счетчик элементов строки}
While Not Eoln(F) Do {Пока не конец строки}
Begin
Read(F, x) ; {Считываем очередное число}
Write(x,' '); {Выводим его на экран}
Inc(k); {Увеличиваем счетчик чисел}
End;
Writeln( ' В строке ', k, ' элементов') ;
Readln(F); {Переходим к следующей
строке файла}
End;
Close(F); {Закрываем файл}
Readln;
End.
Задача 2. В текстовом файле f.txt записаны (вперемешку) целые числа: поровну отрицательных и положительных. Переписать в текстовый файл h.txt все эти числа так, чтобы: порядок отрицательных чисел был сохранен; порядок положительных чисел был сохранен; любые два числа, стоящие рядом, имели разные знаки.
Решение….
Задача 3. В текстовом файле f1.txt записан зашифрованный русский текст. При шифровании каждую букву заменили на следующую за ней букву («я» заменяется на «а»). Получить в новом файле f2.txt расшифровку данного текста. Для упрощения будем считать, что текст записан строчными буквами.
Решение….
Способ №1 |
Program z1; |
Способ №2 |
Program z1; |
Рrogram z2; |
program zf1;
var f, g :text; al :string[33]; k :integer; sim1,sim2: char;
begin
assign(f,'f1.txt'); assign(g,'f2.txt');
reset(f); rewrite(g);
al:='абвгдеёжзийклмнопрстуфхцчшщъыьэюя';
while not eof(f) do begin
read(f,sim1); ; {Считываем очередной символ}
k:=pos(sim1,al); {Номер позиции в переменной al}
if k<>1 then sim2:=al[k-1]
else sim2:=al[33];
write(g,sim2); {Запись нового символа в файл}
end;
close(f); close(g);
End.
Домашнее задание_1
Заполнить файл последовательного доступа F целыми числами, полученными с помощью генератора случайных чисел. Получить в файле G те компоненты файла F, которые являются четными числами.
Заполнить файл последовательного доступа А целыми числами, полученными с помощью генератора случайных чисел. Получить в файле G все компоненты файла F, которые делятся на T и не делятся на P.
Записать в файл F последовательного доступа N натуральных чисел. Получить в другом файле последовательного доступа все компоненты файла F, кроме тех, которые кратны K. Вывести полученный файл на печать.
Заполнить файл f целыми числами, полученными с помощью генератора случайных чисел. Найти количество удвоенных нечетных чисел среди компонентов файла.
Домашнее задание_2
Создать файл и записать в него последовательность целых чисел (положительных и отрицательных). Для следующей части задачи количество чисел и диапазон значений чисел в файле неизвестно.
Подсчитать количество четных чисел в этом файле.
Найти среднее значение отрицательных чисел.
Сформировать файл, состоящий из тех чисел исходного файла, которые кратны 5, но не делятся на 10.
Сформировать файл, состоящий из тех чисел исходного файла, которые являются двузначными числами.
Найти наименьшее положительное число в файле.
Найти наибольшее четное число в файле.
Домашнее задание_3
В текстовом файле f.txt записаны (вперемешку) целые числа: поровну отрицательных и положительных. Переписать в текстовый файл h.txt все эти числа так, чтобы: порядок отрицательных чисел был сохранен; порядок положительных чисел был сохранен; любые два числа, стоящие рядом, имели разные знаки.
В текстовом файле содержится следующая информация об успеваемости учеников класса по информатике. В каждой строке записана фамилия, имя ученика и его оценки по информатике (разделителем является пробел). Например:
Новосельцев Дмитрий 4 3 5 5 5
Ученики могут иметь разное количество оценок.
Сформировать новый файл, в который нужно записать фамилию, имя ученика и среднюю оценку по информатике.
© ООО «Знанио»
С вами с 2009 года.