C++ 在C+;中将浮点的文本文件读入二维向量+;
我有一个由数千个浮点值组成的数据文件,我想将它们读入一个2D向量数组,并在存储文件中的浮点值后将该向量传递给另一个例程。当我运行这个代码时,它会打印出来 [0][0]=0、[0][1]=0等 数据文件包含如下值: 0.000579、27.560021等C++ 在C+;中将浮点的文本文件读入二维向量+;,c++,arrays,vector,fstream,ifstream,C++,Arrays,Vector,Fstream,Ifstream,我有一个由数千个浮点值组成的数据文件,我想将它们读入一个2D向量数组,并在存储文件中的浮点值后将该向量传递给另一个例程。当我运行这个代码时,它会打印出来 [0][0]=0、[0][1]=0等 数据文件包含如下值: 0.000579、27.560021等 int行=1000; int cols=2; 向量数据向量(行,向量(cols)); 如果输入; in.open(“Data.txt”); 对于(int i=0;i数据向量[i][j]; cout在我看来,该文件无法打开。您没有测试成功,因此它将
int行=1000;
int cols=2;
向量数据向量(行,向量(cols));
如果输入;
in.open(“Data.txt”);
对于(int i=0;i>数据向量[i][j];
cout在我看来,该文件无法打开。您没有测试成功,因此它将继续工作。您的所有值都已初始化为零,并将保持这种状态,因为每次读取都失败。我承认,这是猜测,但我会为此付出代价。=)包括
#包括
#包括
使用名称空间std;
无效写入(整数m,整数n)
{
ofs流(“data.txt”);
如果(!ofs){
cerr尝试此解决方案,它根据您的规格工作:
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
int main(void)
{
ifstream infile;
char cNum[10] ;
int rows = 1;
int cols = 2;
vector<vector<float > > dataVec(rows,vector<float>(cols));
infile.open ("test2.txt", ifstream::in);
if (infile.is_open())
{
while (infile.good())
{
for(int i = 0; i < rows; i++)
{
for(int j = 0; j < 2; j++)
{
infile.getline(cNum, 256, ',');
dataVec[i][j]= atof(cNum) ;
cout <<dataVec[i][j]<<" , ";
}
}
}
infile.close();
}
else
{
cout << "Error opening file";
}
cout<<" \nPress any key to continue\n";
cin.ignore();
cin.get();
return 0;
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
内部主(空)
{
河流充填;
碳原子[10];
int行=1;
int cols=2;
向量数据向量(行,向量(cols));
inflee.open(“test2.txt”,ifstream::in);
if(infle.is_open())
{
while(infle.good())
{
对于(int i=0;i cout文件是否像您显示的那样实际包含逗号,或者它是纯空格分隔的?如果它包含逗号,那么您也需要提取这些逗号。原因可能是这些值对于默认精度cout
来说太小。添加一个包含
,并按如下方式更改输出行:co但是数据文件中没有逗号,只是用空格隔开。setprecision不起作用,但这是一个好主意。简化。你能读入一个值吗?你能读入一个向量吗?
?是的,你是对的。虽然,我不知道为什么它不打开。在我看来,这很可能。特别是当你认为你得到了“data.txt”的相对路径时右键,并假定打开文件函数将始终按此方式工作。通常在调试模式下,大多数IDE的未初始化值通常初始化为0。@OP:将Data.txt的完整路径而不是相对路径放在一起,然后查看它是否工作。例如,“C:/Users/User/Documents/Data.txt”例如,该文件是否被另一个进程锁定?是否是区分大小写的文件系统,而您的大小写错误?如果是windows,您是否在使用完整路径时转义了反斜杠字符?您是否尝试在其他程序中读取该文件,复制或删除它?您是否尝试创建新的测试文件并检查是否可以读取它?
#include <vector>
#include <fstream>
#include <iostream>
using namespace std;
void write(int m, int n)
{
ofstream ofs("data.txt");
if (!ofs) {
cerr << "write error" << endl;
return;
}
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
ofs << i+j << " ";
}
void read(int m, int n)
{
ifstream ifs("data.txt");
if (!ifs) {
cerr << "read error" << endl;
return;
}
vector<float> v;
float a;
while (ifs >> a) v.push_back(a);
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
cout << "[" << i << "][" << j << "] = "
<< v[i*n+j] << ", ";
}
int main()
{
write(2,2);
read(2,2);
return 0;
}
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
int main(void)
{
ifstream infile;
char cNum[10] ;
int rows = 1;
int cols = 2;
vector<vector<float > > dataVec(rows,vector<float>(cols));
infile.open ("test2.txt", ifstream::in);
if (infile.is_open())
{
while (infile.good())
{
for(int i = 0; i < rows; i++)
{
for(int j = 0; j < 2; j++)
{
infile.getline(cNum, 256, ',');
dataVec[i][j]= atof(cNum) ;
cout <<dataVec[i][j]<<" , ";
}
}
}
infile.close();
}
else
{
cout << "Error opening file";
}
cout<<" \nPress any key to continue\n";
cin.ignore();
cin.get();
return 0;
}