how to reuse stringstream

c++, file, parsing, stringstream, text

Solution

You didn't `clear()` the stream after calling `str("")`. Take another look at this answer, it also explains why you should reset using `str(std::string())`. And in your case, you could also reset the contents using only `str(szLine)`.

If you don't call `clear()`, the flags of the stream (like `eof`) wont be reset, resulting in surprising behaviour ;)

Problem

These threads do NOT answer me: resetting a stringstream How do you clear a stringstream variable? ``` std::ifstream file( szFIleName_p ); if( !file ) return false; // create a string stream for parsing std::stringstream szBuffer; std::string szLine; // current line std::string szKeyWord; // first word on the line identifying what data it contains while( !file.eof()){ // read line by line std::getline(file, szLine); // ignore empty lines if(szLine == "") continue; szBuffer.str(""); szBuffer.str(szLine); szBuffer>>szKeyWord; ``` `szKeyword` will always contain the first word, `szBuffer` is not being reset. I can't find a clear example anywhere on how to use stringstream. New code after answer: ``` ... szBuffer.str(szLine); szBuffer.clear(); szBuffer>>szKeyWord; ... ``` Ok, thats my final version: ``` std::string szLine; // current line std::string szKeyWord; // first word on the line identifying what data it contains // read line by line while( std::getline(file, szLine) ){ // ignore empty lines if(szLine == "") continue; // create a string stream for parsing std::istringstream szBuffer(szLine); szBuffer>>szKeyWord; ```

Original source

Related problems