Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Bepec от Август 21, 2017, 22:49



Название: [РЕШЕНО]Спецсимволы в строках.
Отправлено: Bepec от Август 21, 2017, 22:49
Приветствую заглянувших.
Собственно наверно самый простой вопрос в моей карьере.

Есть ли у QString функция, которая преобразует \n \t \r в спецсимволы?

Т.е. пользователь вводит строчку "\tHello\n\tworld!" и получаем
Код:
\tHello\n\tworld!

И надо её обработать, чтобы получилось:
Код:
    Hello
    world!

Вариант с реплейсом работает, но кошерно ли это?

Вывод:  replace кошерен.


Название: Re: Спецсимволы в строках.
Отправлено: qate от Август 21, 2017, 23:51
время ввода пользователя во много раз дольше обработки, т.о. замена вполне подойдет

а зачем он так странно вводит, может ему qtextedit дать для ввода ?


Название: Re: Спецсимволы в строках.
Отправлено: Bepec от Август 22, 2017, 01:20
Ну это в textEdit и вводит :)
Утилита для написания скриптов для обработки данных.
По сути представляет собой упрощенный интерфейс regexp, однако действия разбиты на простейшие и нет необходимости в знании синтаксиса, заодно добавляет несколько отсутствующих у regexp возможностей. 
Потому работа с спецсимволами достаточно важна.

Просто уникальные личности вроде igors поселили ростки неуверенности в моей душе :D Дескать обычная замена это страшно плохо :)



Название: Re: Спецсимволы в строках.
Отправлено: lit-uriy от Август 24, 2017, 06:15
Верес, пробуй replace(), который не использует QRegExp. Должно работать очень быстро


Название: Re: Спецсимволы в строках.
Отправлено: Bepec от Август 24, 2017, 12:16
Епте, вы издеваетесь или пробуете демонстрировать остроумие?
Тогда почитайте последнюю строку первого сообщения :(

PS не ожидал.


Название: Re: Спецсимволы в строках.
Отправлено: ssoft от Август 24, 2017, 12:54
Могу предложить что-то типа такого

Код
C++ (Qt)
QString text = ...; // "\tHello\n\tworld!"
 
QByteArray utf8_text = QString::toUtf8( text );
QByteArray formated_utf8_text( utf8_text.count(), '\0' );
qsnprintf( formated_utf8_text.data(), formated_utf8_text.count(), utf8_text.constData() );
 
QString formated_text = QString::fromUtf8( formated_utf8_text );
 

Код не проверял - это только идея). Возня с utf8 для символов отличных от латиницы.


Название: Re: Спецсимволы в строках.
Отправлено: Bepec от Август 24, 2017, 14:13
Эм... ssoft - в QString utf16 хранится овродя. Так что если ты туда запихнёшь необработанную строку, там вместо "привет мир!" получится "?????? ???!". И ничего из ? достать ты не сможешь.
Потому преобразование надо проводить до присвоения QString'у :)


Название: Re: Спецсимволы в строках.
Отправлено: titan83 от Сентябрь 05, 2017, 18:15
Может тут посмотреть?
http://doc.qt.io/qt-5/qstring.html#simplified
Правда на тему обработки таба есть сомнения)


Название: Re: Спецсимволы в строках.
Отправлено: Alex Custov от Сентябрь 05, 2017, 19:57
Может тут посмотреть?
http://doc.qt.io/qt-5/qstring.html#simplified
Правда на тему обработки таба есть сомнения)

ты сам-то читал? :D Вересу не нужно удалять спецсимволы, ему нужно заменить текстовое представление на спецсимволы.

P.S. по теме - кошерно, если не париться. Если париться, то нужно пройтись сквозь строку и при каждом \ заменять на соответствующий escape. Будет быстрее.


Название: Re: Спецсимволы в строках.
Отправлено: Bepec от Сентябрь 05, 2017, 22:03
Ну, replace в принципе то же самое делает. Тем более QString по индексу не пройдешь, там QCharRef'ы полезут, и всё сведётся к тому же replace, на мой взгляд, только самопальному :D

Темку закрываю, Вывод - replace кошерен.