标签:find rom npos ios color nullptr orm 位置 pat
1 class ErrorCodeConfig{ 2 public: 3 ErrorCodeConfig(){} 4 ErrorCodeConfig(const ErrorCodeConfig&)=delete; 5 ErrorCodeConfig &operator=(const ErrorCodeConfig&) = delete; 6 ~ErrorCodeConfig(){} 7 bool FindErrorCodeStr(/*out*/string &strError,int error_code, int Module,string file_path); 8 private: 9 bool ReadMsgFromjson(string path); 10 string strErrorMsg_; 11 }; 12 bool ErrorCodeConfig::ReadMsgFromjson(string path) 13 { 14 ifstream read_file(path.c_str(), ios::binary); 15 if (read_file.is_open()){ 16 /*send_data = csv_data;*/ 17 istream::pos_type current_pos1 = read_file.tellg();//记录下当前位置 18 read_file.seekg(0, ios_base::end);//移动到文件尾 19 istream::pos_type file_size1 = read_file.tellg();//取得当前位置的指针长度->即文件长度 20 read_file.seekg(0, ios_base::beg);//移动到原来的位置 21 if (file_size1 > 0) 22 { 23 char* data1 = new char[file_size1]; 24 memset(data1, 0, file_size1); 25 read_file.read(data1, file_size1 * sizeof(char)); 26 strErrorMsg_ =std::move(string(data1, file_size1)); 27 read_file.close(); 28 delete[] data1; 29 data1 = nullptr; 30 return true; 31 } 32 read_file.close(); 33 } 34 return false; 35 } 36 bool ErrorCodeConfig::FindErrorCodeStr(string &strError, int error_code, int Module, string file_path) 37 { 38 if (0 == strErrorMsg_.size()) 39 { 40 if (!ReadMsgFromjson(file_path)) 41 { 42 return false; 43 } 44 } 45 string str_err; 46 switch (Module) 47 { 48 case MODULE3: 49 str_err = "MODULE3" + std::to_string(error_code); 50 break; 51 case MODULE2: 52 str_err = "MODULE2" + std::to_string(error_code); 53 break; 54 case MODULE1: 55 str_err = "MODULE1" + std::to_string(error_code); 56 break; 57 default: 58 str_err = error_code; 59 break; 60 61 } 62 string::size_type p = strErrorMsg_.find(str_err); 63 if (p == string::npos) 64 { 65 return false; 66 } 67 string::size_type maohao = strErrorMsg_.find(":", p); 68 if (maohao == string::npos) 69 { 70 return false; 71 } 72 string::size_type left_fen = strErrorMsg_.find("\"", maohao + 1); 73 if (left_fen == string::npos) 74 { 75 return false; 76 } 77 string::size_type right_fen = strErrorMsg_.find("\"", left_fen + 1); 78 if (right_fen == string::npos) 79 { 80 return false; 81 } 82 strError = strErrorMsg_.substr(left_fen + 1, right_fen - left_fen-1); 83 if (0==strError.size()) 84 { 85 return false; 86 } 87 88 //查找错误码大于一个的情况 89 string::size_type pos_last = right_fen; 90 string::size_type pos_now = string::npos; 91 while (-1!=(pos_now = strErrorMsg_.find(str_err, pos_last))) 92 { 93 //此处阈值给100,防止error_1下面出现k_error_1,一行数据不会超过100字节 94 if (pos_now - pos_last > 100) 95 { 96 //走到此处也算找到错误码 97 return true; 98 } 99 100 maohao = strErrorMsg_.find(":", pos_now); 101 if (maohao == string::npos) 102 { 103 return false; 104 } 105 left_fen = strErrorMsg_.find("\"", maohao + 1); 106 if (left_fen == string::npos) 107 { 108 return false; 109 } 110 right_fen = strErrorMsg_.find("\"", left_fen + 1); 111 if (right_fen == string::npos) 112 { 113 return false; 114 } 115 strError += strErrorMsg_.substr(left_fen + 1, right_fen - left_fen - 1); 116 pos_last = right_fen; 117 } 118 if (0 == strError.size()) 119 { 120 return false; 121 } 122 return true; 123 }
标签:find rom npos ios color nullptr orm 位置 pat
原文地址:https://www.cnblogs.com/wangshaowei/p/10557515.html