net7/trunk/Net7/CSVParser_DEP_.cpp

111 lines
2.3 KiB
C++
Raw Permalink Normal View History

2014-05-11 16:54:16 -04:00
#include <iostream>
#include <cstdlib>
#include "CsvParser.h"
using namespace std;
CSVParser::CSVParser()
{
m_sData = "";
m_nPos = 0;
}
const CSVParser & CSVParser::operator <<(const string & sIn)
{
this->m_sData = sIn;
this->m_nPos = 0;
return *this;
}
const CSVParser & CSVParser::operator <<(const char *sIn)
{
this->m_sData = sIn;
this->m_nPos = 0;
return *this;
}
CSVParser & CSVParser::operator >>(long & nOut)
{
string sTmp = "";
SkipSpaces();
while (m_nPos < m_sData.length() && m_sData[m_nPos] != ',')
sTmp += m_sData[m_nPos++];
m_nPos++; // skip past comma
nOut = atoi(sTmp.c_str());
if (nOut) LineIsBlank = false;
return *this;
}
CSVParser & CSVParser::operator >>(float & nOut)
{
string sTmp = "";
SkipSpaces();
while (m_nPos < m_sData.length() && m_sData[m_nPos] != ',')
sTmp += m_sData[m_nPos++];
m_nPos++; // skip past comma
nOut = atof(sTmp.c_str());
if (nOut) LineIsBlank = false;
return *this;
}
CSVParser & CSVParser::operator >>(string & sOut)
{
bool hasQuotes = false;
sOut = "";
SkipSpaces();
// Jump past first " if necessary
if (m_nPos < m_sData.length() && m_sData[m_nPos] == '"') {
hasQuotes = true;
m_nPos++;
}
while (m_nPos < m_sData.length()) {
if (!hasQuotes && m_sData[m_nPos] == ',')
break;
if (hasQuotes && m_sData[m_nPos] == '"') {
if (m_nPos + 1 >= m_sData.length() - 1)
break;
if (m_sData[m_nPos+1] == ',')
break;
}
sOut += m_sData[m_nPos++];
}
// Jump past last " if necessary
if (hasQuotes && 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 (sOut.size()) LineIsBlank = false;
return *this;
}
void CSVParser::SkipSpaces(void)
{
while (m_nPos < m_sData.length() && m_sData[m_nPos] == ' ')
m_nPos++;
}
string CSVParser::TrimLeft(const string& str)
{
string t = str;
// Trim left space from line
string::iterator i;
for (i = t.begin(); i != t.end(); i++)
{
if (!isspace(*i)) { break;}
}
if (i == t.end()) { t.empty(); }
else { t.erase(t.begin(), i); }
return t;
}
bool CSVParser::StartsWith(const string& str, const string& substr) {
return str.find(substr) == 0;
}