如何将文本文件的每一行分配给新的向量? 我是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
甚至您自己的类或结构,而不是嵌套的向量。不,您不需要向量。你想要一个鳕鱼吗