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.
 
     
     
     
    