Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.07.2011, 01:00
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию Сохраниение TList

Искал не нашел, как сохранить TList в файл?
Ответить с цитированием
  #2  
Старый 08.07.2011, 01:20
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Он для других целей предназначен. Представь у тебя список объектов загружен а ты их в файл.
Ответить с цитированием
  #3  
Старый 08.07.2011, 01:38
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

плохо, мне как раз в такой форме работать хорошо с ним,
приходится работать со TStringList'ами данные в которых держу через разделители
Цитата:
433676864=24.07.2011%1
54538633=24.07.2011%2
мне кажется не совсем рациональное решение чем можно обойтись с возможность сохранения, и без разделителей?
Ответить с цитированием
  #4  
Старый 08.07.2011, 01:42
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Надо:
1. Написать классы для твоих данных, содержащие кроме того методы SaveToStream и LoadFromStream (по названиям понятно, что они должны делать?)
2. Перейти от TList к TObjectList.
3. Соответсвенно, для сохранения создать файловый поток, а потом у всех объектов в списке вызвать соотв. метод. С загрузкой сложнее, если объекты разнотипные, то надо будет делвть фабрику и дорабатывать сохранение, что бы сначала писался признак класса объекта, а потом сами данные.
Ответить с цитированием
  #5  
Старый 08.07.2011, 01:55
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

lmikle что то вроде этого?

Код:
procedure TForm1.Button2Click(Sender: TObject);
var
  fs: TFileStream;
  pl: PMyList;
  l: Integer;
  s: String;
  b: Boolean;
begin
  if OpenDialog1.Execute then begin
    FormDestroy (Sender);

    fs := TFileStream.Create (OpenDialog1.FileName, fmOpenRead);

    while fs.Position < fs.Size do begin
      fs.ReadBuffer (l, SizeOf(l));
      SetLength (s, l);
      fs.ReadBuffer (Pointer(s)^, l);
      fs.ReadBuffer (b, SizeOf(b));

      New (pl);
      pl.obj := s;
      pl.buffer := b;

      if List = nil then begin
        pl.rnext := nil;
        pl.lnext := nil;
        pl.root := pl;
      end
      else begin
        pl.rnext := nil;
        pl.lnext := List;
        pl.root := List.root;
        List.rnext := pl;
      end;
      List := pl;
    end;

    fs.Free;

    LoadListToForm;
  end;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
  fs: TFileStream;
  pl: PMyList;
  l: Integer;
  s: String;
  b: Boolean;
begin
  if SaveDialog1.Execute then begin
    fs := TFileStream.Create (SaveDialog1.FileName, fmCreate);

    pl := List.root;
    while pl <> nil do begin
      s := pl.obj;
      l := Length (s);
      b := pl.buffer;
      fs.WriteBuffer (l, SizeOf(l));
      fs.WriteBuffer (Pointer(s)^, l);
      fs.WriteBuffer (b, SizeOf(b));
      pl := pl.rnext;
    end;

    fs.Free;
  end;
end;
Ответить с цитированием
  #6  
Старый 08.07.2011, 01:59
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Имелось в виду, НАПИСАТЬ свои классы от существующих.
Ответить с цитированием
  #7  
Старый 08.07.2011, 02:04
Аватар для ALexandr555
ALexandr555 ALexandr555 вне форума
Специалист
 
Регистрация: 09.10.2010
Адрес: Тольятти
Сообщения: 803
Версия Delphi: Delphi 7
Репутация: 2064
По умолчанию

Да нет, нарыл подобный пример, может сделаю так же
Вложения
Тип файла: rar test.rar (5.6 Кбайт, 5 просмотров)
Ответить с цитированием
  #8  
Старый 08.07.2011, 09:49
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
procedure SaveListToFile(const AFileName: String; const AList: TList);
var
  AFileStream: TFileStream;
  i: Integer;
  n: DWORD;
begin
  AFileStream:=TFileStream.Create(AFileName, fmCreate);
  try
    for i:=0 to AList.Count-1 do
    begin
      n:=DWORD(AList[i]);
      AFileStream.WriteBuffer(n, SizeOf(n));
    end;
  finally
    AFileStream.Free;
  end;
end;

использование:

Код:
var
  AList: TList;
begin
  AList:=TList.Create;
  try
    AList.Add(Pointer(8));
    AList.Add(Pointer(7));
    AList.Add(Pointer(2011));
    SaveListToFile('d:\Downloads\AList.txt', AList);
  finally
    AList.Free;
  end;
end;
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #9  
Старый 08.07.2011, 12:35
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Сериализация, парень, сериализация.
У твоего объекта должны быть три метода: первый - это ассайн, второй и третий для обеспечения сериализации.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 08:04.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025