C++ 在C+;中将浮点的文本文件读入二维向量+;

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在我看来,该文件无法打开。您没有测试成功,因此它将

我有一个由数千个浮点值组成的数据文件,我想将它们读入一个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在我看来,该文件无法打开。您没有测试成功,因此它将继续工作。您的所有值都已初始化为零,并将保持这种状态,因为每次读取都失败。我承认,这是猜测,但我会为此付出代价。=)

包括 #包括 #包括 使用名称空间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;icout文件是否像您显示的那样实际包含逗号,或者它是纯空格分隔的?如果它包含逗号,那么您也需要提取这些逗号。原因可能是这些值对于默认精度
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;
}