![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сохранение строковых переменных в файл
Ell © (2009-01-16 19:25:00)Хочу сохранить значения переменных типа string в файл (с тем, чтобы при повторном запуске программы их восстанавливать).
Способ типа
var
f: file of byte;
…
AssignFile(f, filename); Rewrite(f); BlockWrite(f,переменная, длина переменной);
…
не работает, т.к. длина не постоянна. Можно, конечно, записывать каждую переменную в отдельный файл, но не хотелось бы - у меня их массивы – много файлов будет, хотел бы поместить все данные в один. Не подскажете, как лучше сделать?
Сергей М. (2009-01-17 19:19:00) [21]
> Ell (16.01.09 21:02) [6]
> как теперь записать этот массив TStringList'ов в файл.
Никак.
ывывыв (2009-01-17 15:41:00) [22]var s:tstringlist;
s:=stringlist.create;
s.add(переменная)...
s.savetofile(Имя файла)
s.destroy
s.loadfromfile(файл)
переменная0:=s[0];
...
Только файл должен существовать до сохранения, но ето уже твои проблемы
Германн (2009-01-17 01:50:00) [23]
> Amoeba © (17.01.09 01:42) [8]
Не поможет твой совет автору, Игорь.
Вряд ли он станет читать ту статью. (Судя по его постам в этой ветке).
Amoeba (2009-01-17 01:42:00) [24]Автору вопроса:
Лицей - http://www.delphikingdom.com/lyceum/
Уроки от Анатолия Подгорецкого - http://www.delphikingdom.com/lyceum/seminar.asp?ID=2
palva (2009-01-16 23:28:00) [25]А ответ [2] вам почему не подходит?
Ell (2009-01-16 21:02:00) [26]Сергей М.
:-) Я если что и знал о TStringList, то не более того, что это было введено специально для А.С. Пушкина :-)
Сейчас в процедуре сохранения данных добавил (.Add) sntings в одномерный массив TStringList'ов (поскольку массив строк двумерный), подскажите как теперь записать этот массив TStringList'ов в файл.
Сергей М. (2009-01-16 20:30:00) [27]
> Ell
TStringList для кого придуман ? для Пушкина ?
Ell (2009-01-16 20:18:00) [28](предыдущее моё сообщение было для Ega23 - сообщения Anatoly Podgoretsky тогда еще не видел)
Ell (2009-01-16 20:16:00) [29]Спасибо, но не совсем тут разобрался. Не могли бы привести пример как задать файл и сохранить в него string используя указанное вами?
Anatoly Podgoretsky (2009-01-16 20:12:00) [30]> Ell (16.01.2009 19:25:00) [0]
Для строк предназначен TextFile
Ega23 (2009-01-16 19:42:00) [31]
type
TBlockHeader = packed record
ID : Cardinal;
Size : Integer;
end;
const
c_IdStr = $0101;
c_IdInt = $0102;
c_IdDateTime = $0103;
c_IdBool = $0104;
c_IdGUID = $0105;
procedure StreamReadString(Stream : TStream; var Value : string; const Size : Integer);
procedure StreamWriteString(Stream : TStream; const Value : string; const TagID : Cardinal);
procedure StreamReadDateTime(Stream : TStream; var Value : TDateTime);
procedure StreamWriteDateTime(Stream : TStream; const Value : TDateTime; const TagID : Cardinal);
procedure StreamReadGUID(Stream : TStream; var Value : TGUID);
procedure StreamWriteGUID(Stream : TStream; const Value : TGUID; const TagID : Cardinal);
procedure StreamReadBoolean(Stream : TStream; var Value : Boolean);
procedure StreamWriteBoolean(Stream : TStream; const Value : Boolean; const TagID : Cardinal);
procedure StreamReadInteger(Stream : TStream; var Value : Integer);
procedure StreamWriteInteger(Stream : TStream; const Value : Integer; const TagID : Cardinal);
implementation
//*****************************************************************************
procedure StreamReadString(Stream : TStream; var Value : string;
const Size : Integer);
begin
SetLength(Value, Size);
Stream.ReadBuffer(PANSIChar(Value)^, Size);
end;
//*****************************************************************************
procedure StreamWriteString(Stream : TStream; const Value : string;
const TagID : Cardinal);
var
bh : TBlockHeader;
begin
bh.ID := TagID;
bh.Size := Length(Value);
Stream.WriteBuffer(bh, SizeOf(TBlockHeader));
Stream.WriteBuffer(PANSIChar(Value)^, bh.Size);
end;
//*****************************************************************************
procedure StreamWriteGUID(Stream : TStream; const Value : TGUID;
const TagID : Cardinal);
var
bh : TBlockHeader;
begin
bh.ID := TagID;
bh.Size := SizeOf(TGUID);
Stream.WriteBuffer(bh, SizeOf(TBlockHeader));
Stream.WriteBuffer(Value, bh.Size);
end;
//*****************************************************************************
......