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