mirror of
https://github.com/wu736139669/SmallGame_Cocos2dx.git
synced 2026-08-05 06:23:09 +00:00
190 lines
3.6 KiB
C++
190 lines
3.6 KiB
C++
/********************************************************************
|
|
created: 2014/03/28
|
|
filename: CsvBase.h
|
|
author: 王少培
|
|
purpose:
|
|
*********************************************************************/
|
|
#include <iostream>
|
|
#include <cstdlib>
|
|
#include "CsvParser.h"
|
|
using namespace std;
|
|
|
|
CCsvParser::CCsvParser() {
|
|
m_sData = "";
|
|
m_nPos = 0;
|
|
m_nCol = 0;
|
|
m_bGood = true;
|
|
}
|
|
|
|
void CCsvParser::skipSpaces(void) {
|
|
while (m_nPos < m_sData.length() && m_sData[m_nPos] == ' ')
|
|
m_nPos++;
|
|
}
|
|
|
|
const CCsvParser &CCsvParser::operator <<(const string &In) {
|
|
this->m_sData = In;
|
|
this->m_nPos = 0;
|
|
this->m_nCol = 0;
|
|
this->m_bGood = true;
|
|
return *this;
|
|
}
|
|
|
|
const CCsvParser &CCsvParser::operator <<(const char *In) {
|
|
this->m_sData = In;
|
|
this->m_nPos = 0;
|
|
this->m_nCol = 0;
|
|
this->m_bGood = true;
|
|
return *this;
|
|
}
|
|
|
|
CCsvParser &CCsvParser::operator >>(int &Out) {
|
|
if (!m_bGood)
|
|
return *this;
|
|
|
|
string sTmp = "";
|
|
skipSpaces();
|
|
|
|
while (m_nPos < m_sData.length() && m_sData[m_nPos] != ',')
|
|
sTmp += m_sData[m_nPos++];
|
|
|
|
m_nPos++; // skip past comma
|
|
|
|
if (sTmp.empty()) {
|
|
m_bGood = false;
|
|
} else {
|
|
++m_nCol;
|
|
m_bGood = true;
|
|
Out = atoi(sTmp.c_str());
|
|
}
|
|
|
|
return *this;
|
|
}
|
|
|
|
CCsvParser &CCsvParser::operator >>(float &Out) {
|
|
if (!m_bGood)
|
|
return *this;
|
|
|
|
string sTmp = "";
|
|
skipSpaces();
|
|
|
|
while (m_nPos < m_sData.length() && m_sData[m_nPos] != ',')
|
|
sTmp += m_sData[m_nPos++];
|
|
|
|
m_nPos++; // skip past comma
|
|
|
|
if (sTmp.empty()) {
|
|
m_bGood = false;
|
|
} else {
|
|
++m_nCol;
|
|
m_bGood = true;
|
|
Out = atof(sTmp.c_str());
|
|
}
|
|
|
|
return *this;
|
|
}
|
|
|
|
CCsvParser &CCsvParser::operator >>(string &Out) {
|
|
if (!m_bGood)
|
|
return *this;
|
|
|
|
bool bQuotes = false;
|
|
Out = "";
|
|
skipSpaces();
|
|
|
|
// Jump past first " if necessary
|
|
if (m_nPos < m_sData.length() && m_sData[m_nPos] == '"') {
|
|
bQuotes = true;
|
|
m_nPos++;
|
|
}
|
|
|
|
while (m_nPos < m_sData.length()) {
|
|
if (!bQuotes && m_sData[m_nPos] == ',')
|
|
break;
|
|
|
|
if (bQuotes && m_sData[m_nPos] == '"') {
|
|
if (m_nPos + 1 >= m_sData.length() - 1)
|
|
break;
|
|
|
|
if (m_sData[m_nPos + 1] == ',')
|
|
break;
|
|
}
|
|
|
|
Out += m_sData[m_nPos++];
|
|
}
|
|
|
|
// Jump past last " if necessary
|
|
if (bQuotes && m_nPos < m_sData.length() && m_sData[m_nPos] == '"')
|
|
m_nPos++;
|
|
|
|
// Jump past , if necessary
|
|
if (m_nPos < m_sData.length() && m_sData[m_nPos] == ',')
|
|
m_nPos++;
|
|
|
|
if (Out.empty()) {
|
|
m_bGood = false;
|
|
} else {
|
|
++m_nCol;
|
|
m_bGood = true;
|
|
}
|
|
|
|
return *this;
|
|
}
|
|
|
|
CCsvParser &CCsvParser::operator >>(unsigned int &Out) {
|
|
if (!m_bGood)
|
|
return *this;
|
|
|
|
string sTmp = "";
|
|
skipSpaces();
|
|
|
|
while (m_nPos < m_sData.length() && m_sData[m_nPos] != ',')
|
|
sTmp += m_sData[m_nPos++];
|
|
|
|
m_nPos++; // skip past comma
|
|
|
|
if (sTmp.empty()) {
|
|
m_bGood = false;
|
|
} else {
|
|
++m_nCol;
|
|
m_bGood = true;
|
|
Out = atol(sTmp.c_str());
|
|
}
|
|
|
|
return *this;
|
|
}
|
|
|
|
CCsvParser &CCsvParser::operator >>(bool &Out) {
|
|
if (!m_bGood)
|
|
return *this;
|
|
|
|
string sTmp = "";
|
|
skipSpaces();
|
|
|
|
while (m_nPos < m_sData.length() && m_sData[m_nPos] != ',')
|
|
sTmp += m_sData[m_nPos++];
|
|
|
|
m_nPos++; // skip past comma
|
|
|
|
if (sTmp.empty()) {
|
|
m_bGood = false;
|
|
} else {
|
|
++m_nCol;
|
|
m_bGood = true;
|
|
Out = atol(sTmp.c_str()) != 0;
|
|
}
|
|
|
|
return *this;
|
|
}
|
|
|
|
bool CCsvParser::isGood() const {
|
|
return m_bGood;
|
|
}
|
|
|
|
bool CCsvParser::isBad() const {
|
|
return !m_bGood;
|
|
}
|
|
|
|
unsigned int CCsvParser::getErrorCol() const {
|
|
return m_nCol;
|
|
}
|