如何将printf流输出重定向到.csv文件?

时间:2017-10-13 12:53:05

标签: c++ c csv data-stream

从传感器中,有一个看起来像一系列元组的数据流:

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 =     (
    );
}

4 个答案:

答案 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重定向到文件中。