C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
TStrings Name=Value, Как оно работает
Himan
Отправлено: 30.12.2005, 12:42


Ученик-кочегар

Группа: Участник
Сообщений: 12



Народ! Помогите разобраться как работает эта фигня. Считывать данные я умею, не раз делал, а вот как создавать эту сладкую парочку нигде не нашёл. sad.gif Читал хелп, но чо то ничего толкового там не нашёл. Для примера возьмём задачу чтения имён ключей и их значений из регистра винды (Для простоты задачи, все ключи строковые). Заранее спасибо
olegenty
Отправлено: 30.12.2005, 12:55


Ветеран

Группа: Модератор
Сообщений: 2412



я п сделал так: map< AnsiString, AnsiString>
и получилось бы так:
CODE

CStrings: private map< AnsiString, AnsiString >
{
...
...
...
   
   AnsiString& operator[](const AnsiString Index)
  {
       const_iterator res = find(Index);
       if (end() != res)
       {
           return res->second;
       } else
       {
           // сделать что-то, если параметра нет...
       }
  }
};
Himan
Отправлено: 30.12.2005, 13:01


Ученик-кочегар

Группа: Участник
Сообщений: 12



Оно бы мне подошло если бы не надо было отображать ИМЯ. Я поставил на форму TComboBox который даёт пользователю возможность выбора. А в зависимости от этого выбора прога читает пути. В реестре эти пути прописаны различными ключами. Поэтому и трахаюсь именно с TStrings
Admin
Отправлено: 30.12.2005, 13:03


Владимир

Группа: Администратор
Сообщений: 1190



QUOTE
Represents the value part of a string associated with a given Name, on strings with the form Name=Value.

__property AnsiString Values[AnsiString Name] = {read=GetValue, write=SetValue};

Description

When the list of strings for the TStrings object includes strings of the form Name=Value, use Values to get or set the value part of a string associated with a specific name part. If the list does not contain any strings of the proper Name=Value form, or if none of those strings matches the Name index, Values returns an empty string.

Note: The Name index is case-insensitive. That is, Values is the value part for the first occurrence of Name or an equivalent string that differs only in case.

Strings of the form Name=Value are commonly found in .ini files. For example, here are a few strings taken from a typical .ini file:

DisplayGrid=1

SnapToGrid=1
GridSizeX=8
GridSizeY=8

The Name that identifies the string is to the left of the equal sign (=), and the current Value of the Name identifier is on the right side. There should be no spaces present before or after the equal sign.


CODE

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
TStringList* SL = new TStringList;
SL->Add("DisplayGrid=1");
SL->Add("SnapToGrid=1");
SL->Add("GridSizeX=8");
SL->Add("GridSizeY=8");


ShowMessage(SL->Values["DisplayGrid"]);
ShowMessage(SL->Values["SnapToGrid"]);
ShowMessage(SL->Values["GridSizeX"]);
ShowMessage(SL->Values["GridSizeY"]);
}
//---------------------------------------------------------------------------


______________________________
А с реестром и работайте с помощью соответствующих классов
TIniFile TREgIniFile, а не с помощью TStrings.


Отредактировано Admin — 30/12/2005, 13:05

Присоединить изображение

Присоединить изображение

Himan
Отправлено: 30.12.2005, 13:23


Ученик-кочегар

Группа: Участник
Сообщений: 12



Спасибо, разобрался. Я так и подозревал что оно так работает

Вернуться в Вопросы программирования в C++Builder