I have a need to parse a file that can have infinite rows and columns of #s per row; however, a white space must separate the #s and a newline character must denote the end of a row, except for the last row.
each row represents the y axis and the columns represent the x axis.
Example:
0 1 1 2'\n'
1'\n'
0 2 2'\n'
1 2 2
I need to be able to extract all the #s for a row, minus the white spaces, but know when the row ends '\n' so that when I go to the next row, I can increment the internal y axis representation.
String streams will auto skip white spaces via setting ios_base::skipws, when using the '>>' operator; however the '>>' also extracts but discards the '\n' which means any check for '\n' doesn't work and the read continues onto the next row without me knowing.
I started looking into getline since it stops at a delimiting character, but then I lose the skipping of whitespaces.
My current solution is a combination (pseudo):
ifstream iPattern("file");
string str;
while ( !iPattern.eof() )
{
getline(iPattern, str);
stringstream ss(str); // bad, I know - only way I know to set a string stream with a string?
ss.setf(ios_base::skipws);
while ( !ss.eof() )
{
ss >> x; // read number - x axis
}
y++; // about to read next row - increment y axis
}
Anyone have a better Idea?
I know I could use peek to check ahead without extracting, but I wanted to avoid using peek as then I'd have to manually advance using seekg, etc.
Question
HeartsOfWar
I have a need to parse a file that can have infinite rows and columns of #s per row; however, a white space must separate the #s and a newline character must denote the end of a row, except for the last row.
each row represents the y axis and the columns represent the x axis.
Example:
I need to be able to extract all the #s for a row, minus the white spaces, but know when the row ends '\n' so that when I go to the next row, I can increment the internal y axis representation.
String streams will auto skip white spaces via setting ios_base::skipws, when using the '>>' operator; however the '>>' also extracts but discards the '\n' which means any check for '\n' doesn't work and the read continues onto the next row without me knowing.
I started looking into getline since it stops at a delimiting character, but then I lose the skipping of whitespaces.
My current solution is a combination (pseudo):
ifstream iPattern("file"); string str; while ( !iPattern.eof() ) { getline(iPattern, str); stringstream ss(str); // bad, I know - only way I know to set a string stream with a string? ss.setf(ios_base::skipws); while ( !ss.eof() ) { ss >> x; // read number - x axis } y++; // about to read next row - increment y axis }Anyone have a better Idea?
I know I could use peek to check ahead without extracting, but I wanted to avoid using peek as then I'd have to manually advance using seekg, etc.
Link to comment
Share on other sites
7 answers to this question
Recommended Posts