Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.03.15;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.062 c
2-1232625697
fat.hamster
2009-01-22 15:01
2009.03.15
Правильный способ обработки ошибок в OnCreate?


2-1232123154
Ell
2009-01-16 19:25
2009.03.15
Сохранение строковых переменных в файл


15-1227270150
nnov
2008-11-21 15:22
2009.03.15
Vista Home Premium - LAN - XP sp2


10-1153497317
TStas
2006-07-21 19:55
2009.03.15
Как добраться до колонтитула в Ворде?


15-1231418031
unregistered
2009-01-08 15:33
2009.03.15
Есть автомагнитолы, которые НЕ распознают mp3 в папках?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский