首页 > 解决方案 > 将一维数组写入CSV C++中的不同列?

问题描述

我有一个生成一维值数组的函数。我想将该数组存储到 CSV 文件中。每次调用该函数时,我都想将此数据存储到 CSV 中的新列中。现在我的代码是半工作的,每次我调用函数时它都会不断地将新的数据数组添加到我的 csv 中,但它会将它添加到同一列的底部。我希望将数据存储在下一列而不是添加到第一列的底部。任何帮助将不胜感激。

* 我已经删除了生成我的standard_dev数组的代码部分*

#include <iostream>
#include <cmath>
#include <fstream>
#include <vector>
#include <iomanip>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include "functions.h"

using namespace cv;
using namespace std;

void standard_deviation_line(Mat image, int column_count) {

    int sum = 0;
    int standard_dev_col = 0;
    int i, j; 
    const int cols = 3840;
    int rows = image.rows;
    float standard_dev[cols];
    float mean[cols];

ofstream out("SD.csv", ios::app);
    for (i = 0; i < cols; i++)
        out << standard_dev[i] << endl;

    out.close();

}

标签: c++arrayscsvappendofstream

解决方案


问题是你的 for 循环中的 endl ,它输出换行符。

编辑:试试这个

template<typename Iter>
std::string join(Iter p0, Iter p1) {
    std::string result{};
    if(p0 != p1) {
        result = std::to_string(*p0++);
    }
    while(p0 != p1) {
        result += ',';
        result += std::to_string(*p0++);
    }
    return result;
}

然后在没有 for 循环的情况下使用它,如下所示:

out << join(standard_dev, standard_dev + cols) << '\n';

推荐阅读