cocos2dx 3.x 读取csv

cocos2dx 3.x 读取csv,第1张

概述#ifndef _PARSE_CSV_H_#define _PARSE_CSV_H_#include <fstream>#include <sstream>#include <map>#include <list>#include <vector>using namespace std;struct CsvData{ string FileName; map< strin
#ifndef _PARSE_CSV_H_#define _PARSE_CSV_H_#include <fstream>#include <sstream>#include <map>#include <List>#include <vector>using namespace std;struct CsvData{	string filename;	map< string,map< string,string > > TabData;	CsvData()	{		filename = "";		TabData.clear();	}	string GetData( string key,string head )	{//获取数据		return TabData[key][head];	}	voID PushData( string key,string > data )	{//压入数据		TabData[key] = data;//保存整行的数据	}	voID Setfilename( string filename )	{//设置文件名		filename = filename;	}};class ParseCsv{private:	static ParseCsv* m_pThis;public:	/**	*	@brIEf 单例	*/	static ParseCsv* Instance()	{		if (!m_pThis)		{			m_pThis = new ParseCsv();		}		return m_pThis;	}	/**	*	@brIEf 构造函数	*/	ParseCsv(voID);	/**	*	@brIEf 析构函数	*/	~ParseCsv(voID);	/**	*	@brIEf 加载CSV文件	*/	bool LoadCsv( const char* filename,const char* filePath )	{		return _loadCsv( filename,filePath );	}	/**	*	@brIEf 获取数据	*/	string GetData( string filename,string key,string head );	string GetData( string filename,int key,string head );	/**		@brIEf 分割字符串	*/	vector<string> SplitString( const string &strContext,string strSpilt );private:	bool _loadCsv( const char* filename,const char* filePath );private:	map< string,CsvData > m_AllDatas;};#endif
<pre name="code" >#include "ParseCsv.h"#include "extensions\cocos-ext.h"#include "cocos2d.h"USING_NS_CC;ParseCsv *ParseCsv::m_pThis = NulL;ParseCsv::ParseCsv(voID){	m_AllDatas.clear();}ParseCsv::~ParseCsv(voID){}bool ParseCsv::_loadCsv( const char* filename,const char* filePath ){//加载CSV文件	//调用cocos2dx工具类读出数据	string path = fileUtils::getInstance()->fullPathForfilename( filePath );	ssize_t bufferSize = 0;	char* buf = (char*)fileUtils::getInstance()->getfileData(path.c_str(),"r",&bufferSize);	ssize_t size = bufferSize;	//新建Csv结构体	CsvData data;	data.Setfilename(filename);	//把整个表按行分割	string strbuff;	ssize_t count = 0;	do	{		if( count >= size ) break;		strbuff += buf[ count++ ];	}while( true );	vector<string> vecTab = this->SplitString( strbuff,"\r\n" );	//读取表头	vector<string>::iterator iterTab = vecTab.begin();	if ( iterTab == vecTab.end() ) return false;	vector<string> vecheadline = this->SplitString( *iterTab,"\t" );	List<string> head;//表头	for (vector<string>::iterator iterline = vecheadline.begin(); iterline != vecheadline.end(); iterline++)	{		head.push_back( *iterline );	}		//每行按"\t"分割 读出所有数据	iterTab++;	for ( ; iterTab != vecTab.end(); iterTab++  )	{//读取表里数据		map<string,string> tabline;		vector<string> vecline = this->SplitString( *iterTab,"\t" );		List<string>::iterator iterhead = head.begin();		vector<string>::iterator iterline = vecline.begin();		for ( ; iterline != vecline.end(); iterline++ )		{			tabline[*iterhead] = *iterline;			iterhead++;			if ( iterhead == head.end() ) break;		}		data.PushData( tabline[*head.begin()],tabline );	}	m_AllDatas[filename] = data;	return true;}string ParseCsv::GetData( string filename,string head ){//获取数据 	return m_AllDatas[filename].GetData( key,head );}string ParseCsv::GetData( string filename,string head ){//获取数据	char sz[32] = {0};	sprintf( sz,"%d",key );	return this->GetData( filename,sz,head );}vector<string> ParseCsv::SplitString( const string &strContext,string strSpilt ){//分割字符串	vector<string> vecStr;	int charLen = strSpilt.size();//分隔符的长度	int lastPos = 0;	int index = -1;	while ( -1 != ( index = strContext.find( strSpilt,lastPos ) ) )	{		vecStr.push_back( strContext.substr( lastPos,index - lastPos ) );		lastPos = index + charLen;	}	string lastString = strContext.substr( lastPos );//截取最后一个分隔符后的内容	if ( !lastString.empty() )	{//不为空也压进去		vecStr.push_back( lastString );	}	return vecStr;}


 
复制去Google翻译 翻译结果 总结

以上是内存溢出为你收集整理的cocos2dx 3.x 读取csv全部内容,希望文章能够帮你解决cocos2dx 3.x 读取csv所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1052829.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-25
下一篇2022-05-25

发表评论

登录后才能评论

评论列表(0条)

    保存