1.读取CSV文件
cpp
// 读取csv文件
void read_csv(const std::string& file_path) {
std::cout<<"文件路径: "<< file_path<<"\n";
std::ifstream csv_data(file_path, std::ios::in);
std::string line;
if (!csv_data.is_open()) {
std::cout << "Error: failed to open file\n";
std::exit(1);
}
std::istringstream sin; // 将整行字符串读入到字符串流中
std::vector<std::string> words;
std::string word;
std::vector<std::vector<double>> path_points;
// 读取标题行
std::getline(csv_data, line);
// 读取数据
while (std::getline(csv_data, line)) {
sin.clear();
sin.str(line);
words.clear();
std::vector<double> path_point;
while (std::getline(
sin, word, ',')) { // 将字符串流sin中的字符读到word中,以字符'逗号'为分隔符
double value = std::atof(word.c_str());
path_point.push_back(value);
}
path_points.push_back(path_point);
}
csv_data.close(); // 关闭文件
}
2.写入CSV文件
cpp
void write_csv(const std::string& file_path) {
std::cout << "写入路径为: " << file_path << "\n";
std::ofstream out_file(
file_path,
std::ios::out); // 默认通过iso::out方式进行写入,当文件不存在时会进行创建
if (out_file.is_open()) { //判定文件是否打开
// 写入标题行
out_file << "x" << ',' << "y" << ',' << "heading" << ',' << "s" << ','
<< "kappa" << ',' << "flag" << std::endl;
// 写入10行数据
for (int i = 0; i < 10; ++i) {
out_file << std::to_string(i) << ',' << std::to_string(i) << ','
<< std::to_string(i) << ',' << std::to_string(i) << ','
<< std::to_string(i) << ',' << std::to_string(i) << std::endl;
}
out_file.close();
}else{
std::cout<<"文件无法打开\n";
}
}
3.向csv文件中追加内容
与第2部分基本相同,只不过是以iso::app方式打开,当文件不存在时会自动创建。
cpp
void app_csv(const std::string& file_path) {
std::ofstream out_file(file_path, std::ios::app);
if(out_file.is_open()){ //判断文件是否打开
// 写入10行数据
for (int i = 10; i < 20; ++i) {
out_file << std::to_string(i) << ',' << std::to_string(i) << ','
<< std::to_string(i) << ',' << std::to_string(i) << ','
<< std::to_string(i) << ',' << std::to_string(i) << std::endl;
}
}else{
std::cout<<"文件无法打开\n";
}
}