如何将文本文件的每一行分配给新向量
How to assign each row of a text file to a new vector?
i是c noob,我有一个带有4行和3列的文本文件,其中每一行对应于传感器信号。如何将每一行加载到单独的vector<float>
?
(0.165334,0) (0.166524,-0.0136064) (-0.144899,0.0207161)
(0.205171,0) (0.205084,-0.0139042) (-0.205263,0.0262445)
(0.216684,0) (0.215388,-0.0131107) (-0.193696,0.0251303)
(0.220137,0) (0.218849,-0.0135667) (-0.194153,0.025175)
这是我到目前为止所拥有的,但是此代码将数据加载为字符串。我想将最终数据加载为vector<vector<float>>
?
vector<vector<string> > input;
ifstream fileFFT(Filename.c_str());
string line;
while(getline(fileFFT, line)){
if(line.empty()){
continue;
}
stringstream row(line);
vector<string> values((istream_iterator<string>(row)),(istream_iterator<string>())); //end
input.push_back(values);
}
以下是您开始的东西:
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);
}
我已经创建了一个Point
类来表示一对浮点号。
我还超载了operator>>
,以使读取Point
更容易。
循环读取一个记录或文本行,然后从文本行中创建Point
的向量。
然后将记录或行附加到矩阵上。
您已经有一半答案 - 使用std::getline()
读取每一行,然后使用std::(i)stringstream
来处理每行。
现在,您缺少的是另一半 - 分析每一行。而且由于您已经知道如何使用std::istream_iterator
,所以我会做这样的事情:
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);
}
相关文章:
- 将数组的地址分配给变量并删除
- vector.resize()中的分配错误
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 用c++从输入文件中读取另一行
- Win32编译器选项和内存分配
- 读取文件的最后一行并输入到链接列表时出错
- 函数中堆分配的效果与缺少堆分配的情况
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 从C++dll访问C#中的一行主要参数
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 获取字符串的长度并将其分配给数组
- 将地址分配给本地指针后,公共对象的变量将消失
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 在C++中,我如何接受不同于同一行的用户输入
- 从函数结果中分配 std::shared_ptr 的一行是什么?
- 如何将文本文件的每一行分配给新向量
- 如何动态分配二维数组一行在一个时间,列是已知的在c/c++
- 将静态 2D 数组的行分配给另一行
- 指向C++中动态分配的2D数组中一行的指针