Файл: Лр операторы и выражения Delphi.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 10.01.2024

Просмотров: 289

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

ЛР 1. Операторы и выражения Delphi

Оператор присваивания

Арифметические операторы

Оператор конкатенации строк

Логические операторы

Операторы поразрядного сдвига

Операторы отношения

Операторы множеств

Оператор-селектор case

Оператор перехода goto

Организация циклов

ЛР 2. Структурные типы

Множества

Записи

Массивы

ЛР 3. Объекты и классы

Проектирование класса

Управление жизненным циклом объекта

Опережающее объявление класса

Ограничение видимости членов класса

Свойства объекта

Особенности объявления методов

Поля класса и методы класса

Иерархия наследования

Полиморфизм

ЗАДАНИЕ

ЛР4. Опорные классы VCL

Класс TControl

Принадлежность к родительскому контейнеру

Размещение и размеры элемента управления

Видимость и активность элемента управления

Задание

ЛР5. Обработка клавиатурных событий и событий мышки

Щелчки кнопками мыши

Перемещение указателя мыши

Вращение колесика мыши

Операция перетаскивания drag and drop

Задание

ЛР 6. Классы потоков данных

Прототип потоков данных, класс TStream





var fs:TFileStream;

Buf : array [0..1023] of byte; i :integer;

begin

fs:=TFileStream.Create('c:\demo.dat', fmCreate);{создаем файл и поток}

for i:=0 to SizeOf(Buf)-1 do Buf[i]:=Random(255); {заполнение буфера случайными числами}

fs.Write(Buf,SizeOf(Buf)); //запись данных в файл fs.Destroy; {уничтожаем файловый поток}

end;
Организация чтения данных из файлового потока требует учитывать текущее положение курсора чтения в потоке. Для этого нам понадобится пара свойств: Position и Size. Кроме того, размер буфера должен быть кратен размеру файла (листинг 6.3).


Листинг 6.3. Пример чтения данных из файлового потока




var fs : TFileStream;

Buf : array[0..127] of byte;

begin

fs:=TFileStream.Create('c:\demo.dat', fmOpenRead);

while fs.Position do begin

fs.Read(Buf, SizeOf(Buf));//считываем порцию данных в буфер

//дальнейшая обработка данных в буфере Buf

end; fs.Destroy;

end;
После открытия файлового потока курсор устанавливается на первом байте данных. В цикле while..do контролируется местоположения курсора — чтение осуществляется до тех пор, пока курсор не попытается уйти за пределы файлового потока.
Замечание

В составе модуля IOUtils объявлена интеллектуальная запись TFile, позволяющая создавать файл методом Create(), открывать OpenRead() и OpenWrite() и возвращать экземпляр потока TFileStream
Пример работы с файловым потоком данных

Воспользуемся вновь полученными знаниями и разработаем небольшую утилиту, позволяющую просматривать содержимое любого файла в шестнадцатеричном формате. Для этого нам потребуется создать новый проект и разместить на поверхности формы 3 компонента:

  • главное меню (TMainMenu);

  • диалог открытия файла (TOpenDialog);

  • текстовый редактор (TMemo).

Дважды щелкнув по главному меню, вызовите редактор меню и создайте в нем единственный элемент "Открыть". Переименуйте этот элемент: Name=miOpen. Затем опишите обработчик события OnClick() по элементу меню так, как предложено в листинге 6.4.


Листинг 6.4. Обрабатываем данные с помощью TFileStream




procedure TfrmMain.miOpenClick(Sender: TObject);

var FS :TFileStream;

LineNum :integer;

buf : Array[0..15] of byte; s :string;

begin

if OpenDialog1.Execute then begin

Memo1.Lines.BeginUpdate; Memo1.Clear;

try

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

while FS.Position do begin

ZeroMemory(@buf,High(buf)+1); //обнуляем буфер FS.Read(buf,SizeOf(Buf));

