67460

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

Лекция

Информатика, кибернетика и программирование

Функция возвращает значение 0, если операция открытия файла прошла успешно, и значение, отличное от 0, если открытие не заладилось (например, была попытка открыть на чтение файл, которого нет на диске, или была попытка открыть на запись файл с неприемлемым именем).

Русский

2014-09-10

146 KB

2 чел.

Лекция 8

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

procedure Erase(var F: <Файловый тип>);

procedure Rename(var F: <Файловый тип>;  <Новое имя файла>: string);

procedure MKDir(<Имя папки>: string);        // Создает пустую папку

procedure RMDir(<Имя папки>: string);        // Удаляет пустую папку

function  IOResult: integer;

Функция возвращает значение 0, если операция открытия файла прошла успешно, и значение, отличное от 0, если открытие не заладилось (например, была попытка открыть на чтение файл, которого нет на диске, или была попытка открыть на запись файл с неприемлемым именем).

function EOF(var F: <Файловый тип>) boolean;

Функция возвращает значение true, если маркер файла переместился за последний байт файла (достигнут конец файла).


Замечание

Существуют альтернативные варианты процедур:

procedure Rename(var F <Файловый тип>; <Новое имя файла>: PChar);

procedure MKDir(<Имя папки>: PChar);

procedure RMDir(<Имя папки>: PChar);

PChar – специальный «строковый» тип, разговор о нём пойдёт позже.

Замечание

Файловых типов в языке Паскаль может быть три: текстовые файлы, типизированные файлы и файлы без типа.

Текстовый файл

Тип «Текстовый файл», или файл последовательного доступа, предназначен для работы с т.н. текстовыми файлами (на дисках и не только). Признаком текстового файла является множество байтовых пар с кодами 13 и 10. В литературе для них встречается обозначение CR (Carriage Return, возврат каретки) и LF (Line Feed, перевод строки). Между парами с кодами 13 и 10 обычно стоят символы разговорных алфавитов, образующие осмысленный текст. Для служебных целей текстовые файлы могут содержать, например, числа, представляющие входной набор данных для программы.

<Объявление текстовой файловой переменной> ::=

<Имя файловой переменной>: text;


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

Синтаксис TP7:

procedure Assign(var F: <Файловый тип>;  <Имя файла>: string);

Процедура связывает файловую переменную с реальным файлом.

procedure Reset(var F: <Файловый тип>);

Процедура открывает файл для чтения (данных из файла).

procedure Rewrite(var F: <Файловый тип>);

Процедура открывает файл для записи (данных в файл).

procedure Append(var F: <Файловый тип>);

Процедура открывает файл для ДОзаписи данных в конец файла.

procedure Close(var F: <Файловый тип>);

Процедура закрывает ранее открытый файл.

function Assign(var F: <Файловый тип>;  <Имя файла>: string);

Процедура связывает файловую переменную с реальным файлом.

function EOLN(var F: <Файловый тип>) boolean;

Функция возвращает значение true, если маркер файла переместился за последний байт строки (достигнут конец строки).

function SeekEOLN(var F: <Файловый тип>) boolean;

Функция возвращает значение true, если маркер файла переместился за последний байт строки (достигнут конец строки), или если конец строки не достигнут, но до конца строки присутствуют только пробелы и знаки табуляции.

function SeekEOF(var F: <Файловый тип>) boolean;

Функция возвращает значение true, если маркер файла переместился за последний байт файла (достигнут конец файла), или если конец файла не достигнут, но до конца файла присутствуют только пробелы и знаки табуляции.

procedure Flush(var F <Файловый тип>);

Процедура немедленно освобождает буфер записываемого файла. Если процедура не применяется, буфер освобождается только тогда, когда он заполнен, или при закрытии файла.

procedure Read(var F <Файловый тип>; <Список ввода>);

Производится чтение данных из текстового файла в переменные, представленные в <Списке ввода>. Разделителями между данными служат пробелы либо символы подчеркивания. Переход на следующую строку файла происходит только в случае, если текущая строка уже исчерпана.

procedure Readln(var F < Файловый тип>; <Список ввода>);

