ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 10.01.2024
Просмотров: 289
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
ЛР 1. Операторы и выражения Delphi
Управление жизненным циклом объекта
Ограничение видимости членов класса
Особенности объявления методов
Принадлежность к родительскому контейнеру
Размещение и размеры элемента управления
Видимость и активность элемента управления
ЛР5. Обработка клавиатурных событий и событий мышки
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
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
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.
-
Заполнение файла A размерности N (указывается пользователем) случайными целыми числами в диапазоне от 0 до 255.
-
Разделение файла A на файлы B и C. Причём в файл B должны попасть только чётные значения из A, а в B — нечётные. -
Сохраните содержимое файла A в файл D так, чтобы его значения следовали в обратном порядке. -
Напишите функцию на вход которой поступает полный путь и имя файла, и возвращающую сумму значений элементов файла.
Вариант 2.
-
Заполнение файла A размерности N (указывается пользователем) случайными вещественными числами в диапазоне от -1 до 1. -
Разделение файла A на файлы B и C. Причём в файл B должны попасть только отрицательные значения из A, а в B — положительные. -
Сохраните содержимое файла A в файл D так, чтобы его значения следовали в обратном порядке. -
Напишите функцию, на вход которой поступает полный путь и имя файла, и возвращающую сумму значений элементов файла.
Вариант 3.
-
Заполнение файла A размерности N (указывается пользователем) случайными строчными символами латинского алфавита (1-битная кодировка ANSI). -
Разделение файла A на файлы B и C. Причём в файл B должны попасть только символы из A обозначающие гласные буквы, а в B — согласные. -
Сохраните содержимое файла A в файл D так, чтобы его значения следовали в обратном порядке. -
Напишите функцию, на вход которой поступает полный путь и имя файла, и возвращающую число гласных символов в файле.
Вариант 4.
-
Заполнение файла A размерности N (указывается пользователем) случайными строчными символами русского алфавита (1-битная кодировка ANSI). -
Разделение файла A на файлы B и C. Причём в файл B должны попасть только символы из A обозначающие гласные буквы, а в B — согласные. -
Сохраните содержимое файла A в файл D так, чтобы его значения следовали в обратном порядке. -
Напишите функцию, на вход которой поступает полный путь и имя файла, и возвращающую число гласных символов в файле.
Вариант 5.
-
Заполнение файла A размерности N (указывается пользователем) случайными булевыми значениями (boolean). -
Сохраните содержимое файла A в файл D так, чтобы его значения следовали в обратном порядке. -
Инвертируйте содержимое файла A и сохраните его в файл E. -
Напишите функцию, на вход которой поступает полный путь и имя файла, и возвращающую число гласных символов в файле.