Помощь в написании студенческих работ
Антистрессовый сервис

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

Курсовая Купить готовую Узнать стоимостьмоей работы

В некоторых информационных системах задаются высокие требования к быстродействию обработки запросов (бронирование авиабилетов, биржевые брокеры и т. д.), которые не может обеспечить даже индексная организация файлов. В таки случаях применяют файлы прямого доступа. Основная идея файлов прямого или произвольного доступа заключается в том, что по значению ключа искомого записи ki найти адрес записи… Читать ещё >

Стандартные процедуры и функции для работы с файлами разного доступа (реферат, курсовая, диплом, контрольная)

Содержание

  • ВВЕДЕНИЕ
  • 1. Теоретические основы работы с файлами
    • 1. 1. Понятие файла его типы и работа с ними
    • 1. 2. Последовательный доступ и особенности работы с ним
    • 1. 3. Файлы прямого доступа
  • 2. Работа с файлами разного доступа в Delph
    • 2. 1. Стандартные процедуры и функции для работы с файлами
    • 2. 2. Разработка программы поиска текста в двоичном файле с возможностью редактирования (последовательный доступ)
  • ЗАКЛЮЧЕНИЕ
  • СПИСОК ЛИТЕРАТУРЫ

Программа работает с логическим файлом, который на этапе ее выполнения связывается с реальным физическим файлом.

В последовательных файлах записи расположены последовательно друг за другом. В одних программных системах используются разделители записей, в других, при фиксированных длинах полей, разделители могут не использоваться. Поиск информаций в самом общем случае осуществляется тоже последовательно. При начале работы файла указатель номера записи имеет значение «1» или «0» в зависимости от принятой системы нумерации. При наличии записи с нужным значение поля (полей) в файле поиске в среднем есть линейная функция от количества записей N, точнее — N / 2, а при отсутствии — N. Для ускорения поиска в последовательных файлах используют различные методы.

В некоторых информационных системах задаются высокие требования к быстродействию обработки запросов (бронирование авиабилетов, биржевые брокеры и т. д.), которые не может обеспечить даже индексная организация файлов. В таки случаях применяют файлы прямого доступа. Основная идея файлов прямого или произвольного доступа заключается в том, что по значению ключа искомого записи ki найти адрес записи Аi в отведенном адресном пространстве.

1. Delphi C/S 2. Русскоязычная документация. — М.: Borland Press, 2011. — 751 c.

2. Агафонов, В. Н. Логическое программирование / В. Н. Агафонов. — М.: [не указано], 2012. — 660 c.

3. Ашманов, С. А. Линейное программирование / С. А. Ашманов. — М.: [не указано], 2010. — 584 c.

4. Бартеньев, О. 1С: Предприятие. Программирование для всех / О. Бартеньев. — М.: Диалог МИФИ, 2015. — 464 c.

5. Бирюков, В.В.

Введение

в систему программирования ОС РВ / В. В. Бирюков, А. В. Рыбаков, Ю. П. Шакула. — М.: Финансы и статистика, 2014. — 192 c.

6. Бобровский Delphi 7. Учебный курс / Бобровский, Сергей. — М.: СПб: Питер, 2009. — 736 c.

7. Бобровский Delphi 7. Учебный курс / Бобровский, Сергей. — М.: СПб: Питер, 2014. — 736 c.

8. Бобровский, С. Delphi 5 Учебный курс / С. Бобровский. — М.: СПб: Питер, 2014. — 640 c.

9. Голуб, А. И. Веревка достаточной длины, чтобы… выстрелить себе в ногу. Правила программирования на Си и Си++ / А. И. Голуб. — М.: [не указано], 2015. — 485 c.

10. Дарахвелидзе, П.Г. Delphi 2005 для Win32 наиболее полное руководство / П. Г. Дарахвелидзе, Е. П. Марков. — М.: БХВ-Петербург, 2014. — 359 c.

11. Девис, Т. O penGL. Руководство по программированию / Т. Девис, Д. Шрайнер, Дж. Нейдер, и др.

— М.: СПб: Питер, 2010. — 624 c.

