Файловый тип данных

Download Report

Transcript Файловый тип данных

Файловый тип данных
Файл – это область памяти на внешнем
носителе, в которой хранится некоторая
информация.
Файл – это набор данных, хранящихся во
внешней памяти компьютера под заданным
именем.
File(англ.) – подшивка, картотека.
1
Особенности файлового типа данных
Каждому файлу при создании указывается имя,
поэтому одна программа может одновременно
работать с несколькими файлами.
Длина файла – это число его элементов
(компонентов). При создании файла длина файла
заранее не задается и ограничивается только
емкостью устройств внешней памяти. Файл может
быть пустым, его длина в этом случае – ноль.
2
Файловый тип данных удобно использовать…
 Если заранее создать файл данных, которые
затем многократно используются для
ввода.
 Программа, работающая с файлами данных,
достаточно автономна и не требует
присутствия пользователя.
 Файл данных может быть посредником по
обмену данными между двумя разными
задачами.
 Файл может быть средством связи
программы с внешней средой.
3
Файлы и массивы
Достоинства:
Недостатки:
- Размер можно
- Операции с файлами
увеличивать - уменьшать в
выполняются медленнее,
ходе выполнения
так как файлы хранятся
программы; (размер
на внешнем носителе.
массива оговаривается
(Массив хранится в
заранее)
оперативной памяти)
- Файлы позволяют
сохранять информацию
для последующего
использования в том
числе и другими
программами. (Массив
после работы программы
удаляется из памяти)
4
Текущий указатель
С каждым файлом можно связать понятие – текущий указатель
(0)
(1)
…
(k)
(k+1)
…
Eof
Указатель файла ведет себя подобно курсору, который
все время показывает текущую позицию
Действия с файлами производятся поэлементно, причем в
них участвует тот элемент, на который смотрит указатель
текущей позиции файла, перемещающийся в результате
выполнения действия на следующий элемент. При
открытии или создании файла указатель помещается в его
5
начало.
Виды файлов
В Turbo Pascal имеется три вида файлов:
Виды файлов
Текстовый
файл
Типизированный
файл
Нетипизированный
файл
6
Файлы различаются по способам доступа
к элементам файла
По способам
доступа
Файлы
последовательного
доступа
Файлы
прямого
доступа
7
Текстовый файл
- это последовательность символов кодовой
таблицы компьютера (char), разделенная на строки
произвольной длины. В конце каждой строки стоит
признак “конца строки” (eoln). В конце файла –
конец файла (eof). Они используются для хранения
текстов.
(Например, программ Turbo Pascal).
Особенность текстовых файлов:
При чтении и записи числа преобразуются
автоматически.
10
Описание
Файловые переменные текстового типа могут быть описаны
в программе либо явно в разделе переменных Var,
либо с использованием раздела типов Type.
В разделе переменных:
Var <имя файла>: Text;
Например,
Var F1: Text;
В разделе типов:
Type FileF = Text;
Var F1, F2: FileF;
11
Обработка файлов
В Паскале файл является некоторой переменной,
поэтому ей можно присвоить имя. С другой стороны
существует операционная система, которая, в свою
очередь, использует имена файлов. Поэтому необходимо
установить связь между переменной-файлом в Паскале и
именем файла, присвоенного операционной системой.
Assign(<имя переменной-файла>,’<имя внешнего файла>’);
Процедура устанавливает соответствие между файловой
переменной и внешним файлом: Например,
Assign(F1,’D:\Data\init.dat’);
Такое соответствие обозначает, что все операции, выполняемые над
переменной F1, будут выполняться над файлом, хранящимся на диске
D: в каталоге ‘Data’ и имеющим имя ’init.dat’
Чтение из файла
- ввод данных из внешнего файла, находящегося
на диске, в оперативную память машины.
1. Открыть файл для чтения – процедура:
ReSet(<имя-переменной файла>);
2. Прочитать данные файла в программу,
последовательно читая элементы – процедура:
Read(<имя-переменной_ файла>,<элемент>);
Элемент должен быть того же типа, что и
компоненты файла.
(Например: … Reset(F1); … Read(F1,x);… )
15
Запись в файл
вывод результатов программы из оперативной
памяти ЭВМ на диск, т.е. создание нового
файла на внешнем устройстве.
1. Открыть файл для записи – процедура:
ReWrite(<имя-переменной файла>);
2. Записать данные в файл, при этом запись идет
поэлементно – процедура:
Write(<имя-переменной_ файла>,<элемент>);
Элемент должен быть того же типа, что и
компоненты файла.
-
(Например: … Rewrite(F2); … write(F2,x);… )
16
Закрытие файла
Процедура:
Close(<имя-переменной файла>); Например: Close(F1);
Общая форма чтения файла имеет вид:
ReSet(<имя-переменной файла>);
…
Read(<имя-переменной_ файла>,<элемент>);
…
Close(<имя-переменной файла>);
Общая форма записи в файл имеет вид:
ReWrite(<имя-переменной файла>);
…
Write(<имя-переменной_ файла>,<элемент>);
…
Close(<имя-переменной файла>);
17
(Многоточием отмечено наличие других операторов в программе)
Признак конца файла
Так как , по определению, число элементов
файла не задается заранее, то в языке
Паскаль введен признак конца файла – Eof
(End Of File). Это логическая функция:
Eof(<имя-переменной файла>);
Если конец файла достигнут, она принимает
истинное значение ‘TRUE ’, и ложное
значение ‘FALSE ‘ – в противном случае.
… While Not EOF(<имя-переменной файла>) Do
…;
{Например, читать данные из файла “пока не конец файла”}
Пример.
Дан текстовый файл, содержащий только
целые числа, в каждой строке может быть
несколько чисел, которые разделяются
пробелами.
Вывести на экран все числа, с учетом
разбиения их на строки и подсчитать
количество элементов в каждой строке.
19
Решение
Пусть в файле содержится следующая информация:
-32 16 0 8 7
4 5 9 13 11 -5 -8
6 -8 0 -12
1 2
-1 -2 -4
-1 -2 4
Этот файл можно создать в среде Turbo Pascal:
• Создать новый файл (Меню File, команда New);
• Записать числа в строках через пробелы;
• Сохранить его, например: ‘d:\Data\int1.dat‘
Аналогично файл можно создать в среде «Блокнот»
20
‘d:\Data\int1.txt‘
program Ex1;
Var f:text; x,k:integer;
begin
Assign(f,‘d:\Data\int1.dat'); {связываем с внешним файлом}
reset(f);
{открываем для чтения}
while not eof(f) do
{пока не конец файла}
Begin
k:=0; {начальное количество элементов строки}
while not eoln(f) do {пока не конец строки}
begin
read(f,x); {считываем очередное число}
write(x,' '); {вывод его на экран}
inc(k)
{увеличиваем счетчик (k)}
end;
writeln(' В строке ',k,‘ элементов');
readln(f)
{переходим к следующей строке файла }
end;
close(f);
{закрываем файл}
readln
21
end.
Задача.
Элементы одномерного массива
(N
чисел) считать из файла. В файле числа
расположены в одной строке. Первое число
N – количество элементов. Далее через
пробел – элементы массива.
Посчитать сумму элементов
получившегося массива. Записать
элементы этого массива в другой файл и в
конце приписать получившуюся сумму. Все
элементы в новом файле расположить по
одному в строке.
22
Задача.
Дан текстовый файл, содержащий программу на языке
Паскаль. Проверить эту программу на несоответствие числа
открывающих и закрывающих круглых скобок.
Считать, что каждый оператор программы занимает не более
одной строки файла.
Program ex2;
var f:text; k1,k2,n: integer;
ch:char;
logic,lp:boolean;
begin
assign(f,'c:\Pascal\ex1.pas');
reset(f);
{Открываем файл для чтения}
n:=0;
{счетчик количества строк}
logic:=true; {пока ошибки не определены, то значение
TRUE}
23
while not eof(f) do {пока не конец файла}
begin
inc(n); {увеличиваем счетчик количества строк}
k1:=0; {счетчики количества открывающих скобок}
k2:=0; {................... закрывающих ......}
lp:=false; {Lp предназначена для определения ошибки }
{расстановки скобок в строке, начальное значение }
{‘false’, т.к. пока ошибки расстановки не было}
while not eoln(f) do {пока не конец текущей строки файла}
begin
read(f,ch); {очередной символ строки}
if ch='(' then inc(k1);{если встречена ‘(‘, - увеличиваем k1}
if ch=')' then if (k1<k2) then inc(k2) else lp:=true;
{если ‘)’ и она стоит не раньше ‘(‘, то есть значение k1<k2 ,}
{тогда увеличиваем счетчик k2 ,иначе lр даем TRUE}
end;
24
if (k1<>k2) or lp then {если не все закрывающие скобки }
{расставлены (K1<>K2) или одна из ‘)’ стоит}
{раньше‘(‘ - (lр=TRUE), то была ошибка расстановки}
begin
writeln(‘Ошибка в ',n,' строке');
logic:=false;
{Помечаем, что в строке была ошибка}
end;
readln(f)
{переходим в следующую строку файла}
end;
if logic then writeln(‘Скобки расставлены правильно');
{если значение logic остается истинным, то ошибок}
{расстановки не было}
close(f);
{закрываем файл}
readln
end.
25
Любой программе доступны стандартные текстовые
файловые переменные input и output.
Input (ввод) – доступный только для чтения файл.
Output (вывод) – только для записи файл.
Program primer;
var i,x,n:integer;
begin
assign(input,‘D:\Data\exemp_1.txt'); reset(input);
assign(output,‘D:\Data\exemp_2.txt'); rewrite(output);
read(n); {Считывает из файла ‘D:\Data\exemp_1.txt' первое число}
For i:=1 to n do
begin
read(x); {считывает последовательно из файла n чисел}
If x>0 then write(x:6); {Записывает в файл ‘D:\Data\exemp_2.txt‘
только положительные числа}
end;
close(input); close(output);
end.
26