3,881
社区成员
发帖
与我相关
我的任务
分享
//文件c:\tmp\tmp\test.ini的内容:
//[节1]
//键名集合的名称=键名1|键名2|键名3
//键所对应值集合的名称=键名1的值|键名2的值|键名3的值
//#define _UNICODE
//#define UNICODE
#pragma comment(lib,"advapi32")
#include <tchar.h>
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <locale.h>
int n;
TCHAR ks[256],vs[256];
TCHAR *kts[100],*vts[100];
TCHAR *V(TCHAR *K) {
int i;
for (i=0;i<n;i++) {
if (0==_tcscmp(kts[i],K)) {
return vts[i];
}
}
return _T("");
}
int main() {
int i;
TCHAR *kt,*vt;
setlocale(LC_ALL,"chs");
GetPrivateProfileString(_T("节1"),_T("键名集合的名称" ),_T(""),ks,256,_T("c:\\tmp\\tmp\\test.ini"));
_tprintf(_T("ks[%s]\n"),ks);
kt=_tcstok(ks,_T("|"));
i=0;
while (kt!=NULL) {
kts[i]=kt;
i++;if (i>=100) break;
kt=_tcstok(NULL,_T("|"));
}
GetPrivateProfileString(_T("节1"),_T("键所对应值集合的名称"),_T(""),vs,256,_T("c:\\tmp\\tmp\\test.ini"));
_tprintf(_T("vs[%s]\n"),vs);
vt=_tcstok(vs,_T("|"));
i=0;
while (vt!=NULL) {
vts[i]=vt;
i++;if (i>=100) break;
vt=_tcstok(NULL,_T("|"));
}
n=i;
_tprintf(_T("[%s]:%s\n"),_T("键名1"),V(_T("键名1")));
_tprintf(_T("[%s]:%s\n"),_T("键名2"),V(_T("键名2")));
_tprintf(_T("[%s]:%s\n"),_T("键名3"),V(_T("键名3")));
_tprintf(_T("[%s]:%s\n"),_T("键名4"),V(_T("键名4")));
return 0;
}
//ks[键名1|键名2|键名3]
//vs[键名1的值|键名2的值|键名3的值]
//[键名1]:键名1的值
//[键名2]:键名2的值
//[键名3]:键名3的值
//[键名4]:
//
function GetPrivateProfileString2(键名)
GetPrivateProfileString(节名,键名集合的名称,default,buf1,size);
GetPrivateProfileString(节名,键所对应值集合的名称,default,buf2,size);
std::vector<std::string> vec1,vec2;
vec1 = splitString(std::string(buf1), "|", true);
vec2 = splitString(std::string(buf2), "|", true);
std::vector<std::string>::iterator iter;
for (int index=0, iter=vec1.begin(); iter != vec1.end(); iter ++, index++)
{
std::string str = iter;
if (键名==str)
{
return vec2[index];
}
}
return "";
end
//下面这个函数是网上找的,地址是https://blog.csdn.net/u010236463/article/details/43307913
std::vector<std::string> splitString(std::string srcStr, std::string delimStr,bool repeatedCharIgnored)
{
std::vector<std::string> resultStringVector;
std::replace_if(srcStr.begin(), srcStr.end(), [&](const char& c){if(delimStr.find(c)!=std::string::npos){return true;}else{return false;}}/*pred*/, delimStr.at(0));//将出现的所有分隔符都替换成为一个相同的字符(分隔符字符串的第一个)
size_t pos=srcStr.find(delimStr.at(0));
std::string addedString="";
while (pos!=std::string::npos) {
addedString=srcStr.substr(0,pos);
if (!addedString.empty()||!repeatedCharIgnored) {
resultStringVector.push_back(addedString);
}
srcStr.erase(srcStr.begin(), srcStr.begin()+pos+1);
pos=srcStr.find(delimStr.at(0));
}
addedString=srcStr;
if (!addedString.empty()||!repeatedCharIgnored) {
resultStringVector.push_back(addedString);
}
return resultStringVector;
}