如何将 printf 流输出重定向到.csv文件
How to redirect printf stream output to a .csv file?
从传感器,有一个看起来像元组序列的数据流:
sensor: (-0.560303, -0.627686, 0.467468)
sensor: (-0.561829, -0.626160, 0.466125)
sensor: (-0.556091, -0.623352, 0.471497)
sensor: (-0.558411, -0.625977, 0.468811)
sensor: (-0.557312, -0.626587, 0.468262)
sensor: (-0.557800, -0.625854, 0.465820)
sensor: (-0.563599, -0.624512, 0.464722)
sensor: (-0.555847, -0.623230, 0.467163)
sensor: (-0.557861, -0.621033, 0.468811)
sensor: (-0.555420, -0.625061, 0.470520)
sensor: (-0.559082, -0.626221, 0.475891)
sensor: (-0.559814, -0.625977, 0.466309)
sensor: (-0.561768, -0.624756, 0.467163)
sensor: (-0.551941, -0.628906, 0.469055)
sensor: (-0.556946, -0.626465, 0.471313)
sensor: (-0.558533, -0.626038, 0.469421)
sensor: (-0.557922, -0.625061, 0.467285)
sensor: (-0.562622, -0.623657, 0.469971)
sensor: (-0.554443, -0.625977, 0.465759)
sensor: (-0.559265, -0.626282, 0.471619)
sensor: (-0.558716, -0.625427, 0.471375)
sensor: (-0.559143, -0.626526, 0.467468)
sensor: (-0.554749, -0.626221, 0.468079)
sensor: (-0.554626, -0.622681, 0.467285)
sensor: (-0.557983, -0.625549, 0.475464)
sensor: (-0.555603, -0.626343, 0.466980)
sensor: (-0.559570, -0.625854, 0.470398)
sensor: (-0.556946, -0.626587, 0.466858)
sensor: (-0.557373, -0.626526, 0.470093)
sensor: (-0.558716, -0.629272, 0.464905)
sensor: (-0.555725, -0.625732, 0.473877)
sensor: (-0.560608, -0.626282, 0.469238)
sensor: (-0.556335, -0.626221, 0.467590)
sensor: (-0.558777, -0.623840, 0.468994)
到目前为止,我将所有这些数据打印到如下所示的终端中:
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
输出元组重定向到单个.csv文件中,如下所示:
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
使用 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(更多C++)
使用流
备选案文2(C)
你可以像printf一样使用fprintf函数,给它一个用fopen()创建的文件句柄。
选项 3(无编程)
如果您的控制台输出已与 CSV 文件中的预期完全一致,请使用输出重定向到文件:
C:\您的程序>输出.csv
打开一个文件并使用 fprintf,将文件句柄传递到其中。
FILE *myfile = fopen ("myfilename.csv", "w" );
然后在循环中:
pc.printf (myfile, "nsensor: (%f, %f, %f)n", ax,ay,az);
然后在最后:
fclose (myfile);
当然,这是C式的解决方案。如果您想使用C++类型的接口(您将其标记为两者),请考虑使用 iostreams。
如果您
不介意关闭输出到终端,您可以使用
frepoen("file.csv", "w", stdout);
这会将printf
输出重定向到文件中。然后,您可以使用 printf 写入数据。
您还可以使用 shell 重定向(如 ./your_program > file.csv
)将标准输出重定向到文件中。
相关文章:
- 如何将stdout重定向到stderr
- 编写时C++中的输入重定向问题
- 获取通过重定向传入的输入文件的名称?
- Windows C++重定向库
- 写入文件 a.txt,而终端重定向到文件 b.txt
- 使用 dup2() 进行输入重定向
- 将 clangd stderr 重定向到文件而不是控制台
- 如何在C++中获取重定向网页的URL
- 将标准输出重定向到ostream
- 如何撤消此代码上的 cin 重定向?
- 使用重定向标准处理子进程中的 kbhit
- 是否可以将子进程的 stdout 重定向到父进程中的另一个文件?
- 重定向输入和输出时如何处理主文件I/O?
- 如何将HTTPS流量重定向到本地主机:443上的代理?
- 使用重定向命令从 stdin 读入的字符串"<"输入文件未正确附加
- 尝试在 Windows 上重定向 stdout 和 stderr——_fileno(stdout) 返回 -2
- 可以将Boost消息队列文件重定向到用户指定的位置
- 在程序执行期间从标准输出重定向到自定义流
- 如何将 printf 流输出重定向到.csv文件
- 如何使用SetFilePointer重定向到.csv文件的顶部