Главная    Почта    Новости    Каталог    Одноклассники    Погода    Работа    Игры     Рефераты     Карты
  
по Казнету new!
по каталогу
в рефератах

Программа на Delphi

cedure BlockRead( f: File; Var Buf; Count: Word[; Var Result:
      Word]);
      Читает из файла Count записей в переменную Buf. Result – реально
      прочитанное количество записей.
   5. Procedure BlockWrite( f: File; Var Buf; Count: Word[; Var Result:
      Word]);
      Пишет в файл первых Count записей из переменной Buf. Result – реально
      записанное количество записей.
   6. Procedure Seek( f: File; N: LongInt);
      Перемещает указатель на запись с номером N. Первая запись имеет
      порядковый номер 0.
   7. Function FilePos( f: File): LongInt;
      Возвращает номер записи, на которую установлен указатель.
   8. Procedure CloseFile( f: File);
      Закрывает файл.
   9. Function Eof(f: File): boolean;
      Возвращает True, если достигнут конец файла.
  10. Function FileSize(f: File): LongInt;
      Возвращает количество записей в файле. Например, Seek(f, FileSize(f))
      установит указатель в конец файла (после последней записи).
  11. Procedure Truncate(f: File of Type);
      Уничтожает (отрубает) конец файла начиная с записи, на которую
      установлен указатель.
Язык Object Pascal не накладывает никаких ограничений на длину записи
(теоретически она может иметь размер до 2 Гб).
Пример описания и обращения к функции ReadFromFile, читающей из файла nF в
позиции Pos запись r размером Sz.
function ReadFromFile(nF: String; Pos: Word; Var r; Sz: Word): boolean;
Var

g: File;

Recs, ReadReal: Integer;

RecRead: boolean;
Begin
Assign(g, nF);

Recs:= FileSize(g) div Sz; {количество записей в файле}

RecRead:= (Pos < Recs); {запись с номером Pos есть ?}

if RecRead then begin {если запись есть}

Reset(g, Sz); {открыть файл}
try
Seek(g, Pos); {установить указатель на запись}

BlockRead(g, r, 1, ReadReal); {прочитать запись}

RecRead:= (ReadReal = 1); {прочитано успешно ?}
finally

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

end;
end;

Result:= RecRead;
end {ReadFromFile};
…
Type
tStud = Record

Fio: String [60];

Curs: byte;

Stipendiya, Room: boolean;

End;
Var Stud: tStud;
…
if ReadFromFile('base2.ff1', 12, Stud, SizeOf(Stud))

then Writeln('Запись из 12-й позиции прочитана');
Приведем еще пример. В директории 'c:BasesSdudBase' находится файл
'AllStuds.bs', в котором хранятся данные о студентах в виде записей типа
      Type
      TStud = Record {студент}

      Fio: String[50]; {'Фамилия Имя Отчество'}

      Born: byte; {Год рождения, например, 1979}

      Faculty: String[4]; {Факультет, например, 'МТФ'}

      Group: String[8]; {Группа, например, 'МТ 17-2'}

      End;
Ниже приведена универсальная процедура, которая копирует из этого файла в
другой файл данные только о тех студентах, которые имеют заданный год
рождения:
Procedure StudsCopy(nF1, nF2: ShortString; BornYear: byte;

Var Count: Word; Var: Ind: ShortInt);
{nF1 – файл-источник, nF2 – файл-приёмник,

BornYear – требуемый год рождения,

Count – скопировано записей,

Ind – индикатор контроля:

  0 – нормально, 1 – было неверное чтение, была неверная запись}
Var
g: tStud;

K, Sz, i,j: Word;

f1, f2: File;
Begin
Count:= 0; {инициализация счетчика}

Ind:=0; {изначально предполагаем нормальный процесс, иначе Ind изменим}

Sz:= SizeOf(g); {размер одной записи}

K:= KdnFileSize(nF1, Sz); {количество записей в файле-источнике}
If (K > 0) then {если в файле-источнике есть записи }

Begin

Assign(f1, nF1); {файл-источник связываем переменной f1}

Reset(f,Sz); {открываем файл-источник с записями размера Sz}

Assign(f2, nF2); {файл-приёмник связываем переменной f2 }

Rewrite(f2,Sz); {создаем новый файл-приёмник под записи размера Sz}
try
For j:=1 to K do

Begin

BlockRead(f1, g, 1, i); {чтение записи}
Case i of
1: {запись прочитана}

if (g.Born = BornYear) then { студент имеет требуемый год рождения}

begin

BlockWrite(f2, g, 1, i); {запись в файл-приёмник}

If (i > 0) then Inc(Count) {если записано правильно}

else

begin Ind:= 1; Break; End; {записано неверно, сразу выход из цикла}

end; {if}
0: begin Ind:= -1; Break; end; {запись не прочитана, сразу выход из цикла}

end; {Case}
end; {цикла For}
finally

CloseFile(f1); {закрываем файл-источник}

CloseFile(f2); {закрываем файл-приёмник}

end; {блока try – finally – end}
End {If };
End {StudsCopy};
Операторы, реализующие копирование требуемых данных в файл '1979.bs':
StudsCopy ('AllStuds.bs', '1979.bs', 1979, Count1979, Ind1979);
           Case Ind1979 of

           -1: Writeln('Зафиксирована ошибка чтения');

           1: Writeln('Зафиксирована ошибка записи');

           0: Writeln('Процесс прошел нормально');

           end; {Case}
      Writeln('Скопировано записей: ' + IntToStr(Count1979));
