首页 > 解决方案 > 选择和处理以给定字符串开头的 INI 文件部分

问题描述

我正在使用内置函数 ReadSections() 从 Ini 文件中读取部分。所以为此我必须将部分名称作为参数传递,但现在我想读取从 ADD.EXE 开始的所有部分,我该怎么做?会有多个部分,如 ADD.EXE_NEW、ADD.EXE_OLD、ADD.EXE_First、SEC.EXE、THIRD.EXE,所以我只想阅读名称以 ADD.EXE 开头的部分

  unique_ptr<TDataIniFile> UserIni(new TDataIniFile(File));

  if (UserIni->ReadSections("ADD.EXE")

标签: c++c++builder

解决方案


ReadSections()获取一个TStrings*指向您创建的字符串列表对象的指针,然后它将使用 INI 中的部分名称填充,例如:

std::unique_ptr<TStringList> sections(new TStringList);
std::unique_ptr<TDataIniFile> UserIni(new TDataIniFile(File));
UserIni->ReadSections(sections.get());

然后,您可以根据需要枚举该字符串列表,例如:

for(int i = 0; i < sections->Count; ++i)
{
    String section = sections->Strings[i];
    if (StartsText(_D("ADD.EXE"), section))
    {
        // read values for section from UserIni as needed...
    }
}

或者:

// standard range-for doesn't work with TStringList, but
// std::for_each() does via iterators from non-member
// begin()/end() functions found via ADL...

//for(String section : *sections)
std::for_each(begin(sections.get()), end(sections.get()),
    [&](const String &section)
    {
        if (StartsText(_D("ADD.EXE"), section))
        {
            // read values for section from UserIni as needed...
        }
    }
);

推荐阅读