Get platform specific end of line character in C++/Qt

血红的双手。 提交于 2020-01-11 08:59:15

问题


Is there anything for getting right end-of-line symbol for any platform? I mean, I can use \n for Windows and Unix if I want to write EOL to file, but there is also \r\n and this would be significant if I'll do searching in binary data.

So, I need something like Environment.NewLine in C# and it should be some class and not trick with #ifdef Q_OS_WIN32....

Use case is reading from QTextStream all data and split it by new line. Anyway, if QTextStream or QString::split is smart enough to handle \n correctly on any platform, I want to know about thing I asked.


回答1:


Try

QString::split(QRegularExpression{R"-((\r\n?|\n))-"})

This uses a C++11 raw string literal to create a regex that matches all three possibilities:

  • CR only (Mac)
  • CR+LF (Win)
  • LF (Unix)

If you can not use C++11, you will have to manually escape the regex:

"(\\r\\n?|\\n)"

That should do the trick.




回答2:


When you are writing a file in text mode, the "\n" character should be reinterpreted as whatever is appropriate for that system. For Windows, that means CRLF (carriage return, line feed), on Unix, it's just LF alone, and the Macintosh standard is a CR by itself.

When you are reading, be ready to end a line at either one of those characters, but if you find a carriage return, check to see if there is a line feed immediately after it, and if there is, consider it part of the same line.




回答3:


You can try using the std::endl




回答4:


I use this bit of code:

    const QChar newline(QChar('\n'));
    const QChar cr('\r');
    #ifdef __linux__ 
        const QChar eol = newline);
    #elif _WIN32
        const QString eol = QString(cr) + QString(newline);
    #else
        const QChar eol = cr;
    #endif

I have not tested the else branch because I do very little work on systems that aren't either linux or windows (mac for example), so one would have to test that one's self.

The linux, and windows branches work well for me for splitting strings into lines on windows and linux.



来源:https://stackoverflow.com/questions/25206775/get-platform-specific-end-of-line-character-in-c-qt

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!