一次读取INI中的部分内容

williamsong997 2011-05-14 07:12:23
ini文件内容如下:

[Items]
CCA
CCB
CCC
CC2

读取Items下面的内容到ListBox里面.
如何操作呢?
...全文
111 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
williamsong997 2011-05-17
  • 打赏
  • 举报
回复
不过明天等我去找处理过这样的文件的那人问一下到底如何,再回复一下就结贴了.
williamsong997 2011-05-17
  • 打赏
  • 举报
回复
多谢你啊小笨象,
其实当作文本处理应该谁都会,我就是看到有人写的INI里面很多没有用等号的列
并且使用//做注释.
就很奇怪,还以为有人能用处理INI的方式处理呢!
Waiting4you 2011-05-17
  • 打赏
  • 举报
回复
INI格式必须是key=value对。楼主的不标准。不过想偷懒的话还是可以用Windows的API来做一些解析工作,比如:
    char buf[1000]; //要足够大,能存下Items段下的所有内容
GetPrivateProfileSection("Items", buf, 1000, "D:\\ccrun\\123.ini");
for(int i=0; i<1000 && buf[i]; i+=strlen(buf)+1)
{
Memo1->Lines->Add(&buf[i]);
}

只是因为这种INI是不标准的,不能保证以后版本的Windows API能一直支持这样用。
小笨象 2011-05-17
  • 打赏
  • 举报
回复
那要你自己去处理掉了。
还有,ini文件中是以#为注释的。
你的文件本来就不是标准的INI文件,所以,不能用INI的方式来处理了。
你只能是每一行都要判断一下是不是存在//,然后把后面的删除就是了。
还是用TStringList来装载,然后遍历一次吧。
williamsong997 2011-05-17
  • 打赏
  • 举报
回复
毛毛的方法可行,但是还有一个问题.
如果有注释,怎么避掉呢?如下:
[Items]
CCA
CCB
CCC //2011-05-17
CC2 //add by 123
williamsong997 2011-05-16
  • 打赏
  • 举报
回复
老妖,你说的方法我照着试过了,
ReadSection 后lst->Count为0;

不知道你是否注意到[items]下面没有等号的

[Items]
CCA
CCB
CCC
CC2


ccrun.com 2011-05-16
  • 打赏
  • 举报
回复
如果是没有等号的这种,就不是标准的INI格式,那么TIniFile类解析可能就认为是无效的数据段。
这种情况下,你还是用TStringList载入文件,然后遍历Strings[i],再进行分析。
ccrun.com 2011-05-14
  • 打赏
  • 举报
回复
#include <inifiles.hpp>

TIniFile *ini = new TIniFile("D:\\ccrun\\123.ini");
TStringList *lst = new TStringList;
ini->ReadSection("Items", lst);

for (int i = 0; i < lst->Count; i++)
{
Memo1->Lines->Add(String().sprintf(
"%s=%s",
lst->Strings[i],
ini->ReadString("Items", lst->Strings[i], "")
));
}

delete lst;
delete ini;

1,221

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