1

Тема: AHK: Точки в числах

Всем здравствуйте, не подскажете, нет ли такой функции или кода, чтобы, например у нас если число - 1001, нам надо, чтобы скрипт автоматически ставил точку там, то есть так:
Мы вводим число: 2004000
Скрипт автоматически должен расставить точки: 2.004.000
Всем спасибо заранее!

2

Re: AHK: Точки в числах

Такая функция есть, знакомьтесь: RegExReplace().

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

3 (изменено: sanniauto, 2017-10-21 10:16:30)

Re: AHK: Точки в числах

Да, я знаю про эту функцию, но как именно реализовать её?
То есть числа то могут быть от ∞ до ∞. А RegExReplace только может заменить конкретную степень числа.

4

Re: AHK: Точки в числах

sanniauto пишет:

То есть числа то могут быть от ∞ до ∞.

Не совсем это понял, как это от ∞ до ∞?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

5 (изменено: sanniauto, 2017-10-21 10:16:53)

Re: AHK: Точки в числах

teadrinker, ну то есть любые.

6

Re: AHK: Точки в числах

Что значит любые? Отрицательные, нецелые тоже могут быть?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

7 (изменено: sanniauto, 2017-10-21 10:17:18)

Re: AHK: Точки в числах

Ну как объяснить, например пользователь вводит в InputBox совершенно любое число, а ему в Msgbox приходит это же число, только с расставлеными точками.

8

Re: AHK: Точки в числах

Такое можно реализовать с помощью RegExReplace?

9 (изменено: teadrinker, 2017-10-21 09:48:32)

Re: AHK: Точки в числах

Ну то-есть он, например, такое может ввести: -0,000012345 ?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

10 (изменено: sanniauto, 2017-10-21 10:18:06)

Re: AHK: Точки в числах

Да, совершенно любое число, только без точек.

11 (изменено: sanniauto, 2017-10-21 10:20:37)

Re: AHK: Точки в числах

В принципе, можно ограничить пользователя только целыми и положительными числами, то есть пользователь вводит целое и положительное число без точек, а скрипт выдает output с точками.

12

Re: AHK: Точки в числах

sanniauto, в Ваших сообщениях хронически не хватает знаков препинания в конце предложений. Пройдитесь по всем сообщениям и исправьте!

13

Re: AHK: Точки в числах

ypppu, исправил.

14

Re: AHK: Точки в числах

Ну это же совсем просто:

number := "1234500,123450000000"
MsgBox, % RegExReplace(number, "\d(?=(\d{3})+(,|$))|\d{3}(?!(.*,|$))", "$0.")
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

15 (изменено: teadrinker, 2017-10-21 10:26:30)

Re: AHK: Точки в числах

sanniauto пишет:

В принципе, можно ограничить пользователя только целыми и положительными числами, то есть пользователь вводит целое и положительное число без точек, а скрипт выдает output с точками.

Тогда ещё проще:

number := 10000000000
MsgBox, % RegExReplace(number, "\d(?=(\d{3})+$)", "$0.")
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

16

Re: AHK: Точки в числах

Формат числа с разрядностью http://forum.script-coding.com/viewtopic.php?id=12159

17

Re: AHK: Точки в числах

А я уже и забыл, что тема такая была. Но здесь немного другое, в том варианте точка уже могла быть в качестве десятичной.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

18

Re: AHK: Точки в числах

teadrinker, спасибо! Ну на счёт просто - RegExReplace(number, "\d(?=(\d{3})+$)", "$0.") - тут я вообще не понял что как работает.

19

Re: AHK: Точки в числах

Расшифровывается так: если после цифры есть любое количество троек цифр после которых конец строки, такую цифру заменяем на неё же с точкой.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

20

Re: AHK: Точки в числах

teadrinker, хорошо, спасибо!

21

Re: AHK: Точки в числах

sanniauto пишет:

ypppu, исправил.

Это ещё не всё. Отредактируйте и здесь тоже:
http://forum.script-coding.com/viewtopi … 50#p120250;
http://forum.script-coding.com/viewtopi … 49#p120249;
http://forum.script-coding.com/viewtopi … 93#p120193;
http://forum.script-coding.com/viewtopi … 91#p120191;
http://forum.script-coding.com/viewtopi … 87#p120187;
http://forum.script-coding.com/viewtopi … 82#p120182.

