|
Здравствуйте. Вопрос: есть ли способ вывести строку без ведущих пробелов, используя исключительно Зачем оно мне? - перевожу приложение, в котором к исходной строке прибавляется какое-то неизвестное кол-во пробелов и из-за этого она ужасно выглядит в русской локализации. Доступ имею только к строке формата, вроде " UPD. строка формата: " %@ %@ KB %@ %@";
показано 5 из 14
показать еще 9
|
Вопрос был закрыт. Причина - "Вопрос исчерпан.". Закрывший - VioLet 24 Фев 14:34
|
Насколько правильно я понял вашу задачу, то могу посоветовать сделать так:
Браво! Но если у него не получится, может быть Вы сами это сделаете? Разницы-то никакой, что на C++ играть, что в вувузелы дуть.
(23 Фев 9:27)
alexlz
"есть ли способ вывести строку без ведущих пробелов, используя исключительно printf()....без предварительного ее изменения..".
(23 Фев 10:06)
VioLet
А можно задать(ненавязчивый!) вопрос? А почему именно "printf()" ?
(23 Фев 10:20)
Asen
Потому что в нем используется точно такая же система форматирования текста при выводе.
(23 Фев 10:25)
VioLet
|
|
@VioLet, увы-увы... увы лимит комментариев исчерпал. Поэтому в ответе не ответ, а одна идея (догадка) по поводу Вашей проблемы. Если Вы делаете русский текст в кодировке UTF-8, а программа форматирования по @ не знает о многобайтных кодировках, то она может рассчитывать размер выходного поля по количеству байт выводимой строки (объекта). Отсюда и пробелы. В этом случае можно попробовать однобайтную кодировку русского языка (cp1251, iso8859-5 или koi8-r) и должным образом описать локализацию. Например (для *nix) попробовать export LANG=... Или что-то иное, но в направлении управления кодировкой. Да нет, что вы, пробелы специально подставляются приложением, чтобы сделать "красивый" по-колоночный вывод в текстовое поле.
(24 Фев 5:04)
VioLet
Сочувствую. Переводить а английского на русский с сохранением длины текста -- просто развлечение для мазохистов.
(24 Фев 5:17)
alexlz
@alexlz Ладно бы еще одно это. Так нужно еще конструкцию "XX file/files" превратить в "файлов: ХХ". Из-за одного этого вся таблица летит к чертям. Ну а использовать "XX файл(-а/-ов)" не хочется..
(24 Фев 5:32)
VioLet
Теперь все понятно. Без переделки приложения (возможности редактирования как форматов, так и текстов сообщений) не обойтись.
(24 Фев 11:51)
avp
|
Увы, нету такого. Если не нарушает красоту (таблицы, допустим), то можно вывод обрабатывать на предмет подчистки, напр:
yourgreatprogramm | sed -e 's,\s\+, ,g'Очень жаль. Просто мне дана только сама строка формата, которая подставляется в уже работающее приложение. Ну и приложение GUI'йное, так что никакой пост-обработки (printf() написал, так как используется сходная система форматирования).
Достаточно просто передать указатель на первый символ-не-пробел.
Или используя "find_first_of" из библиотеки string.
@mikillskegg & @Asen ... имея доступ только к содержимому форматной строки.
В вопросе говорится о неизвестном количестве пробелов. Интересно, откуда они берутся ?
Или все таки в каждом из форматов разное, но определенное количество пробелов в начале ? Если второе, то интересно, как отреагирует GUI, если заменить их на '\r' (возврат каретки) ? Или (если пробелов в формате нет) в начало выводимого текста '\r' добавить, или несколько '\b' ...
--
Автор, а приведите несколько форматов и Ваших текстов, которые по ним печатаются. Может, что путное в голову придет.
Ну если гуй отрабатывает backspace, то кто его знает.
Я попробовал в GnomeTerminal ubuntu и в консоли виндоуз '\r' в начале текста, выводимого по формату "%40s", т.е. текст позиционируется вправо в поле из 40 символов.
Так вот, все перед '\r' исчезает, текст после '\r' выводится с начала строки.
Попробуйте.
Впервые вижу '@' в C форматах, как символ редактирования. Вы уверены, что форматирование не производится какой-то собственной функцией, по неизвестным нам правилам ?
@avp это Objective-C, а %@ - тип для строковых объектов. Правила известны - такие же как у printf().
Возможно, помогут уязвимости, то есть передача выполнения кода на сторону.
@cool это несколько не мой случай - все, что я могу сделать - это как-то изменить саму строку формата. Да и то, это будет костыль, но пока разработчик не торопится что-то менять, так что этот вариант был бы неплох.
В C printf("==%10s==",XAXA); выведет
а printf("==%-10s==",XAXA); выведет
Могу лишь (по аналогии) предложить попробовать заменить %@ на %-@.
К сожалению, с Objective-C не знаком, попробовать не на чем.
@avp увы, не работает. Видимо, придется все таки ждать фиксов от разработчика.
Спасибо всем за советы.