Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将文本文件的每一行分配给新的向量? 我是C++ NoOB,我有一个文本文件,有4行和3列,其中每行对应于一个传感器信号。如何将每行加载到单独的向量_C++_Text Files_Fstream - Fatal编程技术网

如何将文本文件的每一行分配给新的向量? 我是C++ NoOB,我有一个文本文件,有4行和3列,其中每行对应于一个传感器信号。如何将每行加载到单独的向量

如何将文本文件的每一行分配给新的向量? 我是C++ NoOB,我有一个文本文件,有4行和3列,其中每行对应于一个传感器信号。如何将每行加载到单独的向量,c++,text-files,fstream,C++,Text Files,Fstream,这是到目前为止我所知道的,但是这段代码将数据作为字符串加载。我想将最终数据加载为向量 矢量输入; ifstream fileFFT(Filename.c_str()); 弦线; while(getline(fileFFT,line)){ if(line.empty()){ 继续; } 溪流排(线); 向量值((istream_迭代器(行)),(istream_迭代器());//结束 输入。推回(值); } 以下是一些让您开始学习的内容: class Point { public: doubl

这是到目前为止我所知道的,但是这段代码将数据作为字符串加载。我想将最终数据加载为
向量

矢量输入;
ifstream fileFFT(Filename.c_str());
弦线;
while(getline(fileFFT,line)){
if(line.empty()){
继续;
}
溪流排(线);
向量值((istream_迭代器(行)),(istream_迭代器());//结束
输入。推回(值);
}

以下是一些让您开始学习的内容:

class Point
{
public:
  double x;
  double y;
  friend std::istream& operator>>(std::istream& input, Point& p);
};

std::istream& operator>>(std::istream& input, Point& p)
{
  char c;
  input >> c; // Read open parenthesis
  input >> p.x;
  input >> c; // Read comma
  input >> p.y;
  input >> c; // Read closing parenthesis
  return input;
};

//...
std::string row_text;
std::vector<std::vector<Point>> matrix;
while (std::getline(my_file, row_text))
{
  std::vector<Point> row;
  std::istringstream(row_text);
  Point p;
  while (row_text >> p)
  {
    row.push_back(p);
  }
  matrix.push_back(row);
}
类点
{
公众:
双x;
双y;
friend std::istream&operator>>(std::istream&input,Point&p);
};
std::istream&operator>>(std::istream&input,Point&p)
{
字符c;
输入>>c;//读取开括号
输入>>p.x;
输入>>c;//读取逗号
输入>>p.y;
输入>>c;//读取右括号
返回输入;
};
//...
std::字符串行\文本;
向量矩阵;
while(std::getline(我的文件,行文本))
{
std::向量行;
std::istringstream(行文本);
p点;
while(行文本>>p)
{
行。向后推(p);
}
矩阵。推回(世界其他地区);
}
我创建了一个
Point
类来表示一对浮点数

我还重载了
操作符>
,以使读取
更容易

循环读取一条记录或文本行,然后从文本行创建点的向量。

然后将记录或行追加到矩阵中

这里有一些东西可以让你开始:

class Point
{
public:
  double x;
  double y;
  friend std::istream& operator>>(std::istream& input, Point& p);
};

std::istream& operator>>(std::istream& input, Point& p)
{
  char c;
  input >> c; // Read open parenthesis
  input >> p.x;
  input >> c; // Read comma
  input >> p.y;
  input >> c; // Read closing parenthesis
  return input;
};

//...
std::string row_text;
std::vector<std::vector<Point>> matrix;
while (std::getline(my_file, row_text))
{
  std::vector<Point> row;
  std::istringstream(row_text);
  Point p;
  while (row_text >> p)
  {
    row.push_back(p);
  }
  matrix.push_back(row);
}
类点
{
公众:
双x;
双y;
friend std::istream&operator>>(std::istream&input,Point&p);
};
std::istream&operator>>(std::istream&input,Point&p)
{
字符c;
输入>>c;//读取开括号
输入>>p.x;
输入>>c;//读取逗号
输入>>p.y;
输入>>c;//读取右括号
返回输入;
};
//...
std::字符串行\文本;
向量矩阵;
while(std::getline(我的文件,行文本))
{
std::向量行;
std::istringstream(行文本);
p点;
while(行文本>>p)
{
行。向后推(p);
}
矩阵。推回(世界其他地区);
}
我创建了一个
Point
类来表示一对浮点数

我还重载了
操作符>
,以使读取
更容易

循环读取一条记录或文本行,然后从文本行创建点的向量。

然后将记录或行追加到矩阵中

您已经得到了一半答案-使用
std::getline()
读取每一行,然后使用
std:(i)stringstream
处理每一行

现在,您缺少的是另一半—解析每一行。既然您已经知道如何使用
std::istream\u迭代器,我会这样做:

typedef std::pair<float, float> SensorValue;
typedef std::vector<SensorValue> SensorValues;

std::istream& operator>>(std::istream &in, SensorValue &out)
{
    float f1, f2;
    char ch1, ch2, ch3;

    if (in >> ch1 >> f1 >> ch2 >> f2 >> ch3)
    {
        if ((ch1 == '(') && (ch2 == ',') && (ch3 == ')'))
            out = std::make_pair(f1, f2);
        else
            in.setstate(std::ios_base::failbit);
    }

    return in;
}

...

std::vector<SensorValues> input;

std::ifstream fileFFT(Filename.c_str());
std::string line;

while (std::getline(fileFFT, line))
{
    if (line.empty())
        continue;

    std::istringstream row(line);

    SensorValues values;
    std::copy(std::istream_iterator<SensorValue>(row), std::istream_iterator<SensorValue>(), std::back_inserter(values));

    input.push_back(values);
}
typedef std::pair SensorValue;
typedef std::矢量传感器值;
std::istream&operator>>(std::istream&输入、传感器值&输出)
{
浮球f1、f2;
char ch1、ch2、ch3;
如果(在>>ch1>>f1>>ch2>>f2>>ch3中)
{
如果((ch1=='(')&&(ch2==',')&&(ch3==')))
out=std::形成一对(f1,f2);
其他的
in.setstate(std::ios_base::failbit);
}
返回;
}
...
向量输入;
std::ifstream fileFFT(Filename.c_str());
std::字符串行;
while(std::getline(fileFFT,line))
{
if(line.empty())
继续;
std::istringstream行(行);
感知价值观;
std::copy(std::istream_迭代器(行),std::istream_迭代器(),std::back_插入器(值));
输入。推回(值);
}

您已经得到了一半答案-使用
std::getline()
读取每一行,然后使用
std::(i)stringstream
处理每一行

现在,您缺少的是另一半—解析每一行。既然您已经知道如何使用
std::istream\u迭代器,我会这样做:

typedef std::pair<float, float> SensorValue;
typedef std::vector<SensorValue> SensorValues;

std::istream& operator>>(std::istream &in, SensorValue &out)
{
    float f1, f2;
    char ch1, ch2, ch3;

    if (in >> ch1 >> f1 >> ch2 >> f2 >> ch3)
    {
        if ((ch1 == '(') && (ch2 == ',') && (ch3 == ')'))
            out = std::make_pair(f1, f2);
        else
            in.setstate(std::ios_base::failbit);
    }

    return in;
}

...

std::vector<SensorValues> input;

std::ifstream fileFFT(Filename.c_str());
std::string line;

while (std::getline(fileFFT, line))
{
    if (line.empty())
        continue;

    std::istringstream row(line);

    SensorValues values;
    std::copy(std::istream_iterator<SensorValue>(row), std::istream_iterator<SensorValue>(), std::back_inserter(values));

    input.push_back(values);
}
typedef std::pair SensorValue;
typedef std::矢量传感器值;
std::istream&operator>>(std::istream&输入、传感器值&输出)
{
浮球f1、f2;
char ch1、ch2、ch3;
如果(在>>ch1>>f1>>ch2>>f2>>ch3中)
{
如果((ch1=='(')&&(ch2==',')&&(ch3==')))
out=std::形成一对(f1,f2);
其他的
in.setstate(std::ios_base::failbit);
}
返回;
}
...
向量输入;
std::ifstream fileFFT(Filename.c_str());
std::字符串行;
while(std::getline(fileFFT,line))
{
if(line.empty())
继续;
std::istringstream行(行);
感知价值观;
std::copy(std::istream_迭代器(行),std::istream_迭代器(),std::back_插入器(值));
输入。推回(值);
}

您需要字符串向量吗?或者一个字符串向量就足够了?在StackOverflow中搜索“c++读取文件CSV”。类似的问题已经很多了。@spandy,如果您知道元素的长度总是两个,那么最好使用
std::pair
std::array
甚至您自己的类或结构,而不是嵌套的向量。不,您不需要向量。您需要
std::vector
std::vector
。请使用自定义结构或元组、对或数组。不要使用向量。向量用于动态内容,或者在编译时大小未知的地方。使用更固定的数据结构,您的代码将在稍后感谢您。上面所有的建议都强调了如何做到这一点。你需要字符串的向量吗?或者一个字符串向量就足够了?在StackOverflow中搜索“c++读取文件CSV”。类似的问题已经很多了。@spandy,如果您知道元素的长度总是两个,那么最好使用
std::pair
std::array
甚至您自己的类或结构,而不是嵌套的向量。不,您不需要向量。你想要一个鳕鱼吗