Форум: "Начинающим";
Текущий архив: 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.04 c