(独家)cocos2d-x与excel通过xml文件读写双向交互(上)

44 篇文章 0 订阅
44 篇文章 0 订阅

前言的念念碎

Excel是一个伟大的把程序员,与一般电脑用户链接到一起的桥梁。是万国翻译器。

首先我推崇excel有以下几点原因:

第一:程序员可以把晦涩的数据库,转换成大多数电脑用户都能看得懂的数据。

第二:对于游戏工团队是完美的脚本配置工具。

高效的游戏制作团队粗分为:策划,美术,程序,三个职位。

其中策划本来是负责游戏的 :创意,体验,和游戏的一些数据配置。

然而游戏策划人员为了和程序人员进行协同工作,逼不得已要学习很多晦涩的脚本配置语言,软件等。

这样有三害:

一,是分散了策划人员主要精力,

二,没有统一的规范,三天两头要学习一个新的软件,造成很大的统一管理难度。

三,增加了游戏工作室招收策划人员的难度。

这就是为什么我要发布这套c++的excel读写文章,他对于游戏界的贡献必定是空前的。

///华丽的分割线//

本章节分两个部分:1,excel的读取。2,excel的写入。

Excel的读取

.h部分

static vector<string> split(string str,string pattern);//字符串分割

static bool isContantString(string sourceStr,string patternStr);//判断一个字符串是否包含另外一个


static vector<vector<string> > paserExcel(string detailStr);


.M部分

//c++字符串分割函数

vector<string>PersonalApiCplu::split(string str,string pattern)

{

    std::string::size_type pos;

    std::vector<std::string> result;

    str+=pattern;//扩展字符串以方便操作

    int size=str.size();

    

    for(int i=0; i<size; i++)

    {

        pos=str.find(pattern,i);

        if(pos<size)

        {

            std::string s=str.substr(i,pos-i);

            result.push_back(s);

            i=pos+pattern.size()-1;

        }

    }

    return result;

}



bool PersonalApiCplu::isContantString(string sourceStr,string patternStr)

{

    const char *show;

    

    show=strstr(sourceStr.c_str(),patternStr.c_str());//返回指向第一次出现r位置的指针,如果没找到则返回NULL

    

    bool isContant;

    if (show == NULL)

    {

        isContant = NO;

    }

    else

    {

        isContant = YES;

    }

    

    return isContant;

}


vector<vector<string> > ExcelParser::paserExcel(string detailStr)

{

    vector<vector<string> > ivec;

    //去头莫名奇妙都会多出第一行为空,内容都从数组的第二位开始

    //去尾莫名其妙多最后一位。

    string pattern1("<Row ss:AutoFitHeight=\"0\">");//去头

    

    vector<string>ivec1 =  PersonalApiCplu::split(detailStr,pattern1);//取出所有单词套组

    

    for (int j = 1;j<ivec1.size(); j++)

    {

        if (j == 59)

        {

            ;

        }

        vector<string> tempIvec;

        

        string pattern2("</Data></Cell>");//去尾

        vector<string>ivec2 =  PersonalApiCplu::split(ivec1[j],pattern2);//某个单词组中的所有元素

       

        

        for (int i = 0;i<ivec2.size()-1; i++)//去尾

        {

            string sourceStr = ivec2[i];

            

            string patternStr = "</Font>";

            

            

            if (PersonalApiCplu::isContantString(sourceStr,patternStr))//判断是否可以直接取,或者是要通过字符串合并

            {

                string pattern3("</Font>");//去尾

                vector<string>ivec3 =  PersonalApiCplu::split(ivec2[i],pattern3);

                

                

                string s4;

                string pattern4("xmlns=\"http://www.w3.org/TR/REC-html40\">");//去头

                for (int k = 0; k<ivec3.size()-1; k++)//记得减去数组最后一位,去尾莫名其妙多最后一位。

                {

                    vector<string>ivec4 =  PersonalApiCplu::split(ivec3[k],pattern4);

                    s4 += ivec4[1];

                }

                

                tempIvec.push_back(s4.c_str());

            }

            else

            {

               

                string pattern3("<Data ss:Type=\"String\">");

                vector<string>ivec3 =  PersonalApiCplu::split(ivec2[i],pattern3);

                string s3 =  ivec3[1];

                

                tempIvec.push_back(s3.c_str());

            }

        }

        

        ivec.push_back(tempIvec);

    }

    return ivec;


}







评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值