c++读写txt点云 逗号分隔 具体举例并进行详细注释
时间: 2024-10-13 14:13:12 浏览: 42
在C++中,处理文本文件(如.txt格式的CSV点云数据,其中点由逗号分隔)通常涉及到文件输入流(ifstream)用于读取,和文件输出流(ofstream)用于写入。这里是一个简单的例子,展示如何读取和写入CSV格式的数据:
```cpp
#include <fstream>
#include <string>
#include <vector>
// 定义一个结构体表示一个三维点
struct Point {
double x;
double y;
double z;
};
// 读取CSV文件函数
std::vector<Point> read_txt_point_cloud(const std::string& filename) {
std::ifstream file(filename);
if (!file.is_open()) {
throw std::runtime_error("Failed to open file: " + filename);
}
std::vector<Point> points;
std::string line;
while (std::getline(file, line)) { // 逐行读取
if (line.empty() || line[0] == '#') continue; // 跳过空行和注释
// 使用stringstream将每一行分割成x, y, z
std::stringstream ss(line);
std::string part;
Point p;
if (!(ss >> part >> p.x >> part >> p.y >> part >> p.z)) {
throw std::runtime_error("Invalid data format in file");
}
points.push_back(p); // 将点添加到点云中
}
file.close();
return points;
}
// 写入CSV文件函数
void write_txt_point_cloud(const std::vector<Point>& points, const std::string& filename) {
std::ofstream output_file(filename);
if (!output_file.is_open()) {
throw std::runtime_error("Failed to create file: " + filename);
}
for (const auto& point : points) {
output_file << point.x << "," << point.y << "," << point.z << "\n"; // 写入每个点,换行分隔
}
output_file.close();
}
int main() {
try {
std::vector<Point> cloud = read_txt_point_cloud("input.txt");
write_txt_point_cloud(cloud, "output.txt");
std::cout << "Data successfully processed!" << std::endl;
} catch (const std::exception& e) {
std::cerr << "Error: " << e.what() << std::endl;
}
return 0;
}
```
在这个例子中,`read_txt_point_cloud`函数负责从给定的CSV文件中读取点云数据,并存储在一个`Point`类型的向量中。而`write_txt_point_cloud`函数则将这个点云以相同的格式写入另一个文件。
阅读全文