Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как записать record в ini-файл ? [D5, D7, WinME, WinXP]


Алекс А ©   (2004-07-11 05:11:00) 

Только не в виде BinaryStream, а чтобы
параметр1=его значение
параметр2=его значение
и т. д.


Sergey Kaminski   (2004-07-15 03:34:00) [1]

Иногда имеет смысл все настройки программы (или что там будет находиться в рекордах) запихнуть не в рекорды, а в специальный класс. Каждое поле рекорда - published свойство этого класса. И написать 2 универсальных метода в этом классе для записи и восстановления значений его pusblished свойств. Если нравится - то можно через RTTI, а можно и проще.
Я отвечал на первый вопрос в ветке, так что если чего-то не то посоветовал -- ссори (устал и бессоница).


Алекс А   (2004-07-15 02:49:00) [2]


> Германн ©   (15.07.04 02:37) [12]
> 2 Алекс А   (15.07.04 01:48) [11]
>
> > Как получить количество и список элементов record'а, и
> как >получить значения каждого из них ?
> ... А record твой?

В смысле мой ? Мой !


Германн   (2004-07-15 02:37:00) [3]

2 Алекс А   (15.07.04 01:48) [11]

> Как получить количество и список элементов record'а, и как >получить значения каждого из них ?
... А record твой?

> Возможно лучше сохранять рекорды не в виде ини-файла, а в виде >дерева. Так как по структуре похоже.
Возможно, но если ты "почувствуешь разницу"! Между "ини-файлом" и "деревом". Причем не важно, что это за дерево! Береза, дуб, осина, ЛИПА...


Алекс А   (2004-07-15 01:48:00) [4]

Как получить количество и список элементов record'а, и как получить значения каждого из них ?
Возможно лучше сохранять рекорды не в виде ини-файла, а в виде дерева. Так как по структуре похоже.


KilkennyCat   (2004-07-12 23:47:00) [5]


> GrayFace ©   (12.07.04 05:28) [8]
> Разве 4) возможно?


Наверное... попробую на днях.


> > дальше там TVector идет, извиняюсь, его придется тоже
> раскладывать.
> Его-то можно автоматизировать. Если он - наследник TComponent,
> то можно писать в MemoryStream, а потом переводить в строки.
> Формат там не сложный. А можно изменить TWriter.


э... я подумал, что TVector - это определенный пользователем тип :)


Anatoly Podgoretsky   (2004-07-12 08:53:00) [6]

Алекс А   (12.07.04 01:48) [4]
Данная запись бессмысленна для записи в файлы любого типа, тем более в ИНИ. Писать указатели в файлы просто бессмысленно и результатом подобных действий банальное AV


GrayFace   (2004-07-12 05:28:00) [7]

Разве 4) возможно?
> дальше там TVector идет, извиняюсь, его придется тоже раскладывать.
Его-то можно автоматизировать. Если он - наследник TComponent, то можно писать в MemoryStream, а потом переводить в строки. Формат там не сложный. А можно изменить TWriter.


KilkennyCat   (2004-07-12 03:29:00) [8]


> Алекс А   (12.07.04 03:19) [6]


а если тысяча, то несколько вариантов:
1) застрелиться
2) утопиться
3) прийти наконец к осознанию того, что некоторые вещи просто не стоит делать.
4) написать одну универсальную функцию, которая сама посчитает число всех итемов рекорда и засунет в ини, как строку.


Алекс А   (2004-07-12 03:19:00) [9]


> KilkennyCat ©   (12.07.04 02:08) [5]
>
>  WriteInteger(Section, Ident, Djut.Link2);
>  WriteFloat(Section, Ident, Djut.MassDensity);
>  WriteFloat(Section, Ident, Djut.dParamFMax[0]);
>  WriteFloat(Section, Ident, Djut.dParamFMax[1]);
>  WriteFloat(Section, Ident, Djut.dParamFMax[2]);
> .....
> дальше там TVector идет, извиняюсь, его придется тоже раскладывать.
>
> Что сложного?
> ничего.


А если будет десть record'ов, то надо написать всего лишь десять таких же функций. А если тысяча, то тысячу. Всего лишь. "Что сложного ? Ничего" © Одни из "мастеров" Дельфи.


KilkennyCat   (2004-07-12 02:08:00) [10]

Я так понимаю, стрим не устраивает, потому как хочется потом ручками ини править? другого объяснения не вижу....
Тогда как я уже в самом верху говорил:

Var
Djut : TJointSettings;
i : byte;
.......

begin
 ......
 WriteInteger(Section, Ident, Djut.Link2);
 WriteFloat(Section, Ident, Djut.MassDensity);
 WriteFloat(Section, Ident, Djut.dParamFMax[0]);
 WriteFloat(Section, Ident, Djut.dParamFMax[1]);
 WriteFloat(Section, Ident, Djut.dParamFMax[2]);
.....
дальше там TVector идет, извиняюсь, его придется тоже раскладывать.

Что сложного?
ничего.
Что красивого?
ничего.
Какой выход?
отказаться от правки ини ручками.
Почему?
Потому что рядовому пользователю править ини вообще доверять не стоит, а не рядовому надо сделать кнопку "Сеттингс".


Алекс А   (2004-07-12 01:48:00) [11]


> Defunct ©   (11.07.04 05:30) [2]
> Write(F,'параметр1'+'=');
> WriteLn(F, его значение);
>
> и т.д. в цикле.

И как вы себе представляеет этот цикл ?
Вот вам рекорд для примера :


 TJointSettings = record
   Link2: Integer;
   MassDensity: Single;
   dParamFMax: array[0..2] of Single;
   Axis: array[0..2] of TVector;
   Str1: string;
   filename: PChar;
   Name: array[0..31] of Char;
 end;


Anatoly Podgoretsky   (2004-07-11 10:20:00) [12]

Defunct ©   (11.07.04 05:30) [2]
А одним оператором ни как
А воспользоваться TIniFiles наверно совсем не по силам


Defunct   (2004-07-11 05:30:00) [13]

Write(F,'параметр1'+'=');
WriteLn(F, его значение);

и т.д. в цикле.


KilkennyCat   (2004-07-11 05:29:00) [14]

так и писать, как Вы сами написали...


Наверх

Титульная страница Поиск, карта сайта Написать письмо