TL; DR我正在嘗試獲取數據流並將其寫入.csv文件。除了寫作部分外,一切都已經解決了,我認爲這只是由於我沒有正確引用.csv文件。但我是這個東西的新手,並不知道如何正確引用它,所以我需要幫助。使用C++寫入.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;
這是助手打印加速度計和陀螺儀的數據(雖然目前沒有出現像這樣的東西打印肌電圖的數據,但我知道它,所以... 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實驗室,他說這聽起來像,除非應用程序只是完全壞了,我可能只是具有的權限問題(誰做的應用程序實際上是人)的一名工作人員講我的電腦。這臺計算機上有多個用戶,所以很可能是這種情況,儘管我當然不希望這樣,而且我還想在再次投入之前再試一次。再次,感謝任何可以幫助的人! :)
你檢查過文件['is_open()'](http:// en .cppreference.com/w/cpp/io/basic_ofstream/is_open)? – NathanOliver
您可以提供[MCVE](http://stackoverflow.com/help/mcve)? – caps
您正在使用相對路徑來打開文件,如果你的工作目錄不包含這些目錄,而不是簡單地創建它們,文件打開操作將失敗。使用絕對路徑,只是一個文件,或者使用文件系統操縱系統(如文件系統TS或促進。文件系統)來生成適當的目錄。不過,檢查文件打開是否成功始終是一個好主意。你能否驗證你在工作目錄中是否有正確的文件,或者它在你使用文件時有效? – jaggedSpire