Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

TWriter и TReader - читаем и пишем в файл

Delphi , Компоненты и Классы , 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 ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 02:39:04/0.0034120082855225/0