Производится чтение данных из текстового файла в переменные, представленные в <Списке ввода> аналогично тому, как это делается процедурой Read. Когда список ввода исчерпан, производится перевод маркера на начало следующей строки текстового файла, даже если до конца текущей строки остаются данные, которые не прочтены.

procedure Write(var F <Файловый тип>; <Список вывода>);

Производится запись данных из <Списка вывода> в текстовый файл.

procedure Writeln(var F <Файловый тип>; <Список вывода>);

Производится запись данных из <Списка вывода> в текстовый файл. Когда список вывода исчерпан, производится перевод маркера на начало следующей строки текстового файла.


Синтаксис
Delphi:

<Объявление текстовой файловой переменной> ::=

<Имя файловой переменной>: textfile;

procedure AssignFile(var F: <Файловый тип>;  <Имя файла>: string);

procedure CloseFile (var F: <Файловый тип>);

Процедуры аналогичны соответственно процедурам Assign и Close.

Пример обращения к текстовым файлам приведен в проекте OptPathRDLU.


Тип «Указатель»

<Тип «Указатель»> : : = 

 ^<Тип> ;

<Тип «Указатель»> : : = 

 pointer ;

Тип «Указатель» используется для объявления переменной, которая должна содержать адрес некоторого набора данных в оперативной памяти. Таким адресом может быть либо адрес первого байта уже существующей переменной, либо адрес первого байта нового набора данных, создаваемого специально для этого предназначенной процедурой.

Существует специальное значение для указателя, имеющее имя Nil. Если указатель равен Nil, это означает, что он ни на что не указывает. Если указатель не инициализирован, нет гарантии, что он равен именно Nil.


Пример.

program P0801;

type

  pInteger = ^integer ;

  ppInteger = ^pInteger ;

  pppInteger = ^ppInteger ;

var

 p_i: ^integer ;    // Аналогично  p_i: pInteger ;

 p_b: ^boolean ;

 p_c: ^char ;

 p: pointer ;

 c: char ;

 b: boolean ;

 i: integer ;

begin

 Writeln('sizeof(p)=', sizeof(p)) ;

 Writeln('sizeof(b)=', sizeof(b)) ;

 Writeln('sizeof(i)=', sizeof(i)) ;

 Writeln('sizeof(c)=', sizeof(c)) ;

 Readln;

 b:=false ;

 Writeln(b) ;

 p_b := @b ;   // p_i := @b ;

 p := p_b ;

 p_i := p ;

 p_i^ := 7 ;

 Writeln(b) ;

 c:='A' ;

 Writeln(c) ;    { 'A' }

 p_c := @c ;

 p := p_c ;

 p_i := p ;

 p_i^ := p_i^ + 7 ;

 Writeln(c) ;    { 'H' }

 Readln ;

end.

program P0802;

type

   DateTime = record      // Delphi: TDateTime 

     Year, Month, Day, Hour, Min, Sec: word ;

   end ;

   MyRec = record

     N: longint ;

     FIO: string[40] ;

     BirthDate: DateTime ;

   end;

var

 pMyRec: ^MyRec;

 z : MyRec;

begin

 pMyRec :=nil;

 pMyRec := @z ;

 

 pMyRec^.N := 1;

 z.N := 1;

 pMyRec^.BirthDate.Year := 1999;

end.

Замечание. Подробный разговор об указателях будет продолжен позже.


Тип
pChar

Фактически:

type

 pChar = ^Char;

