38 #ifndef IFSTREAMASCII_OBJECT_H
39 #define IFSTREAMASCII_OBJECT_H
119 int strTotlLinesRead;
121 int strDataLinesRead;
123 int strBlankLinesRead;
125 int strCommentLinesRead;
127 int strBlkCommentLinesRead;
135 bool strBlkCommntSet;
156 vector<string> strTokens;
169 void getline(
string& s) { std::getline(ifs, s); };
175 strDataLinesRead(0), strBlankLinesRead(0),
176 strCommentLinesRead(0), strBlkCommentLinesRead(0),
177 strBytesRead(0), strBlkCommntSet(false),
180 setDefaultDelimiters(); setCommentDelimiter(
"#");
197 bool isOpen() {
return (ifs.is_open() || ofs.is_open()) ? true :
false; }
206 else if (ofs.is_open())
229 string fn = strFileName;
238 bool read(
string& token);
250 void tokenize(
const string& str, vector<string>& tokens);
272 const string& strgDelim,
273 const string& cmntDelim,
274 const string& begBlk,
275 const string& endBlk)
277 strDelim[0] = wspcDelims;
278 strDelim[1] = strgDelim;
279 strDelim[2] = cmntDelim;
280 strDelim[3] = begBlk;
281 strDelim[4] = endBlk;
289 strDelim[0] = wsDelims;
305 strDelim[1] = strgDelim;
321 strDelim[2] = cmntDelim;
337 const string& endBlk)
339 strDelim[3] = begBlk;
340 strDelim[4] = endBlk;
348 strDelim[3] = begBlkCmntDelim;
364 strDelim[4] = endBlkCmntDelim;
380 return strTotlLinesRead;
388 return strDataLinesRead;
396 return strBlankLinesRead;
404 return strCommentLinesRead;
412 return strBlkCommentLinesRead;
441 bool readString(
string& s);
456 bool readByte(
byte& b);
471 bool readShort(
short& s);
486 bool readInteger(
int& i);
516 bool readFloat(
float& f);
526 bool readType(
double& d) {
return readDouble(d); };
531 bool readDouble(
double& d);
577 inline bool IFStreamAscii::read(
string& token)
583 if (strTokenPtr >= (
int) strTokens.size())
593 if (!readLine(ln))
return false;
597 tokenize(ln, strTokens);
602 token = strTokens[strTokenPtr++];
609 inline bool IFStreamAscii::isEOF()
const
611 return (ifs.eof() && (strTokenPtr >= (
int) strTokens.size()));
617 inline string IFStreamAscii::readString()
627 inline bool IFStreamAscii::readString(
string& s)
635 inline bool IFStreamAscii::next()
644 inline byte IFStreamAscii::readByte()
654 inline bool IFStreamAscii::readByte(
byte& b)
660 if (!read(sb))
return false;
664 if (sscanf(sb.c_str(),
"%hhd", &b) != 1)
667 os << endl <<
"ERROR in IFStreamAscii::readByte" << endl
668 <<
" Could Not Scan Byte From Token = " << sb << endl
669 <<
" On File Line: " << strTotlLinesRead <<
" ..." << endl;
681 inline short IFStreamAscii::readShort()
691 inline bool IFStreamAscii::readShort(
short& s)
697 if (!read(ss))
return false;
701 if (sscanf(ss.c_str(),
"%hd", &s) != 1)
704 os << endl <<
"ERROR in IFStreamAscii::readShort" << endl
705 <<
" Could Not Scan Short From Token = " << ss << endl
706 <<
" On File Line: " << strTotlLinesRead <<
" ..." << endl;
718 inline int IFStreamAscii::readInteger()
728 inline bool IFStreamAscii::readInteger(
int& i)
734 if (!read(si))
return false;
738 if (sscanf(si.c_str(),
"%d", &i) != 1)
741 os << endl <<
"ERROR in IFStreamAscii::readInteger" << endl
742 <<
" Could Not Scan Integer From Token = " << si << endl
743 <<
" On File Line: " << strTotlLinesRead <<
" ..." << endl;
771 if (!read(sl))
return false;
778 os << endl <<
"ERROR in IFStreamAscii::readLong" << endl
779 <<
" Could Not Scan Long From Token = " << sl << endl
780 <<
" On File Line: " << strTotlLinesRead <<
" ..." << endl;
792 inline float IFStreamAscii::readFloat()
802 inline bool IFStreamAscii::readFloat(
float& f)
808 if (!read(sf))
return false;
812 if (sscanf(sf.c_str(),
"%f", &f) != 1)
815 os << endl <<
"ERROR in IFStreamAscii::readFloat" << endl
816 <<
" Could Not Scan Float From Token = " << sf << endl
817 <<
" On File Line: " << strTotlLinesRead <<
" ..." << endl;
829 inline double IFStreamAscii::readDouble()
839 inline bool IFStreamAscii::readDouble(
double& d)
845 if (!read(sd))
return false;
849 if (sscanf(sd.c_str(),
"%lf", &d) != 1)
852 os << endl <<
"ERROR in IFStreamAscii::readDouble" << endl
853 <<
" Could Not Scan Double From Token = " << sd << endl
854 <<
" On File Line: " << strTotlLinesRead <<
" ..." << endl;
865 #endif // INTERPOLATOR_OBJECT_H