我有以下代码用于解析包含数据行的文本文件,例如 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();
}
上面的代码应该遍历文件,将每一行存储在一个字符串数组中,将每一行存储在一个字符串中,然后检查字符串的每个字符。每次遇到“,”字符时,该数字都必须重置,但是输出很疯狂:
0
1
11
111
1111
11111
111111
1111111
11111111
111111111
1111111111
-1773790777
-558038505
and so on.
我做错了什么?输出应该是文件的确切内容,通常是 1,然后是 1,然后是 1,然后是 10,基本上是“,”之前的数字。我正在使用 code::blocks 运行 Windows XP Sp3。
编辑:
我试图解析的文件中的一个样本:
> 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
并且有更多这样的数据行,但是没有必要进一步泛滥这个问题。