Всем добрый...
На офф форуме встретил 2 функции https://www.autoitscript.com/forum/topic/196260-three-letter-increment/?tab=comments#comment-1407241
Там не стал писать, т.к. аглицкого не знаю
Функции неплохие, но есть 2 проблемы
1) _Base26ToDec - выдаёт всегда 0 при 'A', 'AA', 'AAA', 'AAAAAAAA' и.т.д.
т.е. должно быть
0 - "A"
25 - "Z"
26 - "AA"
и.т.д
2) _Dec2Base26 - пропускает 'AA', 'AAA' ... при получении счётчика в цикле
Если кто может подправить эти функции было бы здорово - я к ним и слева и справа подходил, но что-то никак, борьба со смещением сместила мозг)))
Спасибо... Решил вопрос
На офф форуме встретил 2 функции https://www.autoitscript.com/forum/topic/196260-three-letter-increment/?tab=comments#comment-1407241
Там не стал писать, т.к. аглицкого не знаю
Функции неплохие, но есть 2 проблемы
1) _Base26ToDec - выдаёт всегда 0 при 'A', 'AA', 'AAA', 'AAAAAAAA' и.т.д.
т.е. должно быть
0 - "A"
25 - "Z"
26 - "AA"
и.т.д
2) _Dec2Base26 - пропускает 'AA', 'AAA' ... при получении счётчика в цикле
Если кто может подправить эти функции было бы здорово - я к ним и слева и справа подходил, но что-то никак, борьба со смещением сместила мозг)))
Код:
#include <Array.au3>
; Modified functions from https://www.autoitscript.com/forum/topic/194949-array-troubles/?do=findComment&comment=1398101
$str='AA' ; 'ZZ'
$Res=_Base26ToDec($str)
MsgBox(4096,"Переменная $Res",$Res)
Local $sNum = "Z"
$Res=_Base26ToDec($sNum)
MsgBox(4096,"Переменная $Res",$Res)
MsgBox(0, "", $sNum & " + 1 = " & _Dec2Base26(_Base26ToDec($sNum) +1) & @CRLF)
; Parameter $iLen - Number of characters in returned string.
Func _Dec2Base26($iDec, $iLen = 6)
Local $aBase26 = StringSplit("ABCDEFGHIJKLMNOPQRSTUVWXYZ", "", 2)
Local $sRet = ""
$n=Int(Log($iDec) / Log(26))
For $i = 0 To Int(Log($iDec) / Log(26))
$sRet = $aBase26[Mod($iDec / 26 ^ $i, 26)] & $sRet
Next
Return StringRight("AAAAAAAAAAAA" & $sRet, $iLen)
EndFunc
Func _Base26ToDec($str)
Local $iRet, $a = StringSplit($str, "", 2), $UB = UBound($a) - 1
For $i = 0 To $UB
$iRet += 26 ^ ($UB - $i) * (StringInStr("ABCDEFGHIJKLMNOPQRSTUVWXYZ", $a[$i], 1) - 1)
Next
Return $iRet
EndFunc
Сообщение автоматически объединено:
Спасибо... Решил вопрос
Последнее редактирование: