Как сделать разделитель тысяч

Добавил пользователь Евгений Кузнецов
Обновлено: 04.10.2024

с пробелами после 3 символов
по 3 знака, можно ли это автоматически сделать?

_MBK_

Пикирующий бомбардировщик

Ответ: Как автоматически в Word разбить пробелами большие числа по 3 символа? Напр. 2303004,1 на 2 303 004,1

Для начала перебираете все слова в тексте на предмет число это или нет. Такой вот функцией, например:

Declare Function StrSpn Lib "SHLWAPI" Alias _
"StrSpnW" (ByVal psz As Long, ByVal pszSet As Long) As Long

Public Function IsDecimal (ByVal sString As String) As Boolean
Const DECIMAL_NUM As String = "0123456789,-"
Dim iPos

iPos = StrSpn (StrPtr(sString), StrPtr(DECIMAL_NUM)
' если возвращается значение, не равное длине исходной строки,
' то значит найдены символы, не являющиеся цифрами
IsDecimal = (iPos = Len(sString))
End Function

Потом в от позиции запятой до конца слова в обе стороны через каждые 3 символа вставлять пробел.

формат для итога нашел, а для самих суммируемых чисел - никак.

Есть ли какое-либо прямое решение (без макросов и пр.)?
Отрицательный ответ тоже устроит - не буду дальше тратить время;)

2 Ответ от Alex_Gur 03.04.2013 15:33:38

Добрый день, svojak,

Стандартного решения вашего вопроса, как мне кажется в Word нет (хотя форматирование чисел хорошо отработано в Excel).

Могу предложить вам несколько решений, но все они мне кажутся достаточно малоэффективными:

Удобной и приятной работы в Word!
Перевести спасибо на Яндекс кошелёк - 41001162202962; на WebMoney - R581830807057.

3 Ответ от svojak 03.04.2013 15:53:59

Спасибо за оперативный ответ

Добрый день, svojak,
1) Вставить в файл Word таблицу Excel, и уже в Excel установить нужный вам формат.

Это я использую довольно часто, но в данном случае пытался избежать.

А код у этого символа есть? тогда можно попробовать сделать макрос из похожей темы здесь.

Вот это пока подошло, как временный вариант - хотелось бы только как-нибудь ускорить ввод, хотя бы чтобы сразу попадать в окошко "Формула". Может кнопка какая есть?

Это первое sed работает только если номер ровно 9 цифр. printf Не работает на Zsh. Таким образом, второй sed ответ, вероятно, лучший.

Вы можете это сделать echo 123456789 | awk '' (что, очевидно, не всегда работает в Linux. Но отлично работает в AIX и Solaris)

bash «S printf поддерживает почти все , что можно сделать в printf функции C

printf из coreutils сделаю то же самое

@msb Кажется, это зависит от вашей системы vsnprintf . В системе GNU / Linux, glibc поддерживает его, по крайней мере, с 1995 года.

Примечание. Printf использует разделитель тысяч для вашей текущей локали , который может быть запятой, точкой или вообще ничего. Вы можете, export LC_NUMERIC="en_US" если вы хотите, чтобы запятые.

Вы можете использовать numfmt:

Обратите внимание, что numfmt - это не утилита POSIX, а часть GNU coreutils.

Спасибо за совет по группировке. Во втором примере (--g) вы хотели написать что-то вроде, -d, --grouping так как двойные переносы требуют длинных опций?

--g у меня отлично работает вместо того --grouping , т. е. numfmt --g 1234567890 и numfmt --grouping 1234567890 делает то же самое. Это очень полезная маленькая утилита.

С наилучшими пожеланиями . ура, дрл

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

Я думаю, что здесь отрицательный голос, потому что вы не объяснили, что делает команда. ОП попросил BASH / AWK альтернативу, поэтому он, возможно, не использовал PERL раньше. В любом случае, лучше всего объяснить, что делает команда, особенно для однострочников.