12. Карманов, В. Г. Математическое программирование / В. Г. Карманов. — М.: [не указано], 2016. — 303 c.

13. Керниган, Б.В. UNIX — универсальная среда программирования / Б. В. Керниган, Р. Пайк. — М.: Финансы и статистика, 2009. — 304 c.

14. Климова, Л. М. D elphi 7. Основы программирования.

Решение типовых задач. Самоучитель / Л. М. Климова. — М.: КУДИЦ-Образ, 2014. — 480 c.

15. Кнут, Д. Э. Искусство программирования (Том 1. Основные алгоритмы) / Д. Э. Кнут. — М.: [не указано], 2010. — 838 c.

16. Кнут, Д. Э. Искусство программирования (Том 2. Получисленные алгоритмы) / Д. Э. Кнут. — М.: [не указано], 2012. — 631 c.

17. Кнут, Д. Э. Искусство программирования (том 3) / Д. Э. Кнут. — М.: [не указано], 2016. — 236 c.

18. Колисниченко, Д. Rootkits под Windows. Теория и практика программирования «шапок-невидимок» / Д. Колисниченко. — М.: Наука и техника, 2015. — 320 c.

19. Командный чемпионат мира по программирования / ред. В. Васильев. — М.: СПб: СПбГУ ИТМО, 2010. — 196 c.

20. Левенталь, Л.

Введение

в микропроцессоры: Программное обеспечение, аппаратные средства, программирование / Л. Левенталь. — М.: Энергоатомиздат, 2010. — 464 c.

21. Марков, Е.П. Delphi 2005 для .NET / Е. П. Марков, В. В. Никифоров. — М.: БХВ-Петербург, 2011. — 896 c.

22. Ощенко Азбука программирования в 1С: Предприятие 7.

7. / Ощенко, Игорь. — М.: БХВ-Петербург, 2009. — 520 c.

23. Пинтер Visual FoxPro: уроки программирования / Пинтер, Пинтер Лес;, Джон. — М.: Русская Редакция, 2010. — 480 c.

24. Рейчард UNIX. Справочник (Концепции, команды, программирование, Х Window) / Рейчард, Фостер-Джонсон Кевин;, Эрик. — М.: СПб: Питер, 2011. — 384 c.

25. Рост OpenGL. Трехмерная графика и язык программирования шейдеров / Рост, Дж Рэнди. — М.: СПб: Питер, 2011. — 432 c.

26. Спольски Джоэл о программировании: моногр. / Спольски, Джоэл. — М.: СПб: Символ-Плюс, 2013. — 352 c.

27. Урман Oracle 8. Программирование на языке PL/SQL. Руководство для программистов Oracle / Урман, Скотт. — М.: ЛОРИ, 2011. — 610 c.

28. Федоров, А. Delphi 2.0 для всех / А. Федоров. — М.: Компьютер-пресс, 2013. — 464 c.

29. Хомоненко, Анатолий Delphi 7. Наиболее полное руководство / Анатолий Хомоненко и др. — М.: БХВ-Петербург, 2010. — 271 c.

30. Шумаков, П.В. Delphi 3 и разработка приложений баз данных / П. В. Шумаков. — М.: Нолидж, 2011. — 704 c. ПРИЛОЖЕНИЕ 1.

Листинг программного кода:

StatusBar1.Panels[2]. Text := 'Адрес: ' + Copy (Memo.Lines[Result.X], 1, 7) +.

lAdr;

StatusBar1.Tag := StrToInt ('$' + Copy (Memo.Lines[Result.X], 1, 7) + lAdr);

if lAdr = '' then begin.

LabeledEditHEX.Enabled := False;

LabeledEditCHAR.Enabled := False;

Exit;

end else begin.

LabeledEditHEX.Enabled := True;

LabeledEditCHAR.Enabled := True;

end;

LabeledEditHEX.Text := '';

LabeledEditCHAR.Text := '';

if not GetFileByte (StatusBar1.Tag, I).

then Exit;

LabeledEditHEX.Text := Inttohex (I, 2);

if (i = 0) or (i = $ 09) or (i = $ 0D) then.

