作者jayzhuang (Jay)
看板C_and_CPP
标题[问题] txt档案内,等号(=)後面的数值/资料取得
时间Fri Aug 16 16:22:09 2019
开发平台(Platform): (Ex: Win10, Linux, ...)
Win10
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
vs2019
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
问题(Question):
上次那个文字档案转档问题解析完毕之後,我取得到我要的资料为:
https://imgur.com/vIsWHng
喂入的资料(Input):
我需要额外再做一个功能,回传一个XML格式档案出来(写入的资料与上面的一致)
预期的正确结果(Expected Output):
如下图(这是我自己做的,不是透过程式码转的)
https://imgur.com/qRzFDE7
错误结果(Wrong Output):
等号(=) 的问题,让我不知道该怎麽下手
有试过strcpy,但我无法取得=後面的值
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
//停个10秒开始
Sleep(10000);
//把要回传的LGPO_xml细项内容储存到这
string LGPO_XML_FilePath = GetFilePath() + "LGPO_Item.xml";
//写入LGPO项目的内容
Save_LGPO_Item LGPO_Item_Content;
LGPO_Item_Content.LGPO_class = 1;
//回传的12条项目
char Pw01[] = "MinimumPasswordAge";
char Pw02[] = "MaximumPasswordAge";
char Pw03[] = "MinimumPasswordLength";
char Pw04[] = "PasswordComplexity";
char Pw05[] = "PasswordHistorySize";
char Pw06[] = "ClearTextPassword";
char Pw07[] = "LockoutBadCount";
char Pw08[] = "LockoutDuration";
char Pw09[] = "ResetLockoutCount";
char Pw10[] = "ForceLogoffWhenHourExpire";
char Pw11[] = "NewAdministratorName";
char Pw12[] = "NewGuestName";
//自动新增Pwd_Check.txt档案<--- 就是第一张图的资料显示
ofstream Write_Pwd_xml(GetFilePath() + "Pwd_Check.txt");
//要读取的档案
ifstream Read_Pwd_txt(GetFilePath() + "Pwd.txt");
string Pwd_txt; //读入的东西
while (!Read_Pwd_txt.eof())
{
//一行一行读取
getline(Read_Pwd_txt, Pwd_txt); //读取档案 >>读入的东西
if(!strncmp(Pwd_txt.c_str(), Pw01, 16)) //比较字串,如果前16个字相同,则通过
{
Write_Pwd_xml << Pwd_txt << endl; //把 读入的档案写入到新增的Pwd_xml
//字串解析,把=前面的文字都消除
char st01[] = "MinimumPasswordAge =";
strcpy(Pwd_txt.c_str, st01);
//设法在写入到Pwd_Check.txt档案的时候,也把每个项目写入到LGPO_Item.xml档案
LGPO_Item_Content.Item_name = Pw01; //项目的名称
LGPO_Item_Content.Item_value = Pwd_txt;
}
else if(!strncmp(Pwd_txt.c_str(), Pw02, 16))
{
Write_Pwd_xml << Pwd_txt << endl;
}
else if (!strncmp(Pwd_txt.c_str(), Pw03, 16))
{
Write_Pwd_xml << Pwd_txt << endl;
}
else
{
continue;
}
}
Read_Pwd_txt.close(); //读取完关闭
补充说明(Supplement):
我先测试拿前面三个项目来测试,但都不能过,想询问各位大大有更好的方法吗?
PS:我自己额外写的直接把资料丢入到我写的Save_XML 的Function
确认是可行的。
//把要写入的LGPO_xml细项内容储存到这
string LGPO_XML_FilePath = GetFilePath() + "LGPO_Item.xml";
//写入LGPO项目的内容
Save_LGPO_Item LGPO_Item_Content;
LGPO_Item_Content.LGPO_class = 1;
LGPO_Item_Content.Item_name = "MinimumPasswordAge";
LGPO_Item_Content.Item_value = 1;
LGPO_Item_Content.Item_name = "MinimumPasswordAge";
LGPO_Item_Content.Item_value = 90;
https://imgur.com/CQ4BMVS
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 218.161.102.123 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1565943733.A.17D.html
1F:推 Schottky: 一般会用 strtok() 去切断字串,看情况需要一次或多次 08/16 16:31
2F:→ Schottky: 我比较喜欢 strsep() 但不知 VS2019 有没有 08/16 16:35
3F:推 ctrlbreak: google ini parser c 看看人家怎麽写的, 或者找顺眼 08/16 17:40
4F:→ ctrlbreak: 的来用. 08/16 17:40
5F:推 achicn3: fscanf 08/16 18:14
6F:→ tsaiminghan: strtok切字串,fscanf自动帮你切,strstr找= 08/16 21:50
7F:推 boss0405: 用ini档的话,win有提供API可以直接使用 08/16 23:30
8F:→ firejox: sscanf 08/17 01:55
感谢各位大大,我找到了,可以透过:
GetPrivateProfileString / WritePrivateProfileString
去抓取内容。
※ 编辑: jayzhuang (218.161.102.123 台湾), 08/20/2019 18:08:11
※ 编辑: jayzhuang (218.161.102.123 台湾), 08/21/2019 15:36:05