Page 1 of 1
Search and replace string inside text file - new-line fix
Posted: 06 May 2015 11:28
by BoQsc
Hey everybody, i need some help again.
I have this script:Code: Select all
@echo off
setlocal enabledelayedexpansion
set INTEXTFILE=test.txt
set OUTTEXTFILE=test_out.txt
set SEARCHTEXT=bath
set REPLACETEXT=hello
for /f "tokens=1,* delims=ΒΆ" %%A in ( '"type %INTEXTFILE%"') do (
SET string=%%A
SET modified=!string:%SEARCHTEXT%=%REPLACETEXT%!
echo !modified! >> %OUTTEXTFILE%
)
del %INTEXTFILE%
rename %OUTTEXTFILE% %INTEXTFILE%
Everything is nice and clear with it, but i'm thinking if there is way to modify script, so that in the output file the new-lines (those that are made using Enter button) won't be deleted?
Re: Search and replace string inside text file - new-line fi
Posted: 06 May 2015 11:49
by Squashman
Re: Search and replace string inside text file - new-line fi
Posted: 06 May 2015 21:01
by foxidrive
I'm not sure what he means, squashman.
BoQsc, can you please describe it a little more?
EDITED again: Ahh, you want to preserve the blank lines.
Re: Search and replace string inside text file - new-line fi
Posted: 07 May 2015 04:24
by BoQsc
foxidrive wrote:I'm not sure what he means, squashman.
BoQsc, can you please describe it a little more?
EDITED again: Ahh, you want to preserve the blank lines.
Exactly, thanks for the comment good guy foxidrive, that corrects me.
Squashman, it seems that one symbol (
^) is added after i parse the text file.
Is there any way to make it happen to disappear from output?
This is original file:
Code: Select all
asdkasldjlkasdklasdplease
asmdasmdlplease please
(for /f "delims=" %%i in ('findstr /n "" "%textfile%"') do (
This is text file after parse:
Code: Select all
asdkasldjlkasdklasdhello
asmdasmdlhello hello
(for /f "delims=" %%i in ('findstr /n "^" "%textfile%"') do (
Error is in this line:
(for /f "delims=" %%i in ('findstr /n "
^" "%textfile%"') do (
Re: Search and replace string inside text file - new-line fi
Posted: 07 May 2015 04:53
by foxidrive
It works ok here. Show your code and explain your problem again.
I
edited it to include a blank line as well.
Code: Select all
d:\abc>a.bat
1:asdkasldjlkasdklasdhello
2:
3:asmdasmdlhello hello
d:\abc>type a.bat
@echo off
set "textfile=123.txt"
(
echo asdkasldjlkasdklasdhello
echo(
echo asmdasmdlhello hello
)>"%textfile%"
(for /f "delims=" %%i in ('findstr /n "^" "%textfile%"') do ( echo %%i ) )
Re: Search and replace string inside text file - new-line fi
Posted: 07 May 2015 07:58
by BoQsc
Here is script that i use now:
Code: Select all
@echo off
:substitute OldStr NewStr File -- substitutes a string in a text file
:: -- OldStr [in] - string to be replaced
:: -- NewStr [in] - string to replace with
:: -- File [in] - file to be parsed
:$created 20060101 :$changed 20101122 :$categories FileManipulation
:$source http://www.dostips.com
SETLOCAL DISABLEDELAYEDEXPANSION
del output.txt
set "OldStr=baty"
set "NewStr=monty"
set filetoparse=%0
for /f "tokens=1,* delims=]" %%A in ('"type %filetoparse%|find /n /v """') do (
set "line=%%B"
if defined line (
call set "line=echo.%%line:%OldStr%=%NewStr%%%"
for /f "delims=" %%X in ('"echo."%%line%%""') do %%~X >> output.txt
) ELSE echo. >> output.txt
)
::baty
EXIT /b
it must scan batch file and replace ::baty with ::monty
The output.txt looks like this:
Code: Select all
@echo off
:substitute OldStr NewStr File -- substitutes a string in a text file
:: -- OldStr [in] - string to be replaced
:: -- NewStr [in] - string to replace with
:: -- File [in] - file to be parsed
:$created 20060101 :$changed 20101122 :$categories FileManipulation
:$source http://www.dostips.com
SETLOCAL DISABLEDELAYEDEXPANSION
del output.txt
set "OldStr=monty"
set "NewStr=monty"
set filetoparse=%0
set "line=%%B"
if defined line (
call set "line=echo.%%line:%OldStr%=%NewStr%%%"
for /f "delims=" %%X in ('"echo."%%line%%""') do %%~X >> output.txt
) ELSE echo. >> output.txt
)
::monty
EXIT /b
whole line
for /f "tokens=1,* delims=]" %%A in ('"type %filetoparse%|find /n /v """') do (has gone...
also, how to make that
OldStr=baty will stay untouched while
::baty changing to
::monty?
Re: Search and replace string inside text file - new-line fi
Posted: 14 May 2015 08:53
by BoQsc
foxidrive wrote:It works ok here. Show your code and explain your problem again.
I
edited it to include a blank line as well.
Code: Select all
d:\abc>a.bat
1:asdkasldjlkasdklasdhello
2:
3:asmdasmdlhello hello
d:\abc>type a.bat
@echo off
set "textfile=123.txt"
(
echo asdkasldjlkasdklasdhello
echo(
echo asmdasmdlhello hello
)>"%textfile%"
(for /f "delims=" %%i in ('findstr /n "^" "%textfile%"') do ( echo %%i ) )
The echo method is not what i'm searching for. I can't add echo to each line, cause it brokes some things.
Anyone have any idea on how to remove these line numbers?
Original:
Code: Select all
@echo off
asdkasldjlkasdklasdhello
asmdasmdlhello hello
(for /f "delims=" %%i in ('findstr /n "^" "%textfile%"') do test
pause
Output:
Code: Select all
1:@echo off
2:asdkasldjlkasdklasdtest
3:
4:asmdasmdltest test
5:
6: (for /f "delims=" %%i in ('findstr /n "^" "%textfile%"') do test
7:
8: pause
The code i use is here:
Code: Select all
@echo off &setlocal
set "search=hello"
set "replace=test"
set "textfile=batch_code.bat"
set "newfile=new.bat"
(for /f "delims=" %%i in ('findstr /n "^" "%textfile%"') do (
set "line=%%i"
setlocal enabledelayedexpansion
set "line=!line:%search%=%replace%!"
echo(!line!
endlocal
))>"%newfile%"
type "%newfile%"
Re: Search and replace string inside text file - new-line fi
Posted: 16 May 2015 02:29
by foxidrive
BoQsc wrote:The echo method is not what i'm searching for. I can't add echo to each line, cause it brokes some things.
Anyone have any idea on how to remove these line numbers?
It was only to demonstrate that the syntax in the
FOR loop works fine,
and you had removed the tokens part - and I used what you had posted.
If you don't show the real input and output text, or explain it well, it's hard to give you code that will work.
See here:
viewtopic.php?f=3&t=6108