LabeledEditCHAR.Text := Chr ($ 10) else.

LabeledEditCHAR.Text := Chr (I);

if ssShift in Shift then begin.

LabeledEditCHAR.SetFocus;

LabeledEditCHAR.SelectAll.

end;

end;

procedure TfrmBEdit. ScrollBar1Change (Sender: TObject);

var.

Fs: TFileStream;

StartByte: Integer;

BytesCount, MaxBytesCount: Integer;

Ar: array[1.1000] of Byte;

S, STxt: string;

I: Integer;

C: Byte;

Pos: Integer;

LastAdr: Integer;

begin.

// По позиции ползунка определяем, с какой строки надо начать.

// считывание информации из файла.

if ScrollBar1. Max = 1 then StartByte := 0 else.

StartByte := ScrollBar1. Position * 16 — 16;

MaxBytesCount := MaxLineCount * 16;

if fSize — StartByte >= MaxBytesCount then BytesCount := MaxBytesCount else.

BytesCount := fSize — StartByte;

MemSelStart := Memo. SelStart;

Memo.Clear;

Fs := TFileStream. Create (OpenDialog1.FileName, fmOpenRead);

Fs.Seek (StartByte, soFromBeginning);

Pos := Fs. Position;

Fs.Read (Ar, BytesCount);

Fs.Free;

C := 0;

LastAdr := 0;

// Цикл заполнения окна Memo.

for I := 1 to BytesCount do begin.

Inc (C);

S := S + IntToHex (Ar[I], 2) + ' ';

if (Ar[I] = 0) or (Ar[I] = $ 09) or (Ar[I] = $ 0D) or (Chr (Ar[I]) = '').

then STxt := STxt + Chr ($ 10) else.

STxt := STxt + Chr (Ar[I]);

if C = 8 then S[Length (S)] := '.

-';

if (C = 16) then begin.

Inc (Pos, C);

