TWriter и TReader - читаем и пишем в файл
TWriter и TReader - читаем и пишем в файл
unit MsForm;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class (TForm)
ButtonReadText: TButton;
ButtonWriteLines: TButton;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
Memo1: TMemo;
ButtonReadLines: TButton;
ButtonWriteRev: TButton;
ButtonMoveLines: TButton;
procedure ButtonReadTextClick(Sender: TObject);
procedure ButtonWriteLinesClick(Sender: TObject);
procedure ButtonReadLinesClick(Sender: TObject);
procedure ButtonWriteRevClick(Sender: TObject);
procedure ButtonMoveLinesClick(Sender: TObject);
end ;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.ButtonReadTextClick(Sender: TObject);
var
Str1: TFileStream;
I: Integer;
begin
OpenDialog1.Filter :=
'Text File (*.txt)|*.txt|Pascal File (*.pas)|*.pas|' +
'ReadWrite File (*.rwt)|*.rwt|Any file (*.*)|*.*';
OpenDialog1.DefaultExt := 'txt';
if OpenDialog1.Execute then
begin
Str1 := TFileStream.Create (
OpenDialog1.Filename, fmOpenRead);
try
Memo1.Lines.LoadFromStream (Str1);
finally
Str1.Free;
end ;
// enable all buttons
for I := 0 to ControlCount - 1 do
if Controls [I] is TButton then
TButton (Controls [I]).Enabled := True ;
end ;
end ;
procedure TForm1.ButtonWriteLinesClick(Sender: TObject);
var
Str1: TFileStream;
Writer1: TWriter;
I: Integer;
begin
SaveDialog1.Filter :=
'Read Write file (*.rwf)|*.rwf|Any file (*.*)|*.*';
SaveDialog1.FilterIndex := 1;
SaveDialog1.DefaultExt := 'rwt';
if SaveDialog1.Execute then
begin
Str1 := TFileStream.Create (
SaveDialog1.FileName, fmCreate or fmOpenWrite);
Writer1 := TWriter.Create (Str1, 1024);
try
Writer1.WriteListBegin;
for I := 0 to Memo1.Lines.Count - 1 do
Writer1.WriteString (Memo1.Lines [I]);
Writer1.WriteListEnd;
finally
Writer1.Free;
Str1.Free;
end ;
end ;
end ;
procedure TForm1.ButtonReadLinesClick(Sender: TObject);
var
Str1: TFileStream;
Reader1: TReader;
I: Integer;
begin
OpenDialog1.Filter :=
'Read Write file (*.rwf)|*.rwf|Any file (*.*)|*.*';
OpenDialog1.FilterIndex := 1;
OpenDialog1.DefaultExt := 'rwt';
if OpenDialog1.Execute then
begin
Str1 := TFileStream.Create (
OpenDialog1.Filename, fmOpenRead);
Reader1 := TReader.Create (Str1, 1024);
try
Reader1.ReadListBegin;
Memo1.Lines.Clear;
while not Reader1.EndOfList do
begin
Memo1.Lines.Add (Reader1.ReadString);
Application.ProcessMessages;
end ;
Reader1.ReadListEnd;
finally
Reader1.Free;
Str1.Free;
end ;
// enable all buttons
for I := 0 to ControlCount - 1 do
if Controls [I] is TButton then
TButton (Controls [I]).Enabled := True ;
end ;
end ;
procedure TForm1.ButtonWriteRevClick(Sender: TObject);
var
Str1: TFileStream;
Writer1: TWriter;
I: Integer;
begin
SaveDialog1.Filter :=
'Read Write Test file (*.rwt)|*.rwt|Any file (*.*)';
SaveDialog1.DefaultExt := 'rwt';
if SaveDialog1.Execute then
begin
Str1 := TFileStream.Create (
SaveDialog1.FileName, fmCreate or fmOpenWrite);
Writer1 := TWriter.Create (Str1, 1024);
try
Writer1.WriteListBegin;
for I := Memo1.Lines.Count - 1 downto 0 do
Writer1.WriteString (Memo1.Lines [I]);
Writer1.WriteListEnd;
finally
Writer1.Free;
Str1.Free;
end ;
end ;
end ;
procedure TForm1.ButtonMoveLinesClick(Sender: TObject);
var
MemStr1: TMemoryStream;
Writer1: TWriter;
Reader1: TReader;
I: Integer;
begin
MemStr1 := TMemoryStream.Create;
try
Writer1 := TWriter.Create (MemStr1, 1024);
try
Writer1.WriteListBegin;
Randomize;
while Memo1.Lines.Count > 0 do
begin
I := Random (Memo1.Lines.Count);
Writer1.WriteString (Memo1.Lines [I]);
Memo1.Lines.Delete (I);
Application.ProcessMessages;
end ;
Writer1.WriteListEnd;
finally
Writer1.Free;
end ;
// reset, rewind, move back
// to the beginning of the stream
MemStr1.Seek (0, soFromBeginning);
Reader1 := TReader.Create (MemStr1, 1024);
try
Reader1.ReadListBegin;
while not Reader1.EndOfList do
begin
Memo1.Lines.Add (Reader1.ReadString);
Application.ProcessMessages;
end ;
Reader1.ReadListEnd;
finally
Reader1.Free;
end ;
finally
memStr1.Free;
end ;
end ;
end .
Загрузить весь проект
Вот перевод текста на русский язык:
Основной форм
Основная форма (TForm1) содержит несколько кнопок для выполнения различных операций с текстовыми файлами. Эти кнопки подключены к процедурам, которые обрабатывают соответствующие действия.
Процедуры
Существует пять процедур, которые обрабатывают клики кнопок:
procedure TForm1 . ButtonReadTextClick ( Sender : TObject ) ;
Эта процедура читает текстовый файл с помощью TFileStream и загружает его содержимое в компонент мемо (Memo1). Она также включает все кнопки на форме после чтения.
procedure TForm1 . ButtonWriteLinesClick ( Sender : TObject ) ;
Эта процедура записывает содержимое Memo1 в новый текстовый файл с помощью TWriter. Файл сохраняется с умолчательным расширением .rwt.
procedure TForm1 . ButtonReadLinesClick ( Sender : TObject ) ;
Эта процедура читает текстовый файл с помощью TReader и загружает его содержимое в Memo1. Она также включает все кнопки на форме после чтения.
procedure TForm1 . ButtonWriteRevClick ( Sender : TObject ) ;
Эта процедура записывает содержимое Memo1 в новый текстовый файл в обратном порядке с помощью TWriter.
procedure TForm1 . ButtonMoveLinesClick ( Sender : TObject ) ;
Эта процедура перемещает строки случайно из Memo1 в памятный поток, reverses порядок строк и затем читает их обратно в Memo1. Она использует TMemoryStream, TWriter и TReader для этой операции.
Замечания
Проект использует встроенные компоненты Delphi TFileStream, TWriter и TReader для чтения и записи текстовых файлов.
Процедуры используют компонент мемо (Memo1) как буфер для чтения и записи текстовых данных.
Процедура ButtonMoveLinesClick является наиболее сложной, используя случайность и памятные потоки для перемещения строк случайно.
В целом, это проект демонстрирует, как выполнять основные операции с файлами в Delphi, такие как чтение и запись текстовых файлов, с дополнительными функциями, такими как обратный порядок строк и перемещение строк случайно.
В статье описывается создание приложения на Delphi, которое позволяет читать и записывать текстовые файлы с помощью классов TWriter и TReader.
Комментарии и вопросы Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: TWriter и TReader ::