Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запись в файл текстовых блоков. 
:(
    Опции темы
Coder
  Дата 24.4.2005, 06:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 13.12.2004

Репутация: 5
Всего: 11



У меня в программе очень много редакторов типа TMemo и при сохранении мне необходимо весь имеющийся в них текст и еще несколько переменных сохранить в файл. Делаю так.
Моя запись
Код

// структуру файла задаю так
  TSaveFile = record
    memo1 : TStringList;
    memo2 : TStringList;
    memo3 : TStringList;
    memo4 : TStringList;
    memoN : TStringList;
    ss : String[255];
    UseTimer : boolean;
    RunTimer : longint;
  end;

Procedure Save;
var
f : file of TSaveFile;
Dat : TSaveFile;
begin
dat.memo1:=TStringList.Create;
dat.memo2:=TStringList.Create;
dat.memoN:=TStringList.Create;

dat.memo1.Text:=Memo1.text;
dat.memoN.Text:=MemoN.Text;
dat.ss:='String';
Dat.UseTimer:=true;
Dat.RunTimer:=1000;

AssignFile(F,'C:\save');
rewrite(F);
Write(F,Dat);
closefile(ApiFile);
end;

После выполнения этого кода в файл C:\save записывается только string[255], boolean и longint. Как правильно записать (и потом прочитать) все текстовые блоки в файл?

PM MAIL   Вверх
Pakshin A. S.
Дата 24.4.2005, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 21
Всего: 61



Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Memo2: TMemo;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    procedure SaveToFile;
    procedure LoadFromFile;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

const
 IDrzd = 172;

type
 TDataFile = file;

procedure TForm1.SaveToFile;
var
 f: TDataFile;
 i, j: integer;
 s: string;
 rzd, c:char;
begin
 rzd:=chr(IDrzd);
 c:=#10;
 AssignFile(f, 'C:\Data.txt');
 rewrite(f, 1);
 for j:=0 to Memo1.Lines.Count-1 do
  begin
   s:=Memo1.Lines[j];
   for i:=1 to Length(s) do
    BlockWrite(f, s[i], 1);
   BlockWrite(f, c, 1)
  end;
 BlockWrite(f, rzd, 1);
 for j:=0 to Memo2.Lines.Count-1 do
  begin
   s:=Memo2.Lines[j];
   for i:=1 to Length(s) do
    BlockWrite(f, s[i], 1);
   BlockWrite(f, c, 1)
  end;
 BlockWrite(f, rzd, 1);
 CloseFile(f)
end;

procedure TForm1.LoadFromFile;
var
 f: TDataFile;
 rzd: char;
 c:char;
begin
 rzd:=chr(IDrzd);
 AssignFile(f, 'C:\Data.txt');
 reset(f, 1);
 if not Eof(f)
  then
   begin
    Memo1.Lines.Text:='';
    BlockRead(f, c, 1);
    while not Eof(f) and (c <> rzd) do
     begin
      Memo1.Lines.Text:=Memo1.Lines.Text + c;
      Application.ProcessMessages;
      BlockRead(f, c, 1)
     end
   end;
 if not Eof(f)
  then
   begin
    Memo2.Lines.Text:='';
    BlockRead(f, c, 1);
    while not Eof(f) and (c <> rzd) do
     begin
      Memo2.Lines.Text:=Memo2.Lines.Text + c;
      Application.ProcessMessages;
      BlockRead(f, c, 1)
     end
   end;
 CloseFile(f)
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 SaveToFile
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 LoadFromFile
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
 Memo1.Lines.Clear;
 Memo2.Lines.Clear
end;

end.

Вот такая идея использования файлов...
Добавлено @ 08:39
Ее можно несколько додумать... Чтобы быстрее информация загружалась... smile
PM   Вверх
Pakshin A. S.
Дата 24.4.2005, 08:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 21
Всего: 61



Вот... по-моему это достаточно быстро...
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Memo2: TMemo;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    procedure SaveToFile;
    procedure LoadFromFile;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

const
 IDrzd = 172;
 IntConst = 1234; // пример
 BoolConst = true; // пример

type
 TDataFile = text;

procedure TForm1.SaveToFile;
var
 f: TDataFile;
 i, j: integer;
 s: string;
 rzd, c:char;
begin
 rzd:=chr(IDrzd);
 AssignFile(f, 'C:\Data.txt');
 rewrite(f);
 write(f, Memo1.Lines.Text,   rzd);
 write(f, Memo2.Lines.Text,   rzd);
 write(f, IntToStr(IntConst), rzd);
 write(f, ord(BoolConst),     rzd);
 CloseFile(f);
 ShowMessage('Текст сохранен')
end;

procedure TForm1.LoadFromFile;
var
 f: TDataFile;
 rzd: char;
 c:char;
 BufMemo: TMemo;
 s:string;
begin
 rzd:=chr(IDrzd);
 BufMemo:=TMemo.Create(Form1);
 BufMemo.Parent:=Form1;
 BufMemo.Visible:=false;
 BufMemo.Lines.LoadFromFile('C:\Data.txt');
 s:=BufMemo.Lines.Text;
 BufMemo.Free;
 Memo1.Lines.Text:=Copy(s, 1, Pos(rzd, s)-1);
 Delete(s, 1, Pos(rzd, s));
 Memo2.Lines.Text:=Copy(s, 1, Pos(rzd, s)-1);
 Delete(s, 1, Pos(rzd, s));
 Edit1.Text:=Copy(s, 1, Pos(rzd, s)-1);
 Delete(s, 1, Pos(rzd, s));
 if StrToInt(Copy(s, 1, Pos(rzd, s)-1)) = ord(true)
  then
   Edit2.Text:='true'
  else
   Edit2.Text:='false';
 ShowMessage('Текст загружен')
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 SaveToFile
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 LoadFromFile
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
 Memo1.Lines.Clear;
 Memo2.Lines.Clear
end;

procedure TForm1.Button4Click(Sender: TObject);
var
 i:integer;
begin
 for i:=1 to 2000 do
  begin
   Memo1.Lines.Add(IntToStr(i));
   Memo2.Lines.Add(IntToStr(i));
   Application.ProcessMessages
  end;
end;

end.


+ Пример записи/чтения числа и булевской переменной... smile

Это сообщение отредактировал(а) Pakshin A. S. - 24.4.2005, 08:55
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0516 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.