stdafx.cpp 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. // stdafx.cpp : 只包括标准包含文件的源文件
  2. // Demo.pch 将作为预编译头
  3. // stdafx.obj 将包含预编译类型信息
  4. #include "stdafx.h"
  5. // TODO: 在 STDAFX.H 中
  6. // 引用任何所需的附加头文件,而不是在此文件中引用
  7. bool parse_key(std::string &RetValue, std::string strLine, TCHAR *lpszText)
  8. {
  9. TCHAR szText[MAX_PATH] = {0};
  10. TCHAR szValue[MAX_PATH] = {0};
  11. // 去除空格;
  12. #if _MSC_VER > 1900
  13. strLine.erase(std::remove_if(strLine.begin(), strLine.end(), [](unsigned char x) {return std::isspace(x); }), strLine.end()); //C++17
  14. #else
  15. for (std::string::iterator it = strLine.begin(); it != strLine.end();) {
  16. isspace(*it) ? it++ : it = it = strLine.erase(it);
  17. }
  18. #endif
  19. if ( 2 == _stscanf_s(strLine.c_str(), _T("%[^=]=%s"), szText, MAX_PATH, szValue, MAX_PATH) )
  20. {
  21. if ( _tcsstr(szText, lpszText) )
  22. {
  23. RetValue = szValue;
  24. return true;
  25. }
  26. }
  27. return false;
  28. }
  29. int parse_cmd_param_from_file(char *file_name)
  30. {
  31. char buf[MAX_PATH] = {0};
  32. TCHAR name[MAX_PATH] = {0};
  33. TCHAR head[MAX_PATH] = {0};
  34. TCHAR code[MAX_PATH] = {0};
  35. TCHAR mark[MAX_PATH] = {0};
  36. TCHAR multicode[MAX_PATH] = {0};
  37. TCHAR cmd_wait_time[MAX_PATH] = {0};
  38. TCHAR read_wait_time[MAX_PATH] = {0};
  39. int ret = -1;
  40. FILE *fp = NULL;
  41. if(!file_name)
  42. return ret;
  43. fp = fopen(file_name, "r");
  44. if(!fp)
  45. goto EXIT;
  46. while((fgets((char*)buf, MAX_PATH, fp) != NULL)) {
  47. int tmp_len = 0;
  48. unsigned short keycode = 0;
  49. unsigned int protocol = 0;
  50. unsigned int scancode = 0;
  51. tmp_len = _tcslen((char*)buf);
  52. if(tmp_len >= 1) {
  53. if (buf[tmp_len - 1] == '\r' || buf[tmp_len - 1] == '\n')
  54. buf[tmp_len - 1] = 0;
  55. if(tmp_len >= 2) {
  56. if(buf[tmp_len - 2] == '\r' || buf[tmp_len - 2] == '\n')
  57. buf[tmp_len - 2] = 0;
  58. }
  59. }
  60. #if _MSC_VER >= 1500
  61. //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)
  62. 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)
  63. #endif
  64. #if _MSC_VER < 1500
  65. if ( sscanf(buf, "%[^;];%[^;];%[^;];%[^;];%[^;];%[^;];%[^;]", name, head, code, mark, multicode, cmd_wait_time, read_wait_time) == 7)
  66. #endif
  67. {
  68. CommandParam cp;
  69. parse_key(cp.name, name, _T("Name"));
  70. parse_key(cp.head, head, _T("HeadCode"));
  71. parse_key(cp.code, code, _T("Command"));
  72. parse_key(cp.mark, mark, _T("CMDParam"));
  73. std::string value;
  74. parse_key(value, multicode, _T("MultiParams"));
  75. parse_key(value, cmd_wait_time, _T("ReadWaitTime"));
  76. parse_key(value, read_wait_time, _T("CMDWaitTime"));
  77. }
  78. }
  79. ret = 0;
  80. EXIT:
  81. if(fp)
  82. fclose(fp);
  83. return ret;
  84. }