В этом примере использована внешняя процедура KdnFileSize {количество
записей в файле }. Приведем ее текст:
      function KdnFileSize(nF: ShortString, Siz: Word): LongInt;

      {nF – имя файла, Siz – размер одной записи }
      Var
      F: File;

      L: LongInt;
      Begin

      L:=0;
      If FileExists(nF) then

      begin

      Assign(f, nF);

      Reset(f,1);

      L:= SizeOf(f);

      If not (L mod Siz = 0) then Writeln('Файл ' + nF + имеет другой тип');

      L:= L div Siz;

      CloseFile(f);

      End;
      Result:= L;

      End;
               17.5. Процедуры и функции для работы с файлами
Эти подпрограммы предназначены для работы с файлами, папками (директориями)
и дисками.
   1. Procedure ChDir(Dir: String);
      Делает папку Dir текущей. Пример: ChDir('c:');
   2. Procedure GetDir(D: Byte; Var Dir: String);
      Возвращает текущую папку на заданном устройстве. (D= 0 – текущий диск,
      1 – диск А, 2 – диск B и т.д.). Пример: GetDir(0, s);
   3. Procedure RmDir(Dir: String);
      Уничтожает заданную папку. Папка не должна содержать вложенных папок
      или файлов. Пример: RmDir('Folder66');
   4. Procedure Erase(f);
      Удаляет файл, связанный с файловой переменной f. Файл должен быть
      закрыт.
   5. Procedure Rename(f, FileName: String);
      Переименовывает файл, связанный с файловой переменной f. Файл должен
      быть закрыт. Пример: Rename(g, 'studs.txt');
   6. Function DiskFree(D: byte): LongInt;
      Возвращает количество свободной памяти в байтах на устройстве D. Код
      драйвера задается так же, как в процедуре GetDir. Если код указан
      неверно, то возвращает -1.
   7. Function DiskSize(D: byte): LongInt;
      Возвращает количество свободной памяти в байтах на устройстве D. Код
      драйвера задается так же, как в процедуре GetDir. Если код указан
      неверно, то возвращает -1.
   8. Function FindFirst(const Path: string; Attr: Integer;

      var F: TSearchRec): Integer;
      Находит имя первого файла с заданными атрибутами Attr в папке Path.
      Результат поиска выводит в переменную F. Если поиск успешен, то
      функция вернет 0, иначе вернет код ошибки Widows. К FindFirst можно
      обращаться не только как к функции, но и как к процедуре.
      Атрибуты файла приведены в табл. 17.
                                                                  Таблица 17
|Атрибут            |Описание файлов           |
|faReadOnly         |Файлы "Только для чтения" |
|faHidden           |Скрытые файлы             |
|faSysFile          |Системные файлы           |
|faVolumeID         |Файл ID-значений          |
|faDirectory        |Папки (директории)        |
|faArchive          |Архивы (файлы)            |
|faAnyFile          |Все файлы                 |


      Тип, характеризующий найденный файл, представляет запись вида :
      type
      TSearchRec = Record

      Time: Integer; {время}

      Size: Integer; {размер файла в байтах}

      Attr: Integer; {атрибуты файла}

      Name: TFileName; {DOS-путь файла}

      ExcludeAttr: Integer;

      FindHandle: THandle;

      FindData: TWin32FindData; {дополнительная информация о файле}

      end;
      Пример:
      Var
      SR: TSearchRec;

      S: String;

      …

      FindFirst('c:Program Filesdelphi4bin*.*', faAnyFile, SR);

      if (SR.Attr = faArchive) then

      S:= 'Файл ' + SR.Name + ' имеет размер ' + IntToStr(SR.Size) + '
      байт';
      В данном примере процедура FindFirst ищет первый файл по маске '*.*'
      (все файлы) в папке 'c:Program Filesdelphi4bin'. Атрибут faAnyFile
      означает, что поиск производится по всем видам файлов, под которыми
      понимаются папки (директории), '.', '..' – ссылки на текущую и
      родительскую папку, внутренние папки и собственно файлы. Последние в
      терминологии файловой атрибутики называются архивами. Далее, если
      найденный файл есть архив, т е. файл в общепринятой терминологии, то в
      строку S будет помещено сообщение. Например, если найденный файл имеет
      имя Ig.ttg и его размер равен 15899, то S= 'Файл Ig.ttg имеет размер
      15889 байтов'.
   1. Function FindNext(var F: TSearchRec): Integer;
      Находит следующий файл, атрибуты которого указаны в FindFirst.
   2. Procedure FindClose(var F: TSearchRec);
      Закрывает действие FindFirst/FindNext.
   3. Function DeleteFile(const FileName: string): Boolean;
      Удаляет файл по имени. Если файл не может быть удален или не
      существует – возвращает False.
   4. Function CreateDir(const Dir: string): Boolean;
      Создает новую папку.
   5. Function GetCurrentDir: string;
      Возвращает текущую папку.
   6. Function GetCurrentDir: string;
      Возвращает текущую папку.
   7. Function SetCurrentDir(
Пред.1617181920След.
скачать работу

Программа на Delphi

 

Отправка СМС бесплатно

На правах рекламы


ZERO.kz
 
Модератор сайта RESURS.KZ