cocos2d-x 读取CSV文件,读取本地Excel配置表的方法

  次阅读 作者:智能小宝 来源:互联网 2015-09-28 11:08 我要评论(0)

//CSVReader.h

#define MAP_LINE std::map<:string :string=""> //key为首行字符串, value为此列字符串

#define MAP_CONTENT std::map //key为code, value为一行map

#define VEC_MAP std::vector<:pair int="">>

//csv文件读取器

class CSVReader

{

public:

CSVReader();

static CSVReader *getInst(); //获取实例

//解析csv. fileName:csv文件名,

void parse(const char *fileName);

//获取内容map. filename:文件名

const MAP_CONTENT &getContentMap(std::string filename);

//获取一行map.filename:文件名, code一行code

const MAP_LINE &getLineMap(std::string filename, int code);

//获取某行某列的值

const std::string &getByCode(std::string filename, int code, const std::string &key);

private:

//读取csv的一行.line:一行的内容

void readCSVLine(const char *line, int index);

VEC_MAP m_firstVector; //第一行的vector

MAP_CONTENT m_contentMap; //内容map

std::map<:string map_content=""> m_fileMap; //文件map

static CSVReader *m_inst; //实例

};,><:string>,>,>

//CSVReader.cpp

CSVReader *CSVReader::m_inst = NULL;

//构造函数

CSVReader::CSVReader()

{

m_firstVector.clear();

m_contentMap.clear();

m_fileMap.clear();

}

//获取实例

CSVReader *CSVReader::getInst()

{

if(!m_inst)

{m_inst = new CSVReader();}

return m_inst;

}

//获取内容map. filename:文件名

const MAP_CONTENT &CSVReader::getContentMap(std::string filename)

{

return m_fileMap.find(filename)->second;

}

//获取一行map.filename:文件名, code一行code

const MAP_LINE &CSVReader::getLineMap(std::string filename, int code)

{

return getContentMap(filename).find(code)->second;

}

//获取某行某列的值

const std::string &CSVReader::getByCode(std::string filename, int code, const std::string &key)

{

return getLineMap(filename, code).find(key)->second;

}

//解析csv. fileName:csv文件名,

void CSVReader::parse(const char *fileName)

{

m_contentMap.clear(); //首先进行清理

std::string path = fileName;

unsigned long size;

const char *data = (const char*)(cocos2d::CCFileUtils::sharedFileUtils()->getFileData(path.c_str(),"r" , &size));

CCAssert(data != NULL, "File is not exist.");

if (data == NULL)

return;

char line[32768]; //一行最多字节数

const char *src = data;

if (size == 0)

size = strlen(src);

char *pl = line; //指向line数组的指针

int index = 0;

bool skip = false; //若一行为空,skip则标记为true

while (data - src < size)

{

//读取到一行的末尾

if (*data == '\n' && !skip)

{

*pl = '\0';

readCSVLine(line, index);

++index;

pl = line;

}

else if (*data == '\r')

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...