92 lines
1.9 KiB
C++
92 lines
1.9 KiB
C++
#include "ListParser.h"
|
|
|
|
#include <fstream>
|
|
#include <string>
|
|
using namespace std;
|
|
|
|
// Aid function that chomps the trailing '\n' or "\n\r" if there are any from a string and
|
|
// returns the string without them.
|
|
string chomp(const string &strToChomp)
|
|
{
|
|
const char CARRIAGE_RETURN = '\r';
|
|
const char NEW_LINE = '\n';
|
|
|
|
int lastIndex = strToChomp.length()-1;
|
|
|
|
if ((lastIndex >= 0) && (strToChomp[lastIndex] == CARRIAGE_RETURN))
|
|
{
|
|
--lastIndex;
|
|
}
|
|
if ((lastIndex >= 0) && (strToChomp[lastIndex] == NEW_LINE))
|
|
{
|
|
--lastIndex;
|
|
}
|
|
return strToChomp.substr(0, lastIndex + 1);
|
|
}
|
|
|
|
/*
|
|
* Parses a text file and puts its lines inside a vector.
|
|
* filename - the name of the file to parse
|
|
* vec - the vector to put the lines in.
|
|
*/
|
|
int List_Parser::parseItemList(const ACE_TCHAR * fileName, std::vector<ACE_TString> &vec)
|
|
{
|
|
int status = PARSER_STATUS_FAILURE;
|
|
|
|
if (fileName == NULL)
|
|
{
|
|
return status;
|
|
}
|
|
|
|
const char * WHITESPACE_CHARS = " \n\t\r";
|
|
|
|
ifstream fileStream;
|
|
string str;
|
|
|
|
bool errorOccured = false;
|
|
|
|
fileStream.open(fileName, ifstream::in);
|
|
if(!fileStream.fail())
|
|
{
|
|
|
|
while ((!errorOccured) && (!fileStream.eof()))
|
|
{
|
|
getline(fileStream, str);
|
|
|
|
// if there are empty lines in the file, than skip them.
|
|
// Do this before reading the fail bits since it IS considered a failure by getline.
|
|
|
|
// but first chomp the line from '\n' or "\n\r" (in Linux)
|
|
str = chomp(str);
|
|
|
|
if (str.empty())
|
|
{
|
|
continue;
|
|
}
|
|
|
|
if(!fileStream.fail())
|
|
{
|
|
// remove whitespaces at the beginning
|
|
int firstNotWhite = str.find_first_not_of(WHITESPACE_CHARS);
|
|
str.erase(0, firstNotWhite);
|
|
|
|
if (str.at(0) != COMMENT_START_CHARACTER)
|
|
{
|
|
vec.push_back(ACE_TString(str.c_str()));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
errorOccured = true;
|
|
}
|
|
}
|
|
|
|
if (!errorOccured)
|
|
{
|
|
status = PARSER_STATUS_SUCCESS;
|
|
}
|
|
}
|
|
|
|
fileStream.close();
|
|
return status;
|
|
} |