我在做什么:
我正在使用 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
结尾,但空行仍然存在。完全删除换行符显然只是将字符串写入文件而没有任何换行符。
如何将字符串放入没有空行的文件中?
编辑 这是字符串的一部分:
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/