最近遇到一个问题,读入txt文档时,一些文档以空格分隔数据,还有一些以TAB键(\t)分隔数据,有时夹着好几个\t,于是原本的数据读代码就不好用了,原本的代码长这样:
// 读取标定文件里的数据
ifstream inFile("C:/Users/z84103457/Desktop/more dataBase/1001a_GS0.0001.csv", ios::in);
if (inFile.fail())
cout << "读取文件失败" << endl;
while (getline(inFile, lineStr))
{
// 存成二维表结构
stringstream ss(lineStr);
string str;
// 按照逗号分隔
while (getline(ss, str, ','))
{
arrRow.push_back(atof(str.c_str()));
}
arr.push_back(arrRow);
arrRow.clear();
}
csv的话就以逗号分隔,txt原本以空格分隔,现在分隔符多了,不好用,于是自己重新写了一个,如下:
// 读文件
ifstream inFileG("C:/Users/z84103457/Desktop/more dataBase/1001a_out.txt", ios::in);
if (inFileG.fail())
cout << "读取文件失败" << endl;
while (getline(inFileG, lineStr))
{
string str;
for (int i = 0; i <= lineStr.size(); i++)
{
if ((lineStr[i] >= '0'&&lineStr[i] <= '9') || lineStr[i] == '.'|| lineStr[i] == '-' || lineStr[i] == '+' || lineStr[i] == 'e')
str.push_back(lineStr[i]);
else
{
if (str.size() != 0)
{
arrRow.push_back(atof(str.c_str()));
str.clear();
}
}
}
arr.push_back(arrRow);
arrRow.clear();
}