zoukankan      html  css  js  c++  java
  • INI配置文件分析小例子

    随手写个解析INI配置字符串的小例子 带测试

    #include <iostream>
    #include <map>
    #include <string>
    #include "unittest.h"
    
    
    
    bool IniParser(std::string inputStr,std::map<std::string,std::string>& keyValueMap){
        bool ret = false;
        size_t keyStart = 0;
    
        for(keyStart= 0 ;keyStart < inputStr.size();keyStart++){
            if(inputStr[keyStart] == ' '){
                continue;   //去除空格
            }else if( inputStr[keyStart] == ';' || inputStr[keyStart] == '#' ||
                      inputStr[keyStart] == '[' || inputStr[keyStart] == ']' || inputStr[keyStart] == '='){
                return ret; // 各种意外开头 直接返回失败
            }else{
                break;
            }
        }
        size_t findPos = inputStr.find_first_of("=",keyStart);
        if(std::string::npos == findPos){
            return ret;//没有找到"="
        }
        std::string keyString =  inputStr.substr(keyStart,findPos -keyStart);
    
       // std::cout << "keyString:" << keyString << std::endl;
    
        for(keyStart= findPos+1 ;keyStart < inputStr.size();keyStart++){
            if(inputStr[keyStart] == ' '){
                continue;   //去除空格
            }else{
                break;
            }
        }
    
        std::string valueString = inputStr.substr(keyStart);
    
        //std::cout << "valueString:" << valueString << std::endl;
    
    
        keyValueMap.insert(std::pair<std::string,std::string>(keyString,valueString));
        ret = true;
        return ret;
    }
    
    std::string testStr1 = "key=value";
    std::string testStr2 = "  key  =  value";
    
    std::string testStr3 = "# key=value";
    std::string testStr4 = "== key=value";
    std::string testStr5 = "[ 23423key=value";
    std::string testStr6 = "]324234key=value";
    std::string testStr7 = ";key= = value";
    std::string testStr8 = "  key  = = value";
    
    
    
    
    int main(int argc, char *argv[])
    {
    
        std::map<std::string,std::string> keyValueMap;
    
    
        EXCEPT_EQ( IniParser(testStr1,keyValueMap),true);
        EXCEPT_EQ( IniParser(testStr2,keyValueMap),true);
        EXCEPT_EQ( IniParser(testStr3,keyValueMap),false);
        EXCEPT_EQ( IniParser(testStr4,keyValueMap),false);
        EXCEPT_EQ( IniParser(testStr5,keyValueMap),false);
        EXCEPT_EQ( IniParser(testStr6,keyValueMap),false);
        EXCEPT_EQ( IniParser(testStr7,keyValueMap),false);
        EXCEPT_EQ( IniParser(testStr8,keyValueMap),true);
    
    
    
    
        PRINT_TEST_RESULT();
        return 0;
    }
    

      测试头文件

    #ifndef UNITTEST_H
    #define UNITTEST_H
    #include <iostream>
    
    
    
    class MyTestClass {
        static size_t testCount_;
        static size_t testPass_;
    public:
        template<typename E,typename A>
        bool ExceptEqual(E e, A a)
        {
            testCount_++;
            if (e == a){
                testPass_++;
                return true;
            }
            return false;
        }
    
        void PrintResult(){
            std::cout << testPass_ << "/" << testCount_ << "\t" << "("<<(testPass_ * 100.0 / testCount_) << "%)" << " passed." << std::endl;
        }
    };
    size_t MyTestClass::testCount_ = 0;
    size_t MyTestClass::testPass_ = 0;
    
    #define ERROR_PRINT(expect,actual)					\
    std::cerr << __FILE__ <<":"<< __LINE__ << "\r\nexpect: " << expect << "  actual: " << actual << std::endl;
    
    
    #define EXCEPT_EQ(expect, actual)			\
    do{											\
        MyTestClass TEST;						\
        if(!TEST.ExceptEqual(expect, actual)){	\
            ERROR_PRINT(expect,actual)			\
        }										\
    }while(0)
    
    #define PRINT_TEST_RESULT()					\
    do{											\
        MyTestClass TEST;						\
        TEST.PrintResult();						\
    }while(0)
    
    #endif // UNITTEST_H
    

      

  • 相关阅读:
    Tomcat和nginx负载均衡算法
    (转)CSS浮动(float,clear)通俗讲解
    MvcSiteMapProvider配置使用
    idea出现jdk版本过低导致无法通过编译
    java生成自己的doc文档
    RabbitMQ的应用场景
    java 变量和常量
    IDEA创建新空项目
    java中整型、浮点型、char型扩展
    java中数据类型占多少字节
  • 原文地址:https://www.cnblogs.com/itdef/p/6229322.html
Copyright © 2011-2022 走看看