Тип pChar предназначен для работы со строковыми данными в формате “Zero Terminated Strings” («Строки с нулевой концовкой»). Указатель типа pChar содержит адрес «первого» байта (символа) строки. Правда, нумерацию символов принято начинать не с единицы, а с нуля. Признаком конца строки служит символ с кодом 0 (#0). Последним символом строки будет тот, сразу после которого расположен символ #0.

Строки “Zero Terminated Strings” имеют и другое название:

ASCIIZ–строки.


Пример

var

 mC: array[0..11] of char;

begin

 mC[0] := ‘N’;  mC[1] := ‘o’;  mC[2] := ‘v’;  mC[3] := ‘e’;  mC[4] := ‘m’;

 mC[5] := ‘b’;  mC[6] := ‘e’;  mC[7] := ‘r’;

 mC[8] := #0;    //  mC[8] := Chr(0);

 StrPCopy(mC, ‘November’);

end.


Процедура StrDispose

procedure StrDispose(SP: PChar);

Удаляет из динамической памяти строку. Строка размещается в динамической памяти функцией StrNew.

SP – удаляемая строка.

Если SP = nil, процедура ничего не выполняет.

Функция StrCat

function StrCat(Dest, Source: PChar): PChar;

Присоединяет к концу строки Dest строку Source. Результат – объединенная строка. Размер полученной строки не контролируется. Dest – первая строка; Source – вторая строка.

Функция StrComp

function StrComp(SPl, SP2: PChar): Integer;

Сравнивает две строки (символы сравниваются слева направо своими кодами). Результат меньше нуля, если первая строка меньше второй, равен нулю, если строки равны, и больше нуля, если первая строка больше второй.

Функция StrCopy

function StrCopy(Dest, Source: PChar): PChar;

Копирует строку Source в строку Dest. Возвращает в качестве результата новую строку Dest.

Source – копируемая строка;

Dest – строка для копирования.

Размер полученной строки не контролируется.

Функция, StrECopy

function StrECopy(Dest, Source: PChar): PChar; Копирует строку Source в строку Dest. Возвращает в качестве результата указатель на последний (нулевой) элемент строки.

Source – копируемая строка;

Dest – строка для копирования.

Размер полученной строки не контролируется.


Функция StrEnd

function StrEnd(SP: PChar): PChar;

Получает указатель на конец строки SP (на завершающий нулевой элемент).

SP – исходная строка.

Функция StrlComp

function StrLComp(SPl, SP2: PChar): PChar;

Сравнивает строки SPl и SP2 без различия между прописными и строчными латинскими буквами. Результат такой же, что и у функции StrComp.

SPl, SP2 – сравниваемые строки.


Функция
StrLCat

function StrLCat(Dest,Source: PChar; MaxLen: Word): PChar;

Добавляет в конец строки Dest MaxLen символов строки Source. Если размер

строки Source меньше MaxLen, копируется фактическое количество символов. В

качестве результата возвращает объединенную строку.

Dest – первая строка;

Source – копируемая строка;

MaxLen – число копируемых символов.

Размер полученной строки не контролируется.

Функция StrLComp

function StrLComp(SPl, SP2: PChar; MaxLen: Word): PChar;

Сравнивает MaxLen первых символов строк SPl и SP2. Если размер строк меньше MaxLen, сравнивается фактическое количество символов. Результат такой же, что и у функции StrComp.

SPl, SP2 – сравниваемые строки;

MaxLen – число сравниваемых символов.

Функция StrLCopy

function StrLCopy(Dest, Source; PChar; MaxLen: Word): PChar;

Копирует MaxLen символов строки Source в строку Desi. Если размер строки Source меньше MaxLen, копируется фактическое число символов. Результат – скопированная строка.

Dest – строка для копирования;

Source – колируемая строка;

MaxLen – число копируемых символов.

Размер полученной строки не контролируется.

Функция StrLen

function StrLen(SP: PChar): Word;

Определяет размер строки без учета заключительного символа с кодом 0.

SP – исследуемая строка.


Функция
StrLIComp

function StrLIComp(SPl, SP2: PChar; MaxLen: Word): PChar;

Сравнивает MaxLen первых символов строк SPl и SP2 без различия между прописными и строчными латинскими буквами. Если размер строк меньше MaxLen, сравнивается фактическое число символов. Результат такой же, что и у функции StrComp.

SPl,SP2 – сравниваемые строки;

MaxLen – число сравниваемых символов.

Функция StrLower

function StrLower(SP: PChar): PChar;

Преобразует в строке SP прописные латинские буквы в строчные. Результат –преобразованная строка.

SP – преобразуемая строка.


Функция StrMove

function StrMove(Dest, Source: PChar; Count: Word): PChar;

Копирует Count символов строки Source в строку Dest, даже если это число больше размера строки Source. Результат – скопированная строка.

Dest – первая строка;

Source – вторая строка. Размер полученной строки не контролируется.

Функция StrNew

function StrNew(SP: PChar): PChar;

Создает в динамической области копию строки SP. Результат – указатель на новую строку. Удаляется строка процедурой StrDispose.

SP – копируемая строка.

Функция StrPas

function StrPas(SP: PChar): string;

Преобразует ASCIIZ–строку в строку типа string. Результат – преобразованная строка.

SP – исходная строка.

Функция StrPCopy

function StrPCopy(Dest: PChar; Source: string): PChar; Преобразует строку Source типа string в ASCHZ–строку Dest. Результат – указатель на преобразованную строку.

Source – преобразуемая строка;

Dest – преобразованная строка.

Размер полученной строки не контролируется.

Функция StrPos

function StrPos(SPl, SP2: PChar): PChar;

Ищет первое вхождение строки SP2 в строку SPl. Результат – указатель на первое вхождение строки SP2 в строку SPl – либо nil, если такого вхождения нет.

SPl – строка, в которой ищется вхождение строки SP2;

SP2 – искомая строка.


Функция
StrRScan

function StrRScan(SP: PChar; Chr: Char): PChar;

Ищет последнее вхождение символа Chr в строку SP. Результат – указатель на найденный символ либо nil, если такого символа нет.

SP – строка, где ищется символ;

Chr – искомый символ.

Функция StrScan

function StrScan(SP: PChar; Chr: Char): PChar;

Ищет первое вхождение символа Chr в строку SP Результат – указатель на найденный символ либо nil, если такого символа нет.

SP – строка, где ищется символ;

Chr искомый символ.


Функция StrUpper

function StrUpper(SP: PChar): PChar;

Преобразует в строке SP строчные латинские буквы в прописные. Результат – преобразованная строка.

SP – преобразуемая строка.


Ключи компиляции (директивы компилятора)

Ключ компиляции задает режим компиляции программы. Этот режим управляет синтаксическими требованиями к исходному тексту программы,  а также поведением откомпилированного кода программы.

Ключ является глобальным, если в модуле он может присутствовать только в одном месте – в начале модуля. Режим, задаваемый глобальным ключом, действует на весь модуль.

Ключ является локальным, если в модуле он может присутствовать во многих местах. Режим, задаваемый локальным ключом, действует на тот участок кода, который предшествует прямо противоположному ключу.


Выравнивание полей записей и классов

{$A+}, {$A-}, {$A1}, {$A2}, {$A4}, or {$A8}

или

{$ALIGN ON}, {$ALIGN OFF}, {$ALIGN 1}, {$ALIGN 2}, {$ALIGN 4},

or {$ALIGN 8}

По умолчанию:

{$A8}

или

{$ALIGN 8}

Зона действия: Локальный


Полное вычисление логических выражений

{$B+} or {$B-}

или

{$BOOLEVAL ON} or {$BOOLEVAL OFF}

По умолчанию:

{$B-}

или

{$BOOLEVAL OFF}

Зона действия: Локальный


Пример

x := 3;

{$B-}

if 

(x > 4)   // Вычисляется

and 

(x < 5)   // НЕ вычисляется

then  . . .  ;


Использование длинных строк
(AnsiString)

{$H+} or {$H-}

или

{$LONGSTRINGS ON} or {$LONGSTRINGS OFF}

По умолчанию:

{$H+}

или

{$LONGSTRINGS ON}

Зона действия: Локальный


Проверка результата ввода-вывода

{$I+} or {$I-}

или

{$IOCHECKS ON} or {$IOCHECKS OFF}

По умолчанию:

{$I+}

или {$IOCHECKS ON}

Зона действия: Локальный

Применён в проекте OptPathRDLU.


Разрешение использовать типизированные константы как переменные

{$J+} or {$J-}

или

{$WRITEABLECONST ON} or {$WRITEABLECONST OFF}

По умолчанию:

{$J-}

или

{$WRITEABLECONST OFF}

Зона действия: Локальный

Ключ {$J+} применён в проектах KnightTurns и OptPathRDLU.


Генерация информации о текущих типах полей, методов, свойств, объявленных в секции
Published (RTTI,  RunTime Type Information)

{$M+} or {$M-}

или

{$TYPEINFO ON} or {$TYPEINFO OFF}

По умолчанию:

{$M-}

или

{$TYPEINFO OFF}

Зона действия: Локальный

Если класс объявлен в режиме {$M-}, или не является потомком класса, объявленного в режиме {$M+}, секция Published запрещена.

Задание размера стека

{$M <Число: Мин. размер стека>, < Число: Макс. размер стека>}

или

{$MINSTACKSIZE  <Число>}

{$MAXSTACKSIZE <Число>}

По умолчанию:

{$M 16384, 1048576}

Зона действия: Глобальный

1024  <Число: Мин. размер стека>  2147483647

<Число: Мин. размер стека>  <Число: Макс. размер стека>  2147483647


Проверка выхода за пределы диапазона

{$R+} or {$R-}

или

{$RANGECHECKS ON} or {$RANGECHECKS OFF}

По умолчанию:

{$R-}

или

{$RANGECHECKS OFF}

Зона действия: Локальный


Пример
. TP7

var

 i: integer;  

 mA, nB: array[1..10] of integer;

begin

 for i := 1 to 10 do begin  mA[i] := 0; mB[i] := 0; end;

 {$R-}

 i := 12;

 mA[i] := -7;

 writeln(mA[i]);        // -7

 writeln(mB[2]);       // -7

 {$R+}

 mA[i] := -7;            // RunTime Error

 writeln(mA[12]);    // Constant Out Of Range

end.

Проверка переполнения при арифметических операциях

{$Q+} or {$Q-}

или

{$OVERFLOWCHECKS ON} or {$OVERFLOWCHECKS OFF}

По умолчанию:

{$Q-}

или

{$OVERFLOWCHECKS OFF}

Зона действия: Локальный


Пример
. TP7

var

 L: integer;

begin

 L := 2000000000;

 {$Q-}

 L := L*L;     // Реакции на переполнение нет

 writeln(L);   // -1651507200

 L := 1000000000;

 {$Q+}

 L := L*L;     // RunTime Error

end.


Разрешение использовать расширенный синтаксис

{$X+} or {$X-}

или

{$EXTENDEDSYNTAX ON} or {$EXTENDEDSYNTAX OFF}

По умолчанию:

{$X+}

или

{$EXTENDEDSYNTAX ON}

Зона действия: Глобальный


Пример
1.  TP7

{$X+}

var

 p: pChar;               // То же, что   p = ^Char;

const

 mC: array[0..39] of char = 'Petrov'#0;   // Синтаксическая ошибка при {$X-}

begin

// Во ВСЕХ последующих операторах

// будет выявлена синтаксическая ошибка при ключе {$X-}

// При ключе {$X+} код нормально компилируется и работает.

 p := 'Nikolaev';

 writeln(Ord(p[8]));  // 0

 writeln(p);

 p := @mC;

 writeln(p);

 writeln(p[0]);

end.

Пример 2.  TP7

{$X+}

uses crt;

var

 c: char;

 x, y: double;

begin

 c := readkey;

 ReadKey;     // Синтаксическая ошибка при {$X-}

 x := pi/2;  y := sin(x);

 sin(x);        // Синтаксическая ошибка в любом случае

end.


Пример
3.  Delphi

{$X+}

function Factorial(N: longint): longint;

var  i: longint;

begin

 Result := 1;     // Синтаксическая ошибка при {$X-}

 for i := 2 to N do Result := Result * i;     // Синтаксическая ошибка при {$X-}

end;


 

А также другие работы, которые могут Вас заинтересовать

45917. Организация технического контроля: понятие и основные виды технического контроля 14.86 KB
  Продукция изготовленная с отклонениями от ГОСТ или технических условий считается браком содействовать достижению необходимого уровня качества продукции и его повышению призван технический контроль. Технический контроль проверка соблюдения технических требований предъявляемых к качеству продукции на всех стадиях её изготовления начиная от поступления исходных сырья материалов комплектующих и заканчивая отгрузкой готовой продукции а так же на всех стадиях процесса производства и всех производственных условий и факторов обеспечивающих...
45918. Методы и организационные формы контроля 13.58 KB
  Осуществления различают: 1 стационарный контроль контроль деталей узлов изделий осуществляемых на стационарных пунктах технического контроля при проверки большого количества одинаковых объектах после завершения операции 2 скользящий подвижный контроль контроль который выполняется непосредственно на рабочих местах при громоскости контролирующих объектов когда применяются простые и легкопереносимые контрольноизмерительные инструменты приборы и оснастка. 3летучий контроль периодическое наблюдение за качеством выполнения ТП...
45919. Классификация баз 84.48 KB
  Классификация баз КОНСТРУКТОРСКАЯ БАЗА это база используемая для определения положения детали или сборочной единицы в изделии ГОСТ 2149576. ОСНОВНАЯ конструкторская база принадлежит данной детали или сборочной единице и определяет ее положение в изделии. ВСПОМОГАТЕЛЬНОЙ называется конструкторская база принадлежащая данной детали или сборочной единице используемая для определения положения присоединяемых к ней деталей или сборочных единиц. ТЕХНОЛОГИЧЕСКАЯ БАЗА это база используемая для определения положения заготовки...
45920. Правила (принципы) базирования. Определенность и неопределенность базирования 11.85 KB
  В практике достигнутое правильное положение детали может измениться если возникнут силы или моменты сил нарушающие контакт поверхности детали с опорными точками приспособлений. Поэтому для сохранения полученного при базировании правильного положения детали необходимо обеспечить непрерывность контакта баз. ОПРЕДЕЛЕННОСТЬ БАЗИРОВАНИЯ детали неизменность ее положения относительно поверхностей другой детали или деталей с которыми она соединена и которые определяют ее положение в процессе изготовления. НЕОПРЕДЕЛЕННОСТЬ...
45921. Индивидуальное проектирование тех. процессов 10.84 KB
  Подготовительный этап А анализ конструкторской информации Б определение типа прва В выбор метода получения заготовок 2. Синтетический этап А синтез вариантов маршрута обки отдельных повей Б синтез вариантов схем базиия В синтез маршрута обки заготовок Г синтез структуры операции 3.Аналитический этап а размерный анализ тех. Заключительный этап: Оформление документации.
45922. Структура временных связей в операциях технологического процесса. Техническое нормирование 27.58 KB
  Структура оперативного времени в операциях могут отличаться в зависимости от способов выполнения основных переходов степени совмещения выполнения основных и вспомогательных переходов; числа потоков дублирующих выполнение одинаковых переходов при изготовлении одноименных изделий. Время затраченное на две группы основных переходов составит сумма времени выполнения наиболее длительных переходов в каждой из групп основных переходов: где число групп основных переходов. Поэтому основное технологическое время равно наибольшему времени...
45923. Пути сокращения затрат времени на выполнение операции 25.95 KB
  Пути сокращения затрат времени на выполнение операции Анализ формул по определению штучнокалькуляционного времени : показывает что его можно уменьшить либо путем сокращения подготовительнозаключительного и штучного времени либо увеличением объема партии изготовляемых изделий . Пути сокращения подготовительно заключительного времени Затраты времени на подготовку к работе складываются из времени получения и ознакомления рабочего с заданием получения и установки на станке инструментов и приспособлений а по окончании работы их...
45924. Технологичность конструкции 14.3 KB
  Конструкция изделия в первую очередь определяется его служебным назначением. Однако конструктивное исполнение изделия может быть разным при этом будут разными и затраты ресурсов. Эта разница и является результатом разного уровня технологичности изделия. Технологичность это совокупность свойств изделия определяющих приспособленность его конструкции к достижению оптимальных затрат ресурсов при его производстве ремонте и утилизации.
45925. Выявление маршрута обработки отдельных поверхностей детали 18.51 KB
  Выявление маршрута обработки отдельных поверхностей детали. 2 Аналогичные действия выполняются при планировании обработки всех других поверхностей. 3 Расчленяют операции и переходы на черновые получистовые и чистовые а затем формируют примерный маршрут обработки. 4 Внедряют передовые методы механической обработки ППД РСО ЭЭО и т.