Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.03.15;
Скачать: CL | DM;

Вниз

Сохранение строковых переменных в файл   Найти похожие ветки 

 
Ell   (2009-01-16 19:25) [0]

Хочу сохранить значения переменных типа string в файл (с тем, чтобы при повторном запуске программы их восстанавливать).
Способ типа

var
 f: file of byte;

 AssignFile(f, filename);  Rewrite(f);  BlockWrite(f,переменная, длина переменной);


не работает, т.к. длина не постоянна. Можно, конечно, записывать каждую переменную в отдельный файл, но не хотелось бы - у меня их массивы – много файлов будет, хотел бы поместить все данные в один. Не подскажете, как лучше сделать?


 
Ega23 ©   (2009-01-16 19:42) [1]

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;

//*****************************************************************************

......


 
Anatoly Podgoretsky ©   (2009-01-16 20:12) [2]

> Ell  (16.01.2009 19:25:00)  [0]

Для строк предназначен TextFile


 
Ell   (2009-01-16 20:16) [3]

Спасибо, но не совсем тут разобрался. Не могли бы привести пример как задать файл и сохранить в него string используя указанное вами?


 
Ell   (2009-01-16 20:18) [4]

(предыдущее моё сообщение было для Ega23 - сообщения Anatoly Podgoretsky тогда еще не видел)


 
Сергей М. ©   (2009-01-16 20:30) [5]


> Ell


TStringList для кого придуман ? для Пушкина ?


 
Ell   (2009-01-16 21:02) [6]

Сергей М.
:-) Я если что и знал о TStringList, то не более того, что это было введено специально для А.С. Пушкина :-)

Сейчас в процедуре сохранения данных добавил (.Add) sntings в одномерный массив TStringList"ов (поскольку массив строк двумерный), подскажите как теперь записать этот массив TStringList"ов в файл.


 
palva ©   (2009-01-16 23:28) [7]

А ответ [2] вам почему не подходит?


 
Amoeba ©   (2009-01-17 01:42) [8]

Автору вопроса:

Лицей - http://www.delphikingdom.com/lyceum/
Уроки от Анатолия Подгорецкого - http://www.delphikingdom.com/lyceum/seminar.asp?ID=2


 
Германн ©   (2009-01-17 01:50) [9]


> Amoeba ©   (17.01.09 01:42) [8]

Не поможет твой совет автору, Игорь.
Вряд ли он станет читать ту статью. (Судя по его постам в этой ветке).


 
ывывыв   (2009-01-17 15:41) [10]

var s:tstringlist;

s:=stringlist.create;
s.add(переменная)...
s.savetofile(Имя файла)
s.destroy

s.loadfromfile(файл)
переменная0:=s[0];
...

Только файл должен существовать до сохранения, но ето уже твои проблемы


 
Сергей М. ©   (2009-01-17 19:19) [11]


> Ell   (16.01.09 21:02) [6]


> как теперь записать этот массив TStringList"ов в файл.


Никак.


 
Юрий Зотов ©   (2009-01-17 19:36) [12]

Посмотрите TIniFile. Двумерный массив строк туда сохраняется запросто, читается тоже.


 
Германн ©   (2009-01-18 02:02) [13]


> Юрий Зотов ©   (17.01.09 19:36) [12]
>
> Посмотрите TIniFile. Двумерный массив строк туда сохраняется
> запросто, читается тоже.
>

Хм. А и в правду IniFile можно рассматривать как "двумерный массив строк".
Точнее - запись в файл такого массива.


 
KilkennyCat ©   (2009-01-18 14:31) [14]

IniFile можно рассматривать как "сколькоикакугодномерный массив строк".


 
Ell   (2009-01-20 20:40) [15]

Спасибо всем.
С TIniFile разобрался. Сейчас ищу как определить каталог из которого запущена программа, чтобы указать его в имени ini файла. Подскажете?


 
Сергей М. ©   (2009-01-20 20:49) [16]


> каталог из которого запущена программа, чтобы указать его
> в имени ini файла


За каким лешим имя каталога потребовалось иметь в имени файла ?


 
Ell   (2009-01-20 20:54) [17]

