| Description: |
call:strLen string len |
| Script: |
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34.
|
:strLen string len -- returns the length of a string via binary search, maximum length 1023
:: -- string [in] - variable name containing the string being measured for length
:: -- len [out] - variable to be used to return the string length
:$created 20081122 :$changed 20081122 :$categories StringOperation
:$source http://www.dostips.com
SETLOCAL ENABLEDELAYEDEXPANSION
set "str=A!%~1!"&rem keep the A up front to ensures we get the length and not the upper bound
rem it also avoids trouble in case of empty string
set len=0
set /a "n=1<<10"&rem 2^10=1024
set /a "n>>=1, len|=n"
if "!str:~%len%!"=="" set /a "len&=~n"
set /a "n>>=1, len|=n"
if "!str:~%len%!"=="" set /a "len&=~n"
set /a "n>>=1, len|=n"
if "!str:~%len%!"=="" set /a "len&=~n"
set /a "n>>=1, len|=n"
if "!str:~%len%!"=="" set /a "len&=~n"
set /a "n>>=1, len|=n"
if "!str:~%len%!"=="" set /a "len&=~n"
set /a "n>>=1, len|=n"
if "!str:~%len%!"=="" set /a "len&=~n"
set /a "n>>=1, len|=n"
if "!str:~%len%!"=="" set /a "len&=~n"
set /a "n>>=1, len|=n"
if "!str:~%len%!"=="" set /a "len&=~n"
set /a "n>>=1, len|=n"
if "!str:~%len%!"=="" set /a "len&=~n"
set /a "n>>=1, len|=n"
if "!str:~%len%!"=="" set /a "len&=~n"
( ENDLOCAL & REM RETURN VALUES
IF "%~2" NEQ "" SET "%~2=%len%"
)
EXIT /b
|
|