Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Описание файловых переменных

Поиск

1. для типизированных файлов

Var имя файловой переменной: file of тип компонент;

Type имя типа= file of тип компонент;

Var имя файловой переменной:имя типа;

где file, of - служебные слова (файл, из)

2. для текстовых файлов

Var имя файловой переменной: text;

Type имя типа= text;

Var имя файловой переменной:имя типа;

где text - с лужебное слово (текстовый)

3. для нетипизированных файлов

Var имя файловой переменной: file;

Type имя типа = file;

Var имя файловой переменной: имя типа;

гдеfile - служебное слово (файл)

После описания файловой переменной в ОЗУ выделяется место под значение данной переменной. Над файловыми переменными нельзя выполнять операции присваивания, сравнения и т.п. Их можно использовать только для выполнения операций над файлами: чтение, записи, удаления, переименования и т.д. С каждым файлом связана своя файловая переменная.

При работе с любым типом файла необходимо выполнить следующие 5 операций:

1. объявление файловой переменной;

2. связь файловой переменной с конкретным файлом на физическом уровне;

3. инициализация файла – означает указать направление передачи данных (т.е. открыть файл для чтения, записи или добавления);

4. обработка данных;

5. закрытие файла.

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

 

Имя и параметры Типы параметров Тип результата Действие
Процедуры
Assign(f,name) f – файловая переменная name - string   связывает файловую переменную f с файлом с именем name
Reset(f) f - файловая переменная   Открывает файл, связанный с файловой переменной f. Текстовые - только на чтение, типизированные - на чтение и запись
Rewrite(f) f - переменная файлового типа   создает и открывает новый файл, связанный с файловой переменной f. Если файл с указанным именем уже существует, то он удаляется, и вместо него создается новый файл. Текстовые -только на запись, типизированные - на чтение и запись
Append(f) f - типа Text   открывает текстовый файл на запись для добавления. Файловый указатель устанавливается в конец файла.
Close(f) f - файловая переменная   закрывает файл
Read(f,a,b,...) f - файловая переменная, a,b - переменные простого типа, string или указатели   считывает значения из файла f в переменные a, b...Для типизированного переменные a, b … - базового типа, а их значения считываются из файла в двоичном виде. Для текстового файла, переменные a, b... могут иметь различные типы, а их значения храниться в текстовом виде
Write(f,a,b,...) f - переменная файлового типа, a,b - выражения простого типа, string или указатели   записывает значения a, b... в файл f. Для типизированного - типы значений a, b... – базовые. Для текстового- значения a, b... выводятся в текстовом виде, при этом могут быть использованы форматы вывода
Readln(f,a,b,...) f - переменная типа Text, a,b - переменные простого типа, типа string или указатели   считывает значения из текстового файла f в переменные a, b..., после чего пропускает символы до конца строки. Вызов readln(f) просто пропускает символы до конца строки
Writeln(f,a,b,...) f - переменная типа Text, a,b - выражения простого типа, типа string или указатели   записывает значения a, b... в текстовый файл f, после чего записывает в него символ конца строки. Вызов writeln(f) просто записывает в файл символ конца строки
Seek(f,n) f - переменная типа file   перемещает файловый указатель в типизированном файле на n-ый элемент (нумерация начинается с нуля)
Truncate(f) f - переменная типа file   удаляет все элементы типизированного файла с текущей позиции файлового указателя до конца файла
Rename(f,name) f - файловая переменная, name - string   переименовывает файл, связанный с файловой переменной f. Файл должен быть закрыт
Erase(f) f - переменная файлового типа   удаляет файл, связанный с файловой переменной f. Файл должен быть закрыт
Функции
FileExists(name) name - string boolean возвращает True, если на диске имеется файл с именем name, в противном случае возвращает False
CanCreateFile(name) name - string boolean возвращает True, если можно создать файл с именем name, в противном случае возвращает False
Eof(f) f - переменная файлового типа boolean возвращает True, если файловый указатель стоит на конце файла, и False в противном случае
Eoln(f) f - переменная типа Text boolean возвращает True, если файловый указатель стоит на конце строки, и False в противном случае
SeekEof(f) f - переменная типа Text boolean пропускает пробелы, символы табуляции и перехода на новую строку, после чего возвращает True, если файловый указатель стоит на конце файла, и False в противном случае
SeekEoln(f) f - переменная типа Text boolean пропускает пробелы, символы табуляции, после чего возвращает True, если файловый указатель стоит на конце строки, и False в противном случае
FileSize(f) f - переменная типа file integer возвращает количество элементов в типизированном файле
FilePos(f) f - переменная типа file integer возвращает позицию файлового указателя в типизированном файле

 

Пример 1: Текстовый файл представляет собой фрагмент программы на языке Pascal. Определить количество строк в которых есть служебное слово «begin».

Program file1;

Var f:text; S,name:string; n,k:byte;

Begin

Writeln(‘введите путь и имя файла’); Readln(name);

Assign(f, name);

Rewrite(f); {открыть файл для записи}

Repeat

Readln(s);

Writeln(f,s); {запись строки в файл}

