码迷,mamicode.com
首页 > 编程语言 > 详细

记录c++本地文件读取组装

时间:2019-03-19 12:33:38      阅读:123      评论:0      收藏:0      [点我收藏+]

标签: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 }

 

记录c++本地文件读取组装

标签:find   rom   npos   ios   color   nullptr   orm   位置   pat   

原文地址:https://www.cnblogs.com/wangshaowei/p/10557515.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!