gpt4 book ai didi

c++ - 如何在 C++ 中读取与反斜杠分隔的键对应的值

转载 作者:太空宇宙 更新时间:2023-11-04 12:34:18 25 4
gpt4 key购买 nike

我想在 C++ 中读取和解析 ini 文件中的一个部分

我试图在 GetPrivateProfileString 的帮助下读取它,但它读取到“$THIS$=somevalue”,\并且没有进一步读取。

文件.ini

[Mysection]
UserDefinedVariables="$THIS$=somevalue",\
"$THAT$=somevalue1",\
"$DEVICE1$=somevalue2",\
"$DEVICE2$=somevalue3",\
"$DEVICE3$=somevalue4"

C++文件

wchar_t deviceName[200];
GetPrivateProfileString(L"Mysection", L"UserDefinedVariables", NULL, deviceName, sizeof(deviceName), file.ini);

在这里,我对对应于 $DEVICE1$ 的值特别感兴趣,即 somevalue2。有什么方法可以利用 Windows API 来读取它吗?

最佳答案

是的。您可以使用此功能。但我怀疑这是你想要做的。

问题是您的输入文件有误。末尾的\通常是行的连接符。所以,所有的文本都应该在一行中。然后应该解析结果。

下一行再次被视为具有值的键。

但 key 不是您所期望的 $DEVICE1$,而是“$DEVICE1$。请参阅附加”。请阅读功能 docu .

如果您搜索该键,您将得到一个结果。但这里又附加了一个“。

所以下面几行的格式不正确,原因是我之前解释过的。要查看此功能的工作原理(您首先不应使用它),请查看以下代码:

#include <Windows.h>
#include <iostream>

int main()
{
wchar_t deviceName[400];

GetPrivateProfileString(L"Mysection", L"UserDefinedVariables", NULL, deviceName, sizeof(deviceName), L"r:\\file.ini");
std::wcout << "searching for key UserDefinedVariables --> " << deviceName << '\n';


// Get all keys
std::wcout << "\n\nSearching for all keys in section:\n";
DWORD size = GetPrivateProfileString(L"Mysection", NULL, NULL, deviceName, sizeof(deviceName), L"r:\\file.ini");

DWORD start = 0;
wchar_t keys[10][100];
DWORD keyIndex = 0;

for (DWORD i = 0; i < size; ++i) {
if (deviceName[i] == 0) {
#pragma warning(suppress : 4996)
wcscpy(keys[keyIndex], deviceName + start);
start = i + 1;
std::wcout << keys[keyIndex] << '\n';
++keyIndex;
}
}

// Getting all values for the keys
std::wcout << "\n\nSearching for all keys with values in section:\n";

for (DWORD i = 0; i < keyIndex; ++i) {
GetPrivateProfileString(L"Mysection", keys[i], NULL, deviceName, sizeof(deviceName), L"r:\\file.ini");
std::wcout << keys[i] << " --> " << deviceName << '\n';
}
return 0;
}

结果:

searching for key UserDefinedVariables --> "$THIS$=somevalue",\


Searching for all keys in section:
UserDefinedVariables
"$THAT$
"$DEVICE1$
"$DEVICE2$
"$DEVICE3$


Searching for all keys with values in section:
UserDefinedVariables --> "$THIS$=somevalue",\
"$THAT$ --> somevalue1",\
"$DEVICE1$ --> somevalue2",\
"$DEVICE2$ --> somevalue3",\
"$DEVICE3$ --> somevalue4"

然后您可以根据需要提取您的值。

但正如我所说。最好更正 ini 文件。

关于c++ - 如何在 C++ 中读取与反斜杠分隔的键对应的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57094468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com