[問題] txt檔案內,等號(=)後面的數值/資料取得

看板C_and_CPP作者 (Jay)時間4年前 (2019/08/16 16:22), 4年前編輯推噓4(404)
留言8則, 6人參與, 4年前最新討論串1/1
開發平台(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://www.ptt.cc/bbs/C_and_CPP/M.1565943733.A.17D.html

08/16 16:31, 4年前 , 1F
一般會用 strtok() 去切斷字串,看情況需要一次或多次
08/16 16:31, 1F

08/16 16:35, 4年前 , 2F
我比較喜歡 strsep() 但不知 VS2019 有沒有
08/16 16:35, 2F

08/16 17:40, 4年前 , 3F
google ini parser c 看看人家怎麼寫的, 或者找順眼
08/16 17:40, 3F

08/16 17:40, 4年前 , 4F
的來用.
08/16 17:40, 4F

08/16 18:14, 4年前 , 5F
fscanf
08/16 18:14, 5F

08/16 21:50, 4年前 , 6F
strtok切字串,fscanf自動幫你切,strstr找=
08/16 21:50, 6F

08/16 23:30, 4年前 , 7F
用ini檔的話,win有提供API可以直接使用
08/16 23:30, 7F

08/17 01:55, 4年前 , 8F
sscanf
08/17 01:55, 8F
感謝各位大大,我找到了,可以透過: GetPrivateProfileString / WritePrivateProfileString 去抓取內容。 ※ 編輯: jayzhuang (218.161.102.123 臺灣), 08/20/2019 18:08:11 ※ 編輯: jayzhuang (218.161.102.123 臺灣), 08/21/2019 15:36:05
文章代碼(AID): #1TLcUr5z (C_and_CPP)