S:=Format('%.6x| %.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x

%.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x',

[LineNum,buf[0],buf[1],buf[2],buf[3],buf[4],buf[5],buf[6],buf[7],

buf[8],buf[9],buf[10],buf[11],buf[12],buf[13],buf[14],buf[15]]); Memo1.Lines.Add(s);

INC(LineNum,$10);

end; finally

Memo1.Lines.EndUpdate; FS.Free;

end;
end; end;
Щелчок по пункту меню активирует диалог открытия файла. В диалоговом окне пользователь выбирает для просмотра любой файл. Данные из файла считываются в массив, состоящий из 16 ячеек. Затем, после нумерации строк и несложного форматирования, текст построчно передается в компонент Memo1. Операция считывания повторяется вновь до тех пор, пока не доберется до конца файла.

Программа почти готова. Нам осталось написать 3 строки кода в обработчике события OnShow() формы проекта (листинг 6.5).


Листинг 6.5. Настройка многострочного редактора и диалога открытия файла




procedure TForm1.FormShow(Sender: TObject);

begin

Memo1.Font.Name:='Courier New'; Memo1.ReadOnly:=True; OpenDialog1.Filter:='Все файлы|*.*';

end;
Вам осталось откомпилировать проект и попробовать его в работе на каком-нибудь небольшом файле (рис. 6.2).






1   ...   18   19   20   21   22   23   24   25   26

Задание


Рис. 6.2. Утилита просмотра файлов в шестнадцатеричном формате

Разработайте приложение на основе класса TFileStream обеспечивающее следующий функционал

Вариант 1.


    1. Заполнение файла A размерности N (указывается пользователем) случайными целыми числами в диапазоне от 0 до 255.




    1. Разделение файла A на файлы B и C. Причём в файл B должны попасть только чётные значения из A, а в B — нечётные.

    2. Сохраните содержимое файла A в файл D так, чтобы его значения следовали в обратном порядке.

    3. Напишите функцию на вход которой поступает полный путь и имя файла, и возвращающую сумму значений элементов файла.

Вариант 2.


  1. Заполнение файла A размерности N (указывается пользователем) случайными вещественными числами в диапазоне от -1 до 1.

  2. Разделение файла A на файлы B и C. Причём в файл B должны попасть только отрицательные значения из A, а в B — положительные.

  3. Сохраните содержимое файла A в файл D так, чтобы его значения следовали в обратном порядке.

  4. Напишите функцию, на вход которой поступает полный путь и имя файла, и возвращающую сумму значений элементов файла.

Вариант 3.


  1. Заполнение файла A размерности N (указывается пользователем) случайными строчными символами латинского алфавита (1-битная кодировка ANSI).

  2. Разделение файла A на файлы B и C. Причём в файл B должны попасть только символы из A обозначающие гласные буквы, а в B — согласные.

  3. Сохраните содержимое файла A в файл D так, чтобы его значения следовали в обратном порядке.

  4. Напишите функцию, на вход которой поступает полный путь и имя файла, и возвращающую число гласных символов в файле.

Вариант 4.



  1. Заполнение файла A размерности N (указывается пользователем) случайными строчными символами русского алфавита (1-битная кодировка ANSI).

  2. Разделение файла A на файлы B и C. Причём в файл B должны попасть только символы из A обозначающие гласные буквы, а в B — согласные.

  3. Сохраните содержимое файла A в файл D так, чтобы его значения следовали в обратном порядке.

  4. Напишите функцию, на вход которой поступает полный путь и имя файла, и возвращающую число гласных символов в файле.



Вариант 5.


  1. Заполнение файла A размерности N (указывается пользователем) случайными булевыми значениями (boolean).

  2. Сохраните содержимое файла A в файл D так, чтобы его значения следовали в обратном порядке.

  3. Инвертируйте содержимое файла A и сохраните его в файл E.

  4. Напишите функцию, на вход которой поступает полный путь и имя файла, и возвращающую число гласных символов в файле.