Сергей М., хочу, чтобы INI файл был там же, где и программа. По умолчанию же Writeini.WriteString сохраняет в папку Windows


 
{RASkov} ©   (2009-01-20 20:55) [18]

ExtractFilePath(ParamStr(0))+"name.ini";


 
Ell   (2009-01-20 20:56) [19]

Спасибо


 
Сергей М. ©   (2009-01-20 21:00) [20]


> хочу, чтобы INI файл был там же, где и программа


Ну и хоти себе на здоровье  !

Но зачем это самое "там же" должно быть увековечено в имени файла ?
Имя файла и "был там же" - это же две разные разницы)


 
KilkennyCat ©   (2009-01-20 22:27) [21]


> Сергей М. ©   (20.01.09 21:00) [20]

Cейчас тебе тоже объяснят, что эта ветка в форуме для начинающих, и что было понятно, что автор имел ввиду, так как это очевидно и т.д. и т.п.


 
Ell   (2009-01-21 00:04) [22]

Жаль, с ini файлом не работает :-) У меня там большие strings (с абзацами), из ini считывается только первый абзац :-)


 
Плохиш ©   (2009-01-21 01:35) [23]

Так, чем [2] и [8] не устраивают?


 
Ell   (2009-01-21 12:33) [24]

Плохиш. Насчет [8] - это не прямые ссылки по поводу моего вопроса, это  книги, в которых мне предлагается искать ответ. [2] кроме "TextFile" тоже ничего конкретного не содержит. Но, спасибо, я, наверное, поразбираюсь с TextFile. (Вообще, ожидал, что мне просто напишут несколько строк кода и проблема была бы решена.)


 
Ega23 ©   (2009-01-21 12:39) [25]


> Вообще, ожидал, что мне просто напишут несколько строк кода
> и проблема была бы решена.


Эта... Совсем уже [CENSORED] студенты [CENSORED].


 
Jeer ©   (2009-01-21 12:47) [26]


> Ega23 ©   (21.01.09 12:39) [25]
>
>
> > Вообще, ожидал, что мне просто напишут несколько строк
> кода
> > и проблема была бы решена.
>
>
> Эта... Совсем уже [CENSORED] студенты [CENSORED].


А ты распинался..
Столько страшных слов из незнакомых букв произнес в [1]


 
Anatoly Podgoretsky ©   (2009-01-21 19:14) [27]

> Ell  (21.01.2009 12:33:24)  [24]

Несколько строк кода http://www.podgoretsky.com/Redir.aspx?id=143&DownloadFile=~/ddp/PasFiles.aspx есть здесь.


 
Сергей М. ©   (2009-01-21 19:53) [28]


> KilkennyCat ©   (20.01.09 22:27) [21]
>
>
> > Сергей М. ©   (20.01.09 21:00) [20]
>
> Cейчас тебе тоже объяснят,


С этими буквами я знаком, не беспокойся.


 
Сергей М. ©   (2009-01-21 19:55) [29]


> Ell   (21.01.09 00:04) [22]


Ты, похоже, не представляешь, какую ахинею ты сейчас несешь.


 
Ell   (2009-01-22 19:30) [30]

Всем. Умнику Сергею М. особенно.
ПРОШУ ПРОЩЕНИЯ, ЧТО ЗАДАЛ ВОПРОС. На этом форуме такого от меня больше не повторится.


 
Сергей М. ©   (2009-01-22 19:53) [31]


> Ell   (22.01.09 19:30) [30]


На здорвье.
Носи не стаптывай)



Страницы: 1 вся ветка

Текущий архив: 2009.03.15;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.018 c
15-1231788345
Прайм
2009-01-12 22:25
2009.03.15
В каком юните находится функция Arc?


15-1231263856
Кое кто
2009-01-06 20:44
2009.03.15
Большой архив маленьких английских рассказов...


15-1231169901
@!!ex
2009-01-05 18:38
2009.03.15
Посоветуйте: какой винт покупать?


15-1231600877
Alkid
2009-01-10 18:21
2009.03.15
Про электрику вопрос


15-1231668190
Leshiy
2009-01-11 13:03
2009.03.15
Backup/restore через удаленный рабочий стол