@AnthonyK - спасибо за вероятное объяснение. Я добавил комментарии, чтобы кратко объяснить, как это работает. Я думаю, что альтернативные решения часто бывают полезны, но ваша точка зрения о том, что возможно не использовался Perl, отмечается . ура

Я попробовал предложения sed и python на этой странице. Perl-скрипт был единственным, который работал для всего файла. Файл был заполнен текстом и цифрами.

С некоторыми awk реализациями:

"%'"'"'d\n" is: "% (одинарные кавычки) (двойные кавычки) (одинарные кавычки) (двойные кавычки) (одинарные кавычки) d \ n "

Это будет использовать сконфигурированный разделитель тысяч для вашей локали (обычно , в английских локалях, пробел во французском, . испанском / немецком . ). То же, что возвращено locale thousands_sep

Обычный вариант использования для меня - изменить вывод командного конвейера так, чтобы десятичные числа печатались с тысячами разделителей. Вместо того, чтобы писать функцию или скрипт, я предпочитаю использовать технику, которую я могу настроить на лету для любого вывода из конвейера Unix.

Я нашел printf (предоставленный Awk) самый гибкий и запоминающийся способ для достижения этой цели. Символ апостроф / одинарная кавычка указывается POSIX как модификатор для форматирования десятичных чисел и имеет то преимущество, что он учитывает локаль, поэтому он не ограничен использованием символов запятой.

При запуске команд Awk из оболочки Unix могут возникнуть трудности при вводе символа одинарных кавычек внутри строки, разделенной одинарными кавычками (чтобы избежать расширения оболочки позиционных переменных, например, $1 ). В этом случае я считаю, что наиболее читаемый и надежный способ ввести символ одинарных кавычек - это ввести его в виде восьмеричной escape-последовательности (начиная с \0 ).

Имитированный вывод конвейера, показывающий, какие каталоги используют больше всего дискового пространства:

Спасибо @ TSJNachos117 Самое сложное - помнить, что восьмеричное кодирование для символа апостроф \047 .

awk и bash иметь хорошие встроенные решения, основанные на том printf , как описано в других ответах. Но сначала sed .

Очевидно, что нам нужно повторять этот процесс, чтобы добавить достаточно запятых.

В sed , то t команда определяет метку , которая будет прыгнули в случае , если последняя s/// команда была успешно выполнена . Поэтому я определяю метку :restart для того, чтобы она отскочила назад.

Вот демоверсия bash (на ideone ), которая работает с любым количеством цифр:

Digit Grouping при копировании данных из вида
Когда переносишь из вида данные в MS Office или Lotus Symphony, то digit grouping сохраняется.


Разделитель тысяч в ячейке с текстом
Здравствуйте, ув. форумчане. Завис на данной проблемке. Как можно вставить число в ячейку с текстом.

спасибо но надо на Си, забыл подписать

Как сменить системные параметры: десятичный разделитель и разделитель в дате?
Как сменить системные параметры: 'десятичный разделитель' и 'разделитель в дате'? Подозреваю.

string grouping()
Есть большой проект. С недавних пор начала вылетать ошибка времени выполения, причем при выполнении.

задание на 5 тысяч, или, оно же, на 10 тысяч. сделайте выбор
Привет. Задание платное. Бюджет - 5 или 10 тысяч рублей (поясню два сценария). Поясню как могу.


GROUPING SETS - ошибка в запросе
Помогите, пожалуйста, разобраться, почему выдает ошибку при выполнении запроса: определить число.

Сборка ПК для игр за 85 тысяч + монитор за 20 тысяч
Приветствую. Планирую собрать ПК в пределах 85 тысячи рублей. Дополнительно выбираю мониторв.

Составить функцию grouping с одним аргументом - списком
Составить функцию grouping с одним аргументом - списком, что группирует смежные элементы списка в.

Читайте также: