带有行尾的 C++ 字符串用于归档空行

标签 c++ string csv line-endings

我在做什么:

我正在使用 javascript 读取 csv 文件并将它们发送到 C++ 网络服务器/后端以将文件上传到服务器。此文件通过 HTTP POST 请求作为字符串发送到网络服务器。

在 javascript 中,文件被正确读取并发送到带有 \r\n 行尾的 C++。

问题是:

将字符串放入服务器上新创建的 .csv 文件时

std::string data = // the parsed http body string
std::ofstream file;
file.open(UPLOAD_DIR + "\\" + filename);
file << data;

file.close();

文件已创建,字符串已放入其中,但每个换行符后都有空行。在 C++ 中调试时,字符串仍然有 \r\n 行结尾。

我尝试过的:

我试图用 \n 替换 \r\n 结尾,但空行仍然存在。完全删除换行符显然只是将字符串写入文件而没有任何换行符。


如何将字符串放入没有空行的文件中?

Ps:csv 字符串在 C++ 调试器中看起来像这样: enter image description here

编辑 这是字符串的一部分:

Time [s];Temperature [C]\r\n0;1150\r\n0.1;1150\r\n0.2;1150\r\n0.3;1150\r\n0.4;1150\r\n0.5;1150\r\n0.6;1150\r\n0.7;1150\r\n0.8;1150\r\n0.9;1150\r\n1;1150\r\n1.1;1150\r\n1.2;1150\r\n1.3;1150\r\n1.4;1150\r\n1.5;1150\r\n1.6;1150\r\n1.7;11

(我知道,带分号的 CSV 不符合 RFC)

最佳答案

问题可能出在您认为的地方。

The file is created and the string is put into it but with empty lines after every linebreak.

不,该文件是一个非常好的 CSV 文件。大多数实现(甚至那些允许不同的定界符和引号字符的实现)都同意行分隔符是 2 个字符 "\r\n"

所以问题仅来自您用来显示文件的工具或您尝试阅读它的方式。

这只是我的意见,但我强烈建议您不要从 csv 文件中删除 '\r' 字符。

我认为正确的方法是将文件作为二进制文件处理。这样,您就不会依赖操作系统对 '\n' 在将其写入文件时应如何转换的解释。

关于带有行尾的 C++ 字符串用于归档空行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54946039/

相关文章:

c++ - 如何通过 Chrome Pepper C API 创建和打开文件系统?

c++ - 未记录的链接器问题 : "ld returned 253 exit status"

c++ - 将 Matlab 中的以下 Matrix 代码转换为 C++ 中的 Eigen 的问题

ruby-on-rails - 从字符串中删除所有 a 标签

c - 如何在C中备份字符串

java - 在java中对二维数组进行排序(对所有字母进行排序)

ios - 在 Swift 中上传 Google Drive 上的电子表格文件

javascript - Google GeoCharts 数据未加载

c++ - 为什么 MPI 在 Visual Studio 2015 中不起作用?

python - 我们可以从 csv 文件中自动检测给定列的日期时间格式吗?