【问题标题】:C++ TStringsList parse explanationC++ TStringsList解析解释
【发布时间】:2013-10-24 09:25:18
【问题描述】:

我正在尝试读取值列表框中的 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 帮助找不到解释。

【问题讨论】:

    标签: c++ c++builder ini tstringlist tinifile


    【解决方案1】:
    void __fastcall ReadSectionValues(
      const System::UnicodeString Section, 
      System::Classes::TStrings* Strings
    )
    

    是一种方法,它获取名称为Section 的ini 文件部分的所有行并将它们存储在TStrings-object Strings 中。请注意,这些字符串的格式为name=value

    TStrings 类有两个访问属性NamesValues。他们的解析算法非常简单。如果您得到stringsObject-&gt;Values[1],它将从stringsObject 中取出第二行并将其拆分为= 上的两个字符串(或NameValueSeparatorNameValueSeparator 属性的其他值@ 987654332@)。 =(分隔符)左侧的字符串作为名称返回(通过属性Name),= 右侧的字符串作为值返回(通过属性Value)。

    【讨论】:

    • 谢谢!这是否意味着我可以使用 Tstring 来使用分隔符将字符串拆分为多个部分?我问这个是因为搜索拆分字符串函数给了我一些复杂的结果,然后使用 Tstrings 可以解决这个问题。
    • 是的,你可以。我做到了,它对我有用。唯一的限制(与良好的拆分功能相比)是您只能拆分为两部分,并且只能拆分单个字符,但不能拆分子字符串。
    • 非常有帮助。再次感谢!
    • 请不要忘记勾选正确的答案。它也会给你 +2 reputation points :)
    • 好吧,我忘了。继续进行程序:)
    猜你喜欢
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    • 2011-10-27
    • 2015-11-17
    • 1970-01-01
    • 2012-06-10
    相关资源
    最近更新 更多