Until s=’end.’; {пока не end.}

Close(f); {закрыть файл}

Reset(f); {открыть файл для чтения}

n:=0;

While not(eof(f)) do {пока не конец файла}

Begin

Readln(f,s); {читать строку из файла}

S:=LowerCase(s); {преобразует строку к нижнему регистру}

K:=pos(‘begin’,s);

If k<>0 then n:=n+1;

end;

close(f);

if n=0 then wrieln(‘нет строк со словом begin’)else writeln(‘кол-во строк=’,n)

end.

Результат решения задачи

введите путь и имя файла

e:\a.txt

BegiN

end.

кол-во строк=1

 

Пример 2: Создать файл, содержащий информацию о студентах: фамилия, гражданство. Вывести фамилии иностранных граждан.

 

 

Program file2; Type ved=record fam:string[20]; gr:string[15] end; Var f1:file of ved; z:ved; i,n:integer; l:boolean; begin assign(f1,'e:\a.dat'); rewrite(f1); writeln('введите количество студентов'); readln(n); for i:=1 to n do begin readln(z.fam); readln(z.gr); write(f1,z) end; close(f1); reset(f1); l:=true; repeat read(f1,z); if z.gr<>'Россия' then begin writeln(z.fam,' - ',z.gr); l:=false; end Until eof(f1); close(f1); if l then write('все граждане России') end.     Результаты решения задачи:   введите количество студентов Иванов А.Р. Россия Бортко П.О. Украина Смирнова К.Р. Россия Сванидзе А.О. Грузия Бортко П.О. - Украина Сванидзе А.О. - Грузия  

 

 

 

Тема 2.11 Динамические структуры данных

Динамическая память- это оперативная память компьютера, предоcтавляемая программе при ее работе, за вычетом сегмента статических данных (64 Кб), стека(обычно 16 Кб) и собственно тела программы. Динамическая память в Turbo Pascale рассматривается как сплошной массив байтов, который называется кучей. Физически куча располагается в старших адресах сразу за областью памяти, которую занимает тело программы. Начало кучи хранится в стандартной переменной HeapOrg, конец – в переменной HeapEnd. Текущую границу незанятой области данамической памяти указывает указатель HeapPtr.

Переменные, которые создаются и уничтожаются в процессе выполнения программы называются динамическими или динамически размещаемыми. Доступ к таким переменным осуществляется с помощью указателей. Указатель (ссылочная переменная) – это переменная, которая в качестве своего значения содержит адрес первого байта памяти, по которому хранятся данные. Указатель занимает в памяти 4 байта, а данные на которые он указывает могут занимать десятки и более килобайт. Чтобы обратится к содержимому ячейки, на которую указывает указатель, тебуется после его идентификатора поставить символ ^. Эта операция называется операцией разыменования.

Указатели бывают:

- типизированные;

- нетипизированные.

 

Для объявления типизированного указателя обычно используется символ ^, который размещается непосредственно перед соответствующим типом данных, например:

Type Ptr = ^ integer;   VarP1: ^integer; P2,P3: Ptr;  

 


Типизированные указатели могут ссылаться на еще необъявленный тип данных

 

Например: Type tt= ^ Zap;

Zap = record

Info:real;

Next: tt

End;

Var a: Zap;

p,q,begl,endl: tt;

 

Поскольку нетипизированные указатели не связаны с конкретным типом данных, их чрезвычайно удобно использовать для динамического размещения данных, структура и тип которых меняется в ходе выполнения программы. Для объявления нетипизированных указателей используется стандартный тип POINTER.

Var имя перем: рointer;

Указательная переменная может находиться в трех состояниях:

- содержать адрес какой-либо переменной, память под которую уже выделена;

- содержать специальный пустой адрес nil;

- находится в неопределенном состоянии.

 

Действия с указателями

 

Действие Результат
1. Объявление type Plnt= ^ integer; Var a, b: Plnt;    
?
?

a?

 

b?

2. Выделение памяти New (a);   New (b);    
адрес1
адрес2
 
 
a

 

b

адрес1
адрес2
 
 
адрес1
адрес2
 
 
адрес1
адрес2
 
 
адрес1
адрес2
 
 

3. Занесение информации a^:=1;   b^:=2;  

адрес1
адрес2
 
 

a a^

 

b b^

4. Копирование информации a^:=b^;  

адрес1
адрес2
 
 

a a^ a^=b^

 

b b^ a<>b

5.
 

 
адрес2
адрес2
Копирование адреса

 

а) а:= b;

 

 

b) Dispose (a);

a:= b;

 

 

 

a a^ a^=b^

 

b b^ a=b

 

 

адрес2
адрес2
 
адрес2
адрес2
 
адрес2
адрес2
 
адрес2
адрес2
 
адрес2
адрес2
 

a

a^

b b^

6. Присваивание пустого адреса nil   b:= nil  

адрес2
nil
 

a a^

 

b

b^

 



Поделиться:


Последнее изменение этой страницы: 2016-08-15; просмотров: 1119; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 52.15.190.187 (0.01 с.)