Я пытаюсь прочитать INI-файл в списке значений.
Пример ниже работает, но я не знаю почему.
ReadSectionValues
содержит список строк ini.
Как Rad Studio анализирует строки с помощью:
ListValues->Names[i]
первая часть линии и ListValues->Values[ListValues->Names[i]]
вторая часть?
int i;
try
{
//ShowMessage( ListBox1->Items->Strings[ListBox1->ItemIndex] );
TStringList *ListValues = new TStringList;
TIniFile* SettingsFile = new TIniFile(ExtractFilePath(Application->ExeName) + "settings.ini");
String s;
s = ListBox1->Items->Strings[ListBox1->ItemIndex];
SettingsFile->ReadSectionValues( s , ListValues);
for (i = 0; i < (ListValues->Count); i++) {
//ShowMessage(ListValues->Names[i]);
//ShowMessage(ListValues->Values[ListValues->Names[i]]);
vList1->InsertRow(ListValues->Names[i] , ListValues->Values[ListValues->Names[i]],True);
}
delete SettingsFile;
delete ListValues;
}
catch(Exception* e)
{
ShowMessage(e->Message);
}
Пожалуйста, объясните, помощь Rad Stuido не нашла объяснения.
void __fastcall ReadSectionValues(
const System::UnicodeString Section,
System::Classes::TStrings* Strings
)
метод, который получает все строки раздела ini-файла с именем Section
и сохраняет их в TStrings-объекте Strings
, Обратите внимание, что эти строки имеют формат name=value
,
Класс TStrings имеет два свойства доступа имена а также Ценности. Их алгоритм разбора очень прост. Если вы получаете stringsObject->Values[1]
занимает вторую строку stringsObject
и разбивает его на две строки =
(или другое значение NameValueSeparator
собственностью stringsObject
). Строка слева от =
(разделитель) возвращается как имя (по свойству Name
) и строка справа от =
возвращается как значение (по свойству Value
).
Других решений пока нет …