22

Re: AHK: Точки в числах

sanniauto, если вам еще непонятны регулярные выражения, то такие задачи можно решать через SubStr:

number := "1234500", Start := -2, Length := 3
loop
{
   if StrLen(number)>A_Index*Length
   {
      Newnumber := "." SubStr(number, Start, Length) Newnumber
      start-=3
   }
   else
   {
      Newnumber := SubStr(number, 1, StrLen(number)-(A_Index-1)*Length) Newnumber
      break
   }
}
msgbox % Newnumber

23 (изменено: teadrinker, 2017-10-21 15:45:33)

Re: AHK: Точки в числах

red2881 пишет:

Формат числа с разрядностью http://forum.script-coding.com/viewtopic.php?id=12159

Кстати, в моём варианте \G не используется, а вот в таком случае оно не поможет:

Var =
(
Hello, World!
AHK 1234567890.0006789 AutoHotkey
12345000
Bye!
1234567890.0006789
)

Result := RegExReplace(Var, "\G\d+?(?=(?:\d{3})+(?:\D|$))", "$0 ")
MsgBox %Result%

Кто корректно разобьёт пробелами числа в этом примере, в том числе после точки? У меня пока не вышло.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

24

Re: AHK: Точки в числах

Я отредактировал и исправил.

25

Re: AHK: Точки в числах

teadrinker пишет:

Кто корректно разобьёт пробелами числа в этом примере, в том числе после точки? У меня пока не вышло.

А что должно быть на выходе, задачу не понял.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64, AutoHotkey_L v1.1.30.03 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

26

Re: AHK: Точки в числах

Чтобы числа, оставаясь в тексте, были поразрядно разбиты пробелами, в том числе и дробная часть:

Var =
(
Hello, World!
AHK 1 234 567 890.000 678 9 AutoHotkey
12 345 000
Bye!
1 234 567 890.000 678 9
)

Оказывается, этот мой код некорректный:

number := "1234500,1234567"
MsgBox, % RegExReplace(number, "\d(?=(\d{3})+(,|$))|\d{3}(?!(.*,|$))", "$0.")
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

27

Re: AHK: Точки в числах

А нужно ли прям-таки все числа так разбивать?
Например, год будет выглядеть странно: родился в 1 980 году.

28

Re: AHK: Точки в числах

Ну это же просто задача. Для начала можно попробовать заставить корректно работать предыдущий пример, у меня пока тоже не получилось.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

29

Re: AHK: Точки в числах

Ты имеешь в виду корректно - это так?

number := "1234500,1234567"
MsgBox, % RegExReplace(number, "\d(?=(\d{3})+,)|\d{3}(?!(.*,|$))", "$0.")

30

Re: AHK: Точки в числах

Нет, дробная часть может не существовать.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

31

Re: AHK: Точки в числах

Решилось:

nums := [         1
        ,       123
        ,      1234
        ,    123456
        ,   1234567
        ,   1234567.1
        ,   1234567.123
        ,   1234567.1234
        ,   1234567.123456
        ,  12345678.12345678
        ,  12345678.123456789
        , 123456789.123456789 ]
        
for k, v in nums
   MsgBox, % RegExReplace(v, "x) \d{1,3}(?=(\d{3})+\.) | \G(\A[^\.]*)?+.*?\K\d{3}(?!(\.|$)) | \d(?=(\d{3})+$)", "$0,")
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

32 (изменено: teadrinker, 2017-11-09 22:12:46)

Re: AHK: Точки в числах

И проще:

nums := [          1
        ,       -123
        ,       1234
        ,    -123456
        ,    1234567
        ,   -1234567.1
        ,    1234567.123
        ,   -1234567.1234
        ,    1234567.123456
        ,  -12345678.12345678
        ,   12345678.123456789
        , -123456789.123456789 ]
        
for k, v in nums
   MsgBox, % RegExReplace(v, "x) ^-?\d??\K\d(?=(\d{3})+(\.|$)) | (?1)(?!(\.|$))", "$0,")
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg