现在我们在上一节的基础上开始对文件进行解析,其实很简单的实现了一个类而已;i这个各类可以获得一个文件中特定行上的特定值,直接上代码:
#ifndef __FILE_LOAD_UTIL_H__
#define __FILE_LOAD_UTIL_H__
#include "cocos2d.h"
using namespace cocos2d;
class FileLoadUtil : public CCObject {
public:
static FileLoadUtil* sharedFileLoadUtil();
bool init();
/* 获取文件每一行的数据,按行存放到列表中 */
CCArray* getDataLines(const char* sFilePath);
private:
static FileLoadUtil* mFileLoadUtil;
};
#endif
#include "FileLoadUtil.h"
#include "StringUtil.h"
FileLoadUtil* FileLoadUtil::mFileLoadUtil = NULL;
FileLoadUtil* FileLoadUtil::sharedFileLoadUtil() {
if(mFileLoadUtil == NULL) {
mFileLoadUtil = new FileLoadUtil();
if(mFileLoadUtil && mFileLoadUtil->init()) {
mFileLoadUtil->autorelease();
}
else {
CC_SAFE_DELETE(mFileLoadUtil);
mFileLoadUtil = NULL;
}
}
return mFileLoadUtil;
}
bool FileLoadUtil::init() {
return true;
}
CCArray* FileLoadUtil::getDataLines( const char* sFilePath ) {
CCArray* linesList = CCArray::create();
/* 读取文本数据 */
unsigned long pSize = 0;
unsigned char* chDatas = CCFileUtils::sharedFileUtils()->getFileData(sFilePath, "r", &pSize);
/* 将数据转换为字符串对象 */
CCString* str = CCString::createWithData(chDatas, pSize);
/* 使用split函数按行分隔字符串 */
linesList = StringUtil::sharedStrUtil()->split(str->getCString(), "\n");
return linesList;
}
现在我们定义这个需要读取的文件如下:
ID,Name,Level,HP,MP,HappyValue
1,zxl,08500122,gsplzxl,200,2000
2,vanileo,08250419,gspldpg,250,999999
在HelloWorld中的调试: const char* sPath = "Monster.csv";
CsvUtil::sharedCsvUtil()->loadFile(sPath);
const char* firstMonsterName = CsvUtil::sharedCsvUtil()->get(1, 1, sPath);
const char* secMonsterHP = CsvUtil::sharedCsvUtil()->get(2,2, sPath);
CCLOG("name = %s", firstMonsterName);
CCLOG("number = %s", secMonsterHP);
调试结果: