Page 1 of 1
batch to search for duplicate letters in string
Posted: 25 Jun 2021 04:45
by findstr
Hello!
If I am getting strings with 100 random symbols in them, how can I find duplicates in them?
From string "ABCDDEFGH##12345..." the script should return "DD" and "##",
from string "1223..." the script should return "22", and so on.
All strings are 100 characters in length:
"R#6-O0W9OXRi&FQSf1&ZcBJlwhE886D%2CZ+-L7B+Z2khH1UG3NbDC&&Xj@TvS!DVEA1RNuWmup^HJnp$O)d!Yh(8^cVWTbF5GxN"
In this string "88" and "&&" are duplicates.
Thanks!
Re: batch to search for duplicate letters in string
Posted: 25 Jun 2021 05:29
by aGerman
Note that I had to double the percent sign in the assignment to finally have
one in the string.
Code: Select all
@echo off
setlocal DisableDelayedExpansion
set "str=R#6-O0W9OXRi&FQSf1&ZcBJlwhE886D%%2CZ+-L7B+Z2khH1UG3NbDC&&Xj@TvS!DVEA1RNuWmup^HJnp$O)d!Yh(8^cVWTbF5GxN"
setlocal EnableDelayedExpansion
set "prev=!str:~0,1!"
for /l %%i in (1 1 99) do (
set "curr=!str:~%%i,1!"
if "!prev!"=="!curr!" echo !prev!!curr!
set "prev=!curr!"
)
pause
Steffen
Re: batch to search for duplicate letters in string
Posted: 25 Jun 2021 08:42
by Aacini
Code: Select all
@echo off
setlocal DisableDelayedExpansion
set "str=R#6-O0W9OXRi&FQSf1&ZcBJlwhE886D%%2CZ+-L7B+Z2khH1UG3NbDC&&Xj@TvS!DVEA1RNuWmup^HJnp$O)d!Yh(8^cVWTbF5GxN"
setlocal EnableDelayedExpansion
for /L %%i in (0,1,98) do (
if "!str:~%%i,2!" equ "!str:~%%i,1!!str:~%%i,1!" echo !str:~%%i,2!
)
Antonio
Re: batch to search for duplicate letters in string
Posted: 01 Jul 2021 12:49
by Jer
I did not see %% after running the batch codes. An extra step may be needed to catch double percents.
I added other special characters doubled. Quotes are not addressed; an odd number caused an error.
Jerry
Code: Select all
@echo off
set "str=R#**6-O0W9OXRi&FQSf1&ZcBJlwhE86D%%2CZ+-L7B+^Z2khH1<<UG>>3NbDC&&Xj@TvS!DVEA1RNuWmup^^HJnp$O)d!Yh(8^cVWTbF5GxN!!"
call :strLen str len
set /A "len-=1"
setlocal EnableDelayedExpansion
if "!str:%%=!" neq "!str!" echo %%%%
for /L %%i in (0,1,%len%) do (
if "!str:~%%i,2!" equ "!str:~%%i,1!!str:~%%i,1!" echo !str:~%%i,2!
)
endlocal & set "str=" & set "len="
goto :eof
:strLen string len -- returns the length of a string
:: -- string [in] - variable name containing the string being measured for length
:: -- len [out] - variable to be used to return the string length
:$source https://www.dostips.com
( SETLOCAL ENABLEDELAYEDEXPANSION
set "s__=A!%~1!"&rem keep the A up front to ensure we get the length and not the upper bound
rem it also avoids trouble in case of empty string
set "len=0"
for /L %%A in (12 -1 0) dO (
set /a "len|=1<<%%A"
for %%B in (!len!)Do if "!s__:~%%B,1!"=="" set /a "len&=~1<<%%A"
)
)
( ENDLOCAL & REM RETURN VALUES
IF "%~2" NEQ "" SET /a "%~2=%len%"
)
EXIT /b
>testdbls
%%
**
<<
>>
&&
^^
!!
Re: batch to search for duplicate letters in string
Posted: 01 Jul 2021 14:12
by aGerman
Jer wrote: ↑01 Jul 2021 12:49
I did not see %% after running the batch codes. An extra step may be needed to catch double percents.
In the original post is only one percent sign in the string. I doubled it in the SET statement to have
one percent sign in the resulting variable. Otherwise it would have been stripped entirely. So, it's technically correct if it doesn't find any double percent signs.
Steffen
Re: batch to search for duplicate letters in string
Posted: 01 Jul 2021 14:56
by Jer
aGerman, how does your code, typed out below, display %% for you and not for me?
c:\Temp\Dosbatch>testAG
88
&&
Press any key to continue . . .
c:\Temp\Dosbatch>type testag.bat
@echo off
setlocal DisableDelayedExpansion
set "str=R#6-O0W9OXRi&FQSf1&ZcBJlwhE886D%%2CZ+-L7B+Z2khH1UG3NbDC&&Xj@TvS!DVEA1RNuWmup^HJnp$O)d!Yh(8^cVWTbF5GxN"
setlocal EnableDelayedExpansion
set "prev=!str:~0,1!"
for /l %%i in (1 1 99) do (
set "curr=!str:~%%i,1!"
if "!prev!"=="!curr!" echo !prev!!curr!
set "prev=!curr!"
)
pause
Re: batch to search for duplicate letters in string
Posted: 01 Jul 2021 15:19
by aGerman
how does your code, typed out below, display %% for you and not for me?
It did not. And that's the point
Double percents in the assignment of
str yield a
single percent in the variable value. Why should it ever report double percent signs?
Steffen
Re: batch to search for duplicate letters in string
Posted: 01 Jul 2021 22:59
by Jer
Understood. I thought that a line of code to display %% if found doubled in the string might be helpful.
My thinking was that literal doubled percents, like all other characters, but maybe not quotes, are a target for identification.
Jerry