Что нового

Обсуждение AutoIt бета-версий

Andrey_A

Новичок
Сообщения
104
Репутация
3
Обнаружил такой баг, попался намедни текст, который никак не хотел сравниваться, ни "=", ни "==", ни StringCompare() не помогали... Опытным путём выяснил, что это из-за символа ChrW(422) и его нижний регистр ChrW(640)
Может есть сторонние методы сравнение такого?

Код:
$sSym=ChrW(422)
$sSymLow=StringLower($sSym)
; $sSym=ChrW(640)
; $sSymLow=StringUpper($sSym)
If $sSym=$sSymLow Then
  MsgBox(4096,"","Равны без учёта регистра"&@CRLF&"$sSym =>"&$sSym&"<="&@CRLF&"$sSymLow =>"&$sSymLow&"<=")
Else
  MsgBox(4096,"","Не равны без учёта регистра"&@CRLF&"$sSym =>"&$sSym&"<="&@CRLF&"$sSymLow =>"&$sSymLow&"<=")
EndIf

If $sSym==$sSymLow Then
  MsgBox(4096,"","Равны с учётом регистра"&@CRLF&"$sSym =>"&$sSym&"<="&@CRLF&"$sSymLow =>"&$sSymLow&"<=")
Else
  MsgBox(4096,"","Не равны с учётом регистра"&@CRLF&"$sSym =>"&$sSym&"<="&@CRLF&"$sSymLow =>"&$sSymLow&"<=")
EndIf

If 0=StringCompare($sSym,$sSymLow)Then
  MsgBox(4096,"","Равны без учёта регистра"&@CRLF&"$sSym =>"&$sSym&"<="&@CRLF&"$sSymLow =>"&$sSymLow&"<=")
Else
  MsgBox(4096,"","Не равны без учёта регистра"&@CRLF&"$sSym =>"&$sSym&"<="&@CRLF&"$sSymLow =>"&$sSymLow&"<=")
EndIf

If 0=StringCompare($sSym,$sSymLow,1) Then
  MsgBox(4096,"","Равны с учётом регистра"&@CRLF&"$sSym =>"&$sSym&"<="&@CRLF&"$sSymLow =>"&$sSymLow&"<=")
Else
  MsgBox(4096,"","Не равны с учётом регистра"&@CRLF&"$sSym =>"&$sSym&"<="&@CRLF&"$sSymLow =>"&$sSymLow&"<=")
EndIf
 

InnI

AutoIT Гуру
Сообщения
4 239
Репутация
1 123
Andrey_A
Преобразуйте обе строки к одному регистру и сравнивайте
Код:
$s1 = "TeSt" & ChrW(422) & "ПрОвЕрКа"
$s2 = "tEsT" & ChrW(640) & "пРоВеРкА"

ConsoleWrite( StringUpper($s1) = StringUpper($s2) )
ConsoleWrite(@CRLF)
ConsoleWrite( StringCompare(StringLower($s1), StringLower($s2)) )
ConsoleWrite(@CRLF)
 
Верх