Memo.Lines.Append (IntToHex (Pos — 16, 8) + ': ' + S + '.

— ' + STxt);

S := '';

STxt := '';

C := 0;

LastAdr := Pos;

end;

if (I = BytesCount) and (C > 0) then begin.

while Length (S) < 48 do S := S + ' ';

Memo.Lines.Append (IntToHex (LastAdr, 8) + ': ' + S + '.

— ' + STxt);

Break;

end; // if.

end; // for.

if MemSelStart > Length (Memo.Text) — 80 then.

MemSelStart := Length (Memo.Text) — 80;

Memo.SelStart := MemSelStart;

end;

procedure TfrmBEdit. FormCreate (Sender: TObject);

begin.

ScrollBar1.Enabled := False;

end;

procedure TfrmBEdit. MemoKeyDown (Sender: TObject; var Key: Word;

Shift: TShiftState);

begin.

if Memo. Text = '' then Exit;

if Key = 16 then GetCursorPosEx ([ssShift]);

if Key = 38 {Вперед} then begin.

if Memo. SelStart > 76 then Exit;

if ScrollBar1. Position > 1 then ScrollBar1. Position :=.

ScrollBar1.Position — 1;

end;

if Key = 40 {назад} then begin.

if Memo. SelStart < Length (Memo.Text) — 78 then Exit;

if ScrollBar1. Position < ScrollBar1. Max then ScrollBar1. Position :=.

ScrollBar1.Position + 1;

end;

if Key = 36 {Home} then ScrollBar1. Position := 1;

if Key = 35 {End} then ScrollBar1. Position := ScrollBar1. Max;

if Key = 33 {PgUp} then.

if ScrollBar1. Position > MaxLineCount then ScrollBar1. Position :=.

ScrollBar1.Position — MaxLineCount;

if Key = 34 {PgDown} then.

if ScrollBar1. Position < ScrollBar1. Max then ScrollBar1. Position :=.

ScrollBar1.Position + MaxLineCount;

end;

procedure TfrmBEdit. ToolButton3Click (Sender: TObject);

begin.

WinExec ('Calc.exe', 1);

end;

procedure TfrmBEdit. AfterOpen (Sender: TObject);

begin.

{Если файл очень большой, то его бессмысленно сразу весь загружать в программу, т.к. может даже не хватить памяти для этого. Будем загружать его по кусочкам}.

Caption := 'Редактор двоичных файлов — ' + OpenDialog1. FileName;

MaxLineCount := (Memo.Height div Memo.Font.Size) * 60 div 100 — 1;

fSize := FileSize (OpenDialog1.FileName); // Определяем размер файла.

ScrollBar1.Enabled := True;

ScrollBar1.PageSize := 1;

ScrollBar1.LargeChange := 1;

ScrollBar1.Max := 100;

// Вычисляем характеристики ScrollBar.

if (fSize div 16 — (MaxLineCount — 2)) > 1 then begin.

ScrollBar1.Max := fSize div 16 — (MaxLineCount — 2);

ScrollBar1.PageSize := MaxLineCount div ScrollBar1. Max;

ScrollBar1.LargeChange := MaxLineCount — 1;

end else begin.

ScrollBar1.Max := 1;

ScrollBar1.PageSize := 1;

ScrollBar1.LargeChange := 1;

ScrollBar1.Enabled := False;

end;

ScrollBar1.Position := 0;

ScrollBar1Change (Sender);

end;

procedure TfrmBEdit. ToolButton1Click (Sender: TObject);

begin.

if not OpenDialog1. Execute then Exit;

AfterOpen (Sender);

end;

procedure TfrmBEdit. ToolButton5Click (Sender: TObject);

begin.

AboutBox.ShowModal;

end;

procedure TfrmBEdit. ToolButton2Click (Sender: TObject);

begin.

frmFind.Show;

end;

function TfrmBEdit. GetFileByte (Address: DWORD; var Res: Byte): Boolean;

var.

FS: TFileStream;

begin.

Result := True;

FS := TFileStream. Create (OpenDialog1.FileName, fmOpenRead);

if Address > FS. Size then begin.

FS.Free;

Result := False;

Exit;

end;

FS.Seek (Address, soFromBeginning);

FS.Read (Res, 1);

FS.Free;

end;

procedure TfrmBEdit. butPatchClick (Sender: TObject);

var.

FS: TFileStream;

B: Byte;

begin.

if LabeledEditHEX. Text = '' then Exit;

B := Strtoint ('$' + LabeledEditHEX. Text);

FS := TFileStream. Create (OpenDialog1.FileName, fmOpenWrite);

FS.Seek (StatusBar1.Tag, soFromBeginning);

FS.Write (B, 1);

FS.Free;

ScrollBar1Change (Sender);

end;

procedure TfrmBEdit. LabeledEditCHARChange (Sender: TObject);

begin.

if LabeledEditCHAR. Text = '' then exit;

LabeledEditHEX.Text := IntToHex (Ord (LabeledEditCHAR.Text[1]), 2);

end;

procedure TfrmBEdit. LabeledEditHEXChange (Sender: TObject);

var.

b: Byte;

begin.

if LabeledEditHEX. Text = '' then exit;

try.

b := StrToInt ('$' + LabeledEditHEX. Text);

except.

ShowMessage ('Введено не 16-ричное число');

Exit;

end;

if (b = 0) or (b = $ 09) or (b = $ 0D) then.

LabeledEditCHAR.Text := Chr ($ 10) else.

LabeledEditCHAR.Text := Chr (b);

end;

procedure TfrmBEdit. LabeledEditCHARKeyDown (Sender: TObject; var Key: Word;

Shift: TShiftState);

begin.

if Key = 13 then butPatch. Click;

if Key = 27 then Memo. SetFocus;

end;

procedure TfrmBEdit. MemoMouseDown (Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

begin.

if Memo. Text = '' then Exit;

try.

GetCursorPosEx (Shift);

except.

ShowMessage ('Ошибочка вышла!!!');

end;

end;

procedure TfrmBEdit. ToolButton6Click (Sender: TObject);

begin.

WinExec (PChar ('notepad ' + ExtractFilePath (ParamStr (0)) + 'readme.txt'), 1);

end;

end.

Показать весь текст
Заполнить форму текущей работой
Купить готовую работу

ИЛИ