Rückgabe String aus Subroutine geht nicht !
Hallo allerseits,
ich kämpfe damit einen String aus einer Subroutine an die aufrufende Routine zurückzugeben.
Kann mir jemand sagen was ich falsch mache ?
String aus der Subroutine soll über call-paramter %3 zurückgegeben werden.
Bin für jeden Hinweis dankbar.
Grüsse
Randolph
ich kämpfe damit einen String aus einer Subroutine an die aufrufende Routine zurückzugeben.
Kann mir jemand sagen was ich falsch mache ?
String aus der Subroutine soll über call-paramter %3 zurückgegeben werden.
@ECHO off
SETLOCAL
SET "searchstring1='CONTACT_FORMAT_GREETING_COMMON',"
SET "searchstring2=CONTACT_FORMAT_GREETING_MR',"
SET "linestart=START"
FOR /f "delims=" %%i IN (inputfile.txt) DO (
SET "textline=%%i"
SETLOCAL enabledelayedexpansion
if "!textline!" neq "!textline:%searchstring1%=!" (
CALL :findString "!textline!" %searchstring1% %linestart%
echo !linestart!
REM Write the modified line
) ELSE (
REM Write the unmodified line
)
if "!textline!" neq "!textline:%searchstring2%=!" (
CALL :findString "!textline!" %searchstring2% %linestart%
echo !linestart!
REM Write the modified line
) ELSE (
REM Write the unmodified line
)
ENDLOCAL
)
GOTO :ENDE
:findString -- returns position of first occurrence of a string in another string
SETLOCAL ENABLEDELAYEDEXPANSION
set "mainstring=%1"
set "substring=%2"
Set "rest=!mainstring:*%substring%=!"
echo Rest: %rest%
Set "anfang=!mainstring:%rest%=!"
echo Anfang: %anfang%
ENDLOCAL &set "%3=!anfang!"
GOTO :EOF
:ENDE
ECHO Done^^!
Bin für jeden Hinweis dankbar.
Grüsse
Randolph
Please also mark the comments that contributed to the solution of the article
Content-Key: 217580
Url: https://administrator.de/contentid/217580
Printed on: April 23, 2024 at 22:04 o'clock
8 Comments
Latest comment
@ rubberman
Grüße
bastla
Ansonsten weiß ich nicht was das Ding eigentlich macht ...
Das soll die Position eines Substrings finden, damit danach ab dieser Position der Zeileninhalt ersetzt werden kann (siehe dazu auch den Ausgangsthread) ...Grüße
bastla
ENDLOCAL &set "%3=!anfang!"
cmd
Interpreter wertet von links nach rechts aus.Mit dem Kommando
ENDLOCAL
wird der Geltungsbereich von EnableDelayedExpansion
beendet.Das heisst, wenn der Interpreter
!anfang!
erreicht, gelten die erweiterten Syntaxregeln mit dem Ausrufezeichen gar nicht mehr.Aus
!anfang!
ist dann wieder eine 'ordinäre' Zeichenkette geworden.lg.