I have the following code for parsing a text file which contains lines of data such as 1,1,1,1,1,1.
while(file >> line)
{
words.push_back(line);
}
for(int i = 0; i < words.size(); i++)
{
if(words.at(i).substr(0, 1) == "[" && words.at(i) != "[header]")
layers.push_back(words.at(i));
if(words.at(i).substr(0, 4) == "type")
{
temp = words.at(i);
temp.substr(4, 1);
types.push_back(temp);
}
if(words.at(i) == "[header]")
{
map_width = words.at(i+1).substr(6, words.at(i+1).size());
map_height = words.at(i+2).substr(7, words.at(i+1).size());
stringstream(map_width) >> width;
stringstream(map_height) >> height;
}
if(words.at(i) == "type=background")
{
for(int j = i+1; j <= height + (i+1); j++)
{
int l = 0, m = 1, number = 0, extracted;
string extracted_line = words.at(j);
for(int k = 0; k <= extracted_line.size(); k++)
{
cout << number << endl;
string ph_character = words.at(j).substr(l, m);
if(ph_character == ",")
{
number = 0;
break;
}
if(ph_character == "0") cout << "Found 0.\n";
stringstream(ph_character) >> extracted;
number = (number*10) + extracted;
switch(number)
{
case 1:
//cout << "Found 1" << endl;
break;
case 4:
cout << "Found 4" << endl;
break;
}
l++; m++;
}
}
}
}
file.close();
}
The code above is supposed to iterate over the file, store each line in a string array, store each line in a string then check each character of the string. The number must reset every time it encounters a ',' character, however output is crazy:
0
1
11
111
1111
11111
111111
1111111
11111111
111111111
1111111111
-1773790777
-558038505
and so on.
What have I done wrong? The output should be the exact content of the file which is normally 1, then 1 then 1 then 10, basically the number before the ','. I'm running Windows XP Sp3, using code::blocks.
EDIT:
A sample from the file I'm trying to parse:
> 1,1,1,1,1,2,23,23,23,23,23,1,1,1,1,1,1,1,1,1
> 10,10,10,23,1,1,1,1,1,1,1,1,23,23,23,23,1,1,1
and there's more lines of such data, but there's no point to further flood this question.