使用C ++写入.csv文件?

时间:2015-08-14 18:32:53

标签: c++ csv

TL; DR我正在尝试获取数据流并将其写入.csv文件。除写作部分外,一切都已解决,我认为这只是因为我没有正确引用.csv文件。但我是这个东西的新手,无法弄清楚如何正确引用它,所以我需要帮助。

您好,非常感谢任何可以帮助我的人!一些高级信息,我的IDE是Xcode,使用C ++,我使用Thalmic Labs的Myo臂带作为收集数据的设备。有一个program(对那些感兴趣的人可以查看它的链接),它应该将EMG,加速度计,陀螺仪和方向值流式传输到.csv文件中。我非常接近让应用程序工作,但我缺乏编程经验终于赶上了我,我被困在一些相当简单的事情上。我知道应用程序可以流式传输数据,因为我已经能够在调试区域中打印EMG值。我也可以使用以下代码打开.csv文件:

const char *path= "/Users/username/folder/filename";
std::ofstream file(path);
std::string data("data to write to file");
file << data;

但是在我结束程序后,没有数据最终被流式传输/打印到该文件中。我能想到的唯一一件事就是打印功能无法正确引用此文件路径。我认为这是一个简单的事情,但就像我说的,我没有经验,并且不知道如何解决这个问题。我不确定其他信息是否必要,所以我只提供我想象的可能有用的一切。

这是应该打开文件的功能结构:(注意:该应用程序旨在打开与自身相同的目录中的文件)

void openFiles() {
    time_t timestamp = std::time(0);

    // Open file for EMG log
    if (emgFile.is_open())
    {
        emgFile.close();
    }
    std::ostringstream emgFileString;
    emgFileString << "emg-" << timestamp << ".csv";
    emgFile.open(emgFileString.str(), std::ios::out);
    emgFile << "timestamp,emg1,emg2,emg3,emg4,emg5,emg6,emg7,emg8" << std::endl;

这是打印加速度计和陀螺仪数据的帮助(打印EMG数据似乎没有这样的东西,但我知道它确实如此,所以... Watevs):

void printVector(std::ofstream &path, uint64_t timestamp, const myo::Vector3< float > &vector)
{
    path << timestamp
    << ',' << vector.x()
    << ',' << vector.y()
    << ',' << vector.z()
    << std::endl;
}

这是利用助手的功能结构:

void onAccelerometerData(myo::Myo *myo, uint64_t timestamp, const myo::Vector3< float > &accel)
{

    printVector(accelerometerFile, timestamp, accel);

}

我与Thalmic Labs的一名工作人员(实际制作应用程序的人)进行了交谈,他说这听起来像是,除非应用程序完全坏了,否则我可能只是在计算机上遇到了权限问题。这台计算机上有多个用户,所以很可能是这种情况,虽然我当然希望不会这样,而且我还是想在再说一遍之前再试一次。再次感谢任何可以提供帮助的人! :)

1 个答案:

答案 0 :(得分:0)

我的想象力让我失望。您是否尝试过写入或读取ostringstream或istringstream对象?这可能是提供信息的。这是一行是正确的:

std::ofstream  outputFile( strOutputFilename.c_str(), std::ios::app );

请注意,C ++对流式.csv代码没有任何本机支持,但您可能必须自己进行这些转换。 :(如果你用(加倍)“//”替换“/”的话可能效果更好......