1

Тема: AHK: Почему при сравнении совпадают разные строки?


str1 := "99999999999999999999"
str2 := "40817495375183257123"
if(str1 == str2)
	MsgBox, Номера счетов совпадают!
else
	MsgBox, Номера счетов не совпадают!

Почему-то строки совпадают, хотя они разные! В чем дело? И как правильно сравнить эти строки?

2

Re: AHK: Почему при сравнении совпадают разные строки?

Переменные, значения которых состоят только из цифр, при операции сравнения интерпретируются как числа, а так как данные числа превышают максимально допустимые, они приводятся к виду:

str1 := "99999999999999999999"
str2 := "40817495375183257123"
MsgBox, % str1 + 0 . "`n"
        . str2 + 0

Для сравнения в данном случае можно применить такой трюк:

str1 := "99999999999999999999"
str2 := "40817495375183257123"
if (str1 . "" == str2 . "")
   MsgBox, Номера счетов совпадают!
else
   MsgBox, Номера счетов не совпадают!
Documents пишет:

Numeric strings: A string of digits (or any other supported number format) is automatically interpreted as a number when a math operation or comparison requires it. In AutoHotkey v1, comparisons are performed numerically if both values are numeric even if both values are strings. However, a quoted string (or the result of concatenating with a quoted string) is never considered numeric when used directly in an expression.

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

3

Re: AHK: Почему при сравнении совпадают разные строки?

teadrinker понял, спасибо!
Подскажите пожалуйста еще, как можно отличать цифру от любого другого символа?
Вот например есть файлы .txt с кучей текста. И где-то среди этого текста есть номер счета. Я знаю только первые 5 цифр счета. Они будут постоянны для любого счета.
Чтобы его вычленить оттуда, мне нужно отличать цифры от других символов.
Подскажите, есть способ?

4

Re: AHK: Почему при сравнении совпадают разные строки?

RegExMatch()

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

5

Re: AHK: Почему при сравнении совпадают разные строки?

Проще было так решить:

str1 := "99999999999999999999"
str2 := "40817495375183257123"
If (str1 ~= str2)
 MsgBox, Номера счетов совпадают!
Else
 MsgBox, Номера счетов не совпадают!
Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

6

Re: AHK: Почему при сравнении совпадают разные строки?

Ну, я бы так не стал решать:

str1 := "99999999999999999999"
str2 := "999"
If (str1 ~= str2)
 MsgBox, Номера счетов совпадают!
Else
 MsgBox, Номера счетов не совпадают!
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7

Re: AHK: Почему при сравнении совпадают разные строки?

Всем спасибо! Скрипт готов. AutoHotKey - просто находка! Настолько облегчает мне работу)

8

Re: AHK: Почему при сравнении совпадают разные строки?

Сомневаюсь, что кол-во чисел в данном случае будут разные.

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

9

Re: AHK: Почему при сравнении совпадают разные строки?

__Михаил__, если бы вам нужно было выбрать номер, на который нужно было бы отправить крупную сумму денег, думаю, не были бы так уверены.

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

10

Re: AHK: Почему при сравнении совпадают разные строки?

Через АХК такие опасные манипуляции бы не совершал.
А так, очень плохо, что очевидные вещи в АХК не реализованы как в других языках.

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

11

Re: AHK: Почему при сравнении совпадают разные строки?

__Михаил__ пишет:

Через АХК такие опасные манипуляции бы не совершал.

А причём тут AHK? RegEx, который в данном случае вы использовали — это отдельный модуль, он везде одинаково работает. Выстрелить себе в ногу можно при желании, используя любой ЯП.
Конкретно данная проблема решена в v2.

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

12

Re: AHK: Почему при сравнении совпадают разные строки?

if (str1 . "" == str2 . "")

Еще проще так:

if (str1 "" = str2)