stdafx.cpp 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  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 _MSC_VER >= 1200 && _MSC_VER < 1500 // VC6.0~8.0
  20. if ( 2 == sscanf(strLine.c_str(), _T("%[^=]=%s"), szText, MAX_PATH, szValue, MAX_PATH) )
  21. #else
  22. if ( 2 == _stscanf_s(strLine.c_str(), _T("%[^=]=%s"), szText, MAX_PATH, szValue, MAX_PATH) )
  23. #endif
  24. {
  25. if ( _tcsstr(szText, lpszText) )
  26. {
  27. RetValue = szValue;
  28. return true;
  29. }
  30. }
  31. return false;
  32. }
  33. // 计算时间;
  34. // 如: 100ms 100m 100s
  35. int pares_time_value(std::string strTime)
  36. {
  37. int nTimes = 0;
  38. if ( _tcsstr(strTime.c_str(), _T("ms")) || _tcsstr(strTime.c_str(), _T("MS")))
  39. {
  40. nTimes = _tstol(strTime.c_str());
  41. }
  42. else if (_tcsstr(strTime.c_str(), _T("s")) || _tcsstr(strTime.c_str(), _T("S")))
  43. {
  44. nTimes = _tstol(strTime.c_str()) * 1000;
  45. }
  46. else if (_tcsstr(strTime.c_str(), _T("m")) || _tcsstr(strTime.c_str(), _T("M")))
  47. {
  48. nTimes = _tstol(strTime.c_str()) * 6000;
  49. }
  50. else
  51. {
  52. // 不带单位或其他的,默认ms;
  53. nTimes = _tstol(strTime.c_str());
  54. }
  55. return nTimes;
  56. }
  57. int parse_cmd_param_from_file(TCHAR *file_name, std::vector<CommandParam> &vtCommandParams)
  58. {
  59. TCHAR buf[MAX_PATH] = {0};
  60. TCHAR name[MAX_PATH] = {0};
  61. TCHAR head[MAX_PATH] = {0};
  62. TCHAR code[MAX_PATH] = {0};
  63. TCHAR param[MAX_PATH] = {0};
  64. TCHAR multicode[MAX_PATH] = {0};
  65. TCHAR cmd_wait_time[MAX_PATH] = {0};
  66. TCHAR read_wait_time[MAX_PATH] = {0};
  67. int ret = -1;
  68. FILE *fp = NULL;
  69. if(!file_name || file_name[0] == '\0' )
  70. return ret;
  71. fp = fopen(file_name, "r");
  72. if(!fp)
  73. goto EXIT;
  74. while((fgets((char*)buf, MAX_PATH, fp) != NULL)) {
  75. int tmp_len = 0;
  76. unsigned short keycode = 0;
  77. unsigned int protocol = 0;
  78. unsigned int scancode = 0;
  79. tmp_len = _tcslen(buf);
  80. if(tmp_len >= 1) {
  81. if (buf[tmp_len - 1] == '\r' || buf[tmp_len - 1] == '\n')
  82. buf[tmp_len - 1] = 0;
  83. if(tmp_len >= 2) {
  84. if(buf[tmp_len - 2] == '\r' || buf[tmp_len - 2] == '\n')
  85. buf[tmp_len - 2] = 0;
  86. }
  87. }
  88. #if _MSC_VER >= 1500
  89. //if ( _stscanf_s(buf, "%[^;];%[^;];%[^;];%[^;];%[^;];%[^;];%[^;]", name, MAX_PATH, head, MAX_PATH, code, MAX_PATH, param, MAX_PATH, multicode, MAX_PATH, read_wait_time, MAX_PATH, cmd_wait_time, MAX_PATH) == 7) // 等价下面;
  90. if ( _stscanf_s(buf, "%[^;];%[^;];%[^;];%[^;];%[^;];%[^;];%s", name, MAX_PATH, head, MAX_PATH, code, MAX_PATH, param, MAX_PATH, multicode, MAX_PATH, read_wait_time, MAX_PATH, cmd_wait_time, MAX_PATH) == 7)
  91. #endif
  92. #if _MSC_VER >= 1200 && _MSC_VER < 1500 // VC6.0~8.0
  93. if ( sscanf(buf, "%[^;];%[^;];%[^;];%[^;];%[^;];%[^;];%[^;]", name, head, code, param, multicode, read_wait_time, cmd_wait_time) == 7)
  94. #endif
  95. {
  96. CommandParam cp;
  97. parse_key(cp.name, name, _T("Name"));
  98. parse_key(cp.head, head, _T("HeadCode"));
  99. parse_key(cp.code, code, _T("Command"));
  100. parse_key(cp.param, param, _T("CMDParam"));
  101. std::string value;
  102. parse_key(value, multicode, _T("MultiParams"));
  103. cp.bMulticode = !_tcsicmp(value.c_str(), _T("true")) ? true : false;
  104. parse_key(value, read_wait_time, _T("ReadWaitTime"));
  105. cp.read_wait_time = pares_time_value(value.c_str());
  106. parse_key(value, cmd_wait_time, _T("CMDWaitTime"));
  107. cp.cmd_wait_time = pares_time_value(value.c_str());
  108. vtCommandParams.push_back(cp);
  109. }
  110. }
  111. ret = 0;
  112. EXIT:
  113. if(fp)
  114. fclose(fp);
  115. return ret;
  116. }