Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;带行尾的字符串以文件空行 我在做什么: 我用JavaScript读取CSV文件,并将它们发送到C++ WebServer /后端,将文件上传到服务器。此文件通过HTTP POST请求以字符串形式发送到Web服务器 在JavaScript中,文件被正确读取并发送到C++,代码为< > \r\n行结束。 问题是:_C++_String_Csv_Line Endings - Fatal编程技术网

C++;带行尾的字符串以文件空行 我在做什么: 我用JavaScript读取CSV文件,并将它们发送到C++ WebServer /后端,将文件上传到服务器。此文件通过HTTP POST请求以字符串形式发送到Web服务器 在JavaScript中,文件被正确读取并发送到C++,代码为< > \r\n行结束。 问题是:

C++;带行尾的字符串以文件空行 我在做什么: 我用JavaScript读取CSV文件,并将它们发送到C++ WebServer /后端,将文件上传到服务器。此文件通过HTTP POST请求以字符串形式发送到Web服务器 在JavaScript中,文件被正确读取并发送到C++,代码为< > \r\n行结束。 问题是:,c++,string,csv,line-endings,C++,String,Csv,Line Endings,将字符串放入服务器上新创建的.csv文件时 std::string data = // the parsed http body string std::ofstream file; file.open(UPLOAD_DIR + "\\" + filename); file << data; file.close(); (我知道,带分号的CSV不符合RFC)提供的评论解决了这个问题: 我现在只是从字符串中删除每个\r,而不是用\r\n替换出现的\r\n,这就解决了我的问题。提供的

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

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

file.close();

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

提供的评论解决了这个问题:
我现在只是从字符串中删除每个
\r
,而不是用
\r\n
替换出现的
\r\n
,这就解决了我的问题。

提供的注释解决了这个问题:
我现在只是从字符串中删除每一个
\r\n
,而不是用
\n
替换每一个
\r
,这就解决了我的问题。

问题可能不是你想的那样

创建文件并将字符串放入其中,但每次换行后都会有空行

不,该文件是一个非常好的CSV文件。大多数实现(即使是允许不同分隔符和引号字符的实现)都同意行分隔符为2个字符
“\r\n”

因此,问题只来自于您用来显示文件的工具或您试图读取文件的方式

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


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

问题可能不在您认为的位置

创建文件并将字符串放入其中,但每次换行后都会有空行

不,该文件是一个非常好的CSV文件。大多数实现(即使是允许不同分隔符和引号字符的实现)都同意行分隔符为2个字符
“\r\n”

因此,问题只来自于您用来显示文件的工具或您试图读取文件的方式

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


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

我试图通过写入来重新创建您的文件写入
std::of流文件(“mine.txt”);

文件我试图通过写入重新创建您的文件
std::of流文件(“mine.txt”);

文件你能在你的问题中粘贴一小段示例字符串,这样我们就可以复制它吗?它看起来像是给你“解析的http正文字符串”的“解析器”,不做换行翻译。@Someprogrammerdude这是可能的。数据是用C++中的RAPIDJSON解析的JSON对象的一部分发送的。您的意思是,字符串在写入文件之前可能格式不正确?我无法使用coliru并显示在屏幕上,或使用MSV并写入文件。请记住,在Windows上,换行符是
“\r\n”
。写入以文本模式打开的文件时,系统会将
“\n”
转换为
“\r\n”
。现在,如果您的字符串已经是
“\r\n”
,那么将写入文件的是
“\r\r\n”
。您能在您的问题中粘贴一小段示例字符串,以便我们可以复制它吗?它看起来像是“解析器”,它提供“解析的http正文字符串”,而不进行换行翻译。@Someprogrammerdude,这是可能的。数据是用C++中的RAPIDJSON解析的JSON对象的一部分发送的。您的意思是,字符串在写入文件之前可能格式不正确?我无法使用coliru并显示在屏幕上,或使用MSV并写入文件。请记住,在Windows上,换行符是
“\r\n”
。写入以文本模式打开的文件时,系统会将
“\n”
转换为
“\r\n”
。现在,如果您的字符串已经是
“\r\n”
,那么将写入文件的是
“\r\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
1       49
2       50
3       51
        32
        13
a       97
b       98
c       99
        32
        13
        32

        10
8       56
9       57
0       48