Russian Qt Forum
Ноябрь 24, 2024, 00:47 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО]Спецсимволы в строках.  (Прочитано 7030 раз)
Bepec
Гость
« : Август 21, 2017, 22:49 »

Приветствую заглянувших.
Собственно наверно самый простой вопрос в моей карьере.

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

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

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

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

Вывод: replace кошерен.
« Последнее редактирование: Сентябрь 05, 2017, 22:03 от Bepec » Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #1 : Август 21, 2017, 23:51 »

время ввода пользователя во много раз дольше обработки, т.о. замена вполне подойдет

а зачем он так странно вводит, может ему qtextedit дать для ввода ?
Записан
Bepec
Гость
« Ответ #2 : Август 22, 2017, 01:20 »

Ну это в textEdit и вводит Улыбающийся
Утилита для написания скриптов для обработки данных.
По сути представляет собой упрощенный интерфейс regexp, однако действия разбиты на простейшие и нет необходимости в знании синтаксиса, заодно добавляет несколько отсутствующих у regexp возможностей. 
Потому работа с спецсимволами достаточно важна.

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

Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #3 : Август 24, 2017, 06:15 »

Верес, пробуй replace(), который не использует QRegExp. Должно работать очень быстро
Записан

Юра.
Bepec
Гость
« Ответ #4 : Август 24, 2017, 12:16 »

Епте, вы издеваетесь или пробуете демонстрировать остроумие?
Тогда почитайте последнюю строку первого сообщения Грустный

PS не ожидал.
Записан
ssoft
Программист
*****
Offline Offline

Сообщений: 584


Просмотр профиля
« Ответ #5 : Август 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 для символов отличных от латиницы.
Записан
Bepec
Гость
« Ответ #6 : Август 24, 2017, 14:13 »

Эм... ssoft - в QString utf16 хранится овродя. Так что если ты туда запихнёшь необработанную строку, там вместо "привет мир!" получится "НепонимающийНепонимающий Непонимающий!". И ничего из ? достать ты не сможешь.
Потому преобразование надо проводить до присвоения QString'у Улыбающийся
Записан
titan83
Гость
« Ответ #7 : Сентябрь 05, 2017, 18:15 »

Может тут посмотреть?
http://doc.qt.io/qt-5/qstring.html#simplified
Правда на тему обработки таба есть сомнения)
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #8 : Сентябрь 05, 2017, 19:57 »

Может тут посмотреть?
http://doc.qt.io/qt-5/qstring.html#simplified
Правда на тему обработки таба есть сомнения)

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

P.S. по теме - кошерно, если не париться. Если париться, то нужно пройтись сквозь строку и при каждом \ заменять на соответствующий escape. Будет быстрее.
« Последнее редактирование: Сентябрь 05, 2017, 19:58 от Alex Custov » Записан
Bepec
Гость
« Ответ #9 : Сентябрь 05, 2017, 22:03 »

Ну, replace в принципе то же самое делает. Тем более QString по индексу не пройдешь, там QCharRef'ы полезут, и всё сведётся к тому же replace, на мой взгляд, только самопальному Веселый

Темку закрываю, Вывод - replace кошерен.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.076 секунд. Запросов: 23.