从传感器中,有一个看起来像一系列元组的数据流:
if (sensor_data) {
mpu.readSensorData(sensor);
float ax = sensor[0] * 250.0 / 368.0;
float ay = sensor[1] * 250.0 / 368.0;
float az = sensor[2] * 250.0 / 368.0;
pc.printf("\nsensor: (%f, %f, %f)\n", ax,ay,az);
}*/
wait(0.5);
到目前为止,我将所有这些数据打印到这样的终端中:
printf
如何将上述sensorX, sensorY, sensorZ
-0.560303, -0.627686, 0.467468
-0.557312, -0.626587, 0.468262
-0.557800, -0.625854, 0.465820
-0.555420, -0.625061, 0.470520
...
-0.555725, -0.625732, 0.473877
输出元组重定向到单个.csv文件中,如下所示:
{
resultCount = 0;
results = (
);
}
答案 0 :(得分:5)
您可以使用“>”在运行程序时在命令行中。
示例:
./ program> output.csv
使用printf()函数打印的任何内容都将写入output.csv文件。
或者您可以使用fprintf()函数将所有数据写入文件。
FILE* file = fopen("output.csv", "w");
if (file != NULL)
{
if (sensor_data)
{
mpu.readSensorData(sensor);
float ax = sensor[0] * 250.0 / 368.0;
float ay = sensor[1] * 250.0 / 368.0;
float az = sensor[2] * 250.0 / 368.0;
fprintf(file, "\nsensor: (%f, %f, %f)\n", ax,ay,az);
}
}
答案 1 :(得分:2)
你有不同的选择来做你要求的事。
选项1(更多C ++)
使用ofstream
选项2(C)
你可以像printf一样使用fprintf函数,给它一个用fopen()创建的文件句柄。
选项3(无编程)
如果您的控制台输出已完全按照您希望的那样在CSV文件中使用输出重定向到文件:
C:\ yourprogram> output.csv
答案 2 :(得分:1)
打开文件并使用fprintf,将文件句柄传递给它。
FILE *myfile = fopen ("myfilename.csv", "w" );
然后在你的循环中:
pc.printf (myfile, "\nsensor: (%f, %f, %f)\n", ax,ay,az);
然后在最后:
fclose (myfile);
当然,这是C风格的解决方案。如果您想使用C ++类型的接口(将其标记为两者),请查看使用iostreams。
答案 3 :(得分:1)
如果您不介意关闭输出到终端,可以使用
frepoen("file.csv", "w", stdout);
这会将您的printf
输出重定向到文件中。然后,您可以使用printf编写数据。
您还可以使用./your_program > file.csv
之类的shell重定向将stdout重定向到文件中。