// stdafx.cpp : 只包括标准包含文件的源文件 // Demo.pch 将作为预编译头 // stdafx.obj 将包含预编译类型信息 #include "stdafx.h" // TODO: 在 STDAFX.H 中 // 引用任何所需的附加头文件,而不是在此文件中引用 bool parse_key(std::string &RetValue, std::string strLine, TCHAR *lpszText) { TCHAR szText[MAX_PATH] = {0}; TCHAR szValue[MAX_PATH] = {0}; // 去除空格; #if _MSC_VER > 1900 strLine.erase(std::remove_if(strLine.begin(), strLine.end(), [](unsigned char x) {return std::isspace(x); }), strLine.end()); //C++17 #else for (std::string::iterator it = strLine.begin(); it != strLine.end();) { isspace(*it) ? it++ : it = it = strLine.erase(it); } #endif if ( 2 == _stscanf_s(strLine.c_str(), _T("%[^=]=%s"), szText, MAX_PATH, szValue, MAX_PATH) ) { if ( _tcsstr(szText, lpszText) ) { RetValue = szValue; return true; } } return false; } int parse_cmd_param_from_file(char *file_name) { char buf[MAX_PATH] = {0}; TCHAR name[MAX_PATH] = {0}; TCHAR head[MAX_PATH] = {0}; TCHAR code[MAX_PATH] = {0}; TCHAR mark[MAX_PATH] = {0}; TCHAR multicode[MAX_PATH] = {0}; TCHAR cmd_wait_time[MAX_PATH] = {0}; TCHAR read_wait_time[MAX_PATH] = {0}; int ret = -1; FILE *fp = NULL; if(!file_name) return ret; fp = fopen(file_name, "r"); if(!fp) goto EXIT; while((fgets((char*)buf, MAX_PATH, fp) != NULL)) { int tmp_len = 0; unsigned short keycode = 0; unsigned int protocol = 0; unsigned int scancode = 0; tmp_len = _tcslen((char*)buf); if(tmp_len >= 1) { if (buf[tmp_len - 1] == '\r' || buf[tmp_len - 1] == '\n') buf[tmp_len - 1] = 0; if(tmp_len >= 2) { if(buf[tmp_len - 2] == '\r' || buf[tmp_len - 2] == '\n') buf[tmp_len - 2] = 0; } } #if _MSC_VER >= 1500 //if ( sscanf_s(buf, "%[^;];%[^;];%[^;];%[^;];%[^;];%[^;];%[^;]", name, MAX_PATH, head, MAX_PATH, code, MAX_PATH, mark, MAX_PATH, multicode, MAX_PATH, cmd_wait_time, MAX_PATH, read_wait_time, MAX_PATH) == 7) if ( sscanf_s(buf, "%[^;];%[^;];%[^;];%[^;];%[^;];%[^;];%s", name, MAX_PATH, head, MAX_PATH, code, MAX_PATH, mark, MAX_PATH, multicode, MAX_PATH, cmd_wait_time, MAX_PATH, read_wait_time, MAX_PATH) == 7) #endif #if _MSC_VER < 1500 if ( sscanf(buf, "%[^;];%[^;];%[^;];%[^;];%[^;];%[^;];%[^;]", name, head, code, mark, multicode, cmd_wait_time, read_wait_time) == 7) #endif { CommandParam cp; parse_key(cp.name, name, _T("Name")); parse_key(cp.head, head, _T("HeadCode")); parse_key(cp.code, code, _T("Command")); parse_key(cp.mark, mark, _T("CMDParam")); std::string value; parse_key(value, multicode, _T("MultiParams")); parse_key(value, cmd_wait_time, _T("ReadWaitTime")); parse_key(value, read_wait_time, _T("CMDWaitTime")); } } ret = 0; EXIT: if(fp) fclose(fp); return ret; }