Russian Qt Forum
Ноябрь 25, 2024, 19:57
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Вопросы новичков
>
Перевод каретки на новую строку
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Перевод каретки на новую строку (Прочитано 14385 раз)
alik
Гость
Перевод каретки на новую строку
«
:
Март 05, 2015, 10:08 »
Здравствуйте,
Работаю с текстовыми файлами, где по окончанию строки необходимо делать переход на новую строку добавлением известной комбинации из char:
QString EndOfLine = char(13) + char(13) + char(10);
При попытке компиляции идет ругань:
"invalid conversion from 'int' to 'const char*' [-fpermissive]"
Что я делаю не так?
«
Последнее редактирование: Март 05, 2015, 16:11 от alik
»
Записан
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: Перевод коретки на новую строку
«
Ответ #1 :
Март 05, 2015, 10:13 »
Вас endl и "\n" не устраивают?
Записан
__Heaven__
Джедай : наставник для всех
Offline
Сообщений: 2130
Re: Перевод коретки на новую строку
«
Ответ #2 :
Март 05, 2015, 10:21 »
В вашем случае можно так
Код
C++ (Qt)
char
nl
[
]
=
{
13
,
13
,
10
,
0
}
;
QString
string
(
nl
)
;
Записан
torwig
Самовар
Offline
Сообщений: 134
Re: Перевод коретки на новую строку
«
Ответ #3 :
Март 05, 2015, 10:25 »
Вы пытаетесь будто сделать:
QString EndOfLine = 36;
Как уже написали выше, используйте
QString EndOfLine("\n") или QString EndOfLine("\r\n").
Записан
alik
Гость
Re: Перевод коретки на новую строку
«
Ответ #4 :
Март 05, 2015, 10:26 »
Цитата: __Heaven__ от Март 05, 2015, 10:13
Вас endl и "\n" не устраивают?
В соответствии с протоколом в текст нужно добавлять 13 13 10
А что реально добавляется при использовании endl и "\n" ?
Записан
deMax
Хакер
Offline
Сообщений: 600
Re: Перевод коретки на новую строку
«
Ответ #5 :
Март 05, 2015, 10:39 »
Так не будет ругаться, правда и выдаст char(33)
QString EndOfLine(char(13) + char(13) + char(10));
Можно так, и еще множеством способов.
QString c = QString() + QChar(13) + QChar(13) + QChar(10);
QString c("\x0D\x0D\x0A");
................................
«
Последнее редактирование: Март 05, 2015, 10:43 от deMax
»
Записан
alik
Гость
Re: Перевод коретки на новую строку
«
Ответ #6 :
Март 05, 2015, 10:58 »
Цитата: deMax от Март 05, 2015, 10:39
Так не будет ругаться, правда и выдаст char(33)
QString EndOfLine(char(13) + char(13) + char(10));
Можно так, и еще множеством способов.
QString c = QString() + QChar(13) + QChar(13) + QChar(10);
QString c("\x0D\x0D\x0A");
................................
Компилятор позволяет записать так:
QString Result = char(13);
Result += char(13);
Result += char(10)
Но будет ли при этом три чара (13, 13 и 10) или будет один равный 36 ?
Записан
gil9red
Administrator
Джедай : наставник для всех
Offline
Сообщений: 1805
Re: Перевод коретки на новую строку
«
Ответ #7 :
Март 05, 2015, 11:07 »
Цитата: alik от Март 05, 2015, 10:58
Цитата: deMax от Март 05, 2015, 10:39
Так не будет ругаться, правда и выдаст char(33)
QString EndOfLine(char(13) + char(13) + char(10));
Можно так, и еще множеством способов.
QString c = QString() + QChar(13) + QChar(13) + QChar(10);
QString c("\x0D\x0D\x0A");
................................
Компилятор позволяет записать так:
QString Result = char(13);
Result += char(13);
Result += char(10)
Но будет ли при этом три чара (13, 13 и 10) или будет один равный 36 ?
Будет 3.
Операция += это добавление символа к строке, поэтому будет 3 символа )
Записан
https://github.com/gil9red
https://ru.stackoverflow.com/users/201445/gil9red
deMax
Хакер
Offline
Сообщений: 600
Re: Перевод коретки на новую строку
«
Ответ #8 :
Март 05, 2015, 11:09 »
Цитата: alik от Март 05, 2015, 10:58
Компилятор позволяет записать так:
QString Result = char(13);
Result += char(13);
Result += char(10)
Но будет ли при этом три чара (13, 13 и 10) или будет один равный 36 ?
Будет нормально, тоже самое но короче: QString c = QString(char(13)) + char(13) + char(10);
или QString c = (QString)char(13) + char(13) + char(10);
Цитата: alik от Март 05, 2015, 10:26
В соответствии с протоколом в текст нужно добавлять 13 13 10
А что реально добавляется при использовании endl и "\n" ?
Зависит от платформы, под линуксом перенос строки вообще один символ. Под виндой возможно ваши 13,13,10 и есть. Т.е. сборка под андроид/линукс нарушит вам протокол.
p.s. я бы оставил QString c("\x0D\x0D\x0A");
еще так можно, хотя и жутко QString c = QString("%1%1%2").arg(char(13)).arg(char(10));
«
Последнее редактирование: Март 05, 2015, 11:15 от deMax
»
Записан
alik
Гость
Re: Перевод коретки на новую строку
«
Ответ #9 :
Март 05, 2015, 11:24 »
Большое спасибо всем за помощь !
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Перевод коретки на новую строку
«
Ответ #10 :
Март 05, 2015, 11:50 »
Цитата: alik от Март 05, 2015, 10:08
.. известной комбинации из char:
QString EndOfLine = char(13) + char(13) + char(10);
Известные комбинации такие
Платформа Mac: char(10) '\r'
Платформа Windows: char(13), char(10) "\r\n"
Платформа Uinix: char(13) '\n'
Считается хорошим тоном корректное чтение всех возможных концов строк, т.к. файл может быть создан на любой платформе. Многие редакторы имеют опцию какой конец строки использовать
Записан
alik
Гость
Re: Перевод коретки на новую строку
«
Ответ #11 :
Март 05, 2015, 12:37 »
Цитата: Igors от Март 05, 2015, 11:50
Цитата: alik от Март 05, 2015, 10:08
.. известной комбинации из char:
QString EndOfLine = char(13) + char(13) + char(10);
Известные комбинации такие
Платформа Mac: char(10) '\r'
Платформа Windows: char(13), char(10) "\r\n"
Платформа Uinix: char(13) '\n'
Считается хорошим тоном корректное чтение всех возможных концов строк, т.к. файл может быть создан на любой платформе. Многие редакторы имеют опцию какой конец строки использовать
То есть разумно использовать следующую функцию:
QString EndOfLine()
{
// Returns string of going on new line
switch (local_OS)
{
osWINDOWS : return "\x0D\x0D\x0A"; break;
osLINUX : return "\x0D"; break;
osANDROID : return '\n'; break;
}
}
Как узнать в какой ОС запущена программа ?
Записан
Johnik
Крякер
Offline
Сообщений: 339
Re: Перевод коретки на новую строку
«
Ответ #12 :
Март 05, 2015, 12:49 »
Цитата: alik от Март 05, 2015, 10:26
В соответствии с протоколом в текст нужно добавлять 13 13 10
А что реально добавляется при использовании endl и "\n" ?
Цитата: alik от Март 05, 2015, 12:37
QString EndOfLine()
{
// Returns string of going on new line
switch (local_OS)
{
osWINDOWS : return "\x0D\x0D\x0A"; break;
osLINUX : return "\x0D"; break;
osANDROID : return '\n'; break;
}
}
Что вам нужно? Если у вас какой-то бинарный протокол (как в одном из ваших сообщений выше), то вам так и надо указывать 13, 13, 10.
Если работаете с текстовыми данными, то в Qt новую строку принято обозначать '\n', что соответствует коду 10.
Почитать тут:
http://doc.qt.io/qt-5/qfile.html#reading-files-directly
http://doc.qt.io/qt-5/qtextstream.html#endl
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Перевод коретки на новую строку
«
Ответ #13 :
Март 05, 2015, 14:56 »
Цитата: alik от Март 05, 2015, 12:37
То есть разумно использовать следующую функцию:
QString EndOfLine()
{
// Returns string of going on new line
switch (local_OS)
{
osWINDOWS : return "\x0D\x0D\x0A"; break;
osLINUX : return "\x0D"; break;
osANDROID : return '\n'; break;
}
}
Как узнать в какой ОС запущена программа ?
На Вындоуз \x0D\x0A, т.е. один char(13) и один char(10), не надо упорно лепить два 13 (0x0D).
Не надо ничего узнавать про платформу. Вы пишете - все равно всем не угодите, т.к. файлы могут передаваться с одной платформы на другую. Ну и пишите как на Вындоуз. Если читаете используя Qt ф-ции - тоже не волнует т.к. наверняка Qt само разберется с разными концами строк. Вот если читаете текст посимвольно - тогда придется учесть. Ну до этого еще надо дожить.
Edit: и в названии темы исправьте кОретку - ну уж очень кАряво
Записан
deMax
Хакер
Offline
Сообщений: 600
Re: Перевод коретки на новую строку
«
Ответ #14 :
Март 05, 2015, 16:58 »
Цитата: alik от Март 05, 2015, 12:37
Как узнать в какой ОС запущена программа ?
Как то так:
#if defined(Q_OS_WIN)
#elif defined(Q_WS_X11)
№elif defined(Q_WS_LINUX)
Записан
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...