Page 1 of 1

IPO - batch

Posted: 25 Jan 2017 18:26
by xThule
Hi guys,

i've got a little problem and i dont know where i failed cuz every tutorial i read didnt answer my specific question

everything works alone but together only the first part works

the plan:
take file 1 (file.txt)
read the lines
cut them
write them in file 2 (file_2.txt)


line syntax 123456789012testxxtest123456789012
i only want the "testxxtest" part

i got large files with up to 10000 lines with syntaxes look like the above
numbers in the front numbers in the back and a alphanumerical code in the middle
for the following steps i only need the code in the middle
re writing the existing output from the db is not possible
so i have to take the db output, manually change the whole txt (delete the unnecessary characters)
and then upload it again for further use


if necessary re write my batch code completely but please comment it =)

Code: Select all

@echo off
title EVA

FOR /F %%i in (file.txt) do (
set str=%%i
set str=%str:~11,-12%
echo.%str%>>"file_2.txt"
)
echo EVA has done her work
pause

Re: IPO - batch

Posted: 25 Jan 2017 20:25
by Squashman
You said the code you need to keep is alphanumeric meaning it contains numbers and letters. How are we supposed to know where to start and stop?

Regardless you are inside a code block so you need to use delayed expansion.

Re: IPO - batch

Posted: 25 Jan 2017 23:47
by Aacini
You have not explained what is your problem, nor what is the format of the input file (an example is certainly not a description), and this phrase: "everything works alone but together only the first part works" is not clear at all!

However, if you want to eliminate the first 12 and last 12 characters from each line, then your code is close:

Code: Select all

@echo off

rem Next line enable Delayed Expansion, that is needed to get the value of a variable
rem that was modified inside a FOR loop (using exclamation-marks instead of percent-signs)
setlocal EnableDelayedExpansion

title EVA

(FOR /F %%i in (file.txt) do (
set str=%%i
echo !str:~11,-12!
)) >"file_2.txt"
rem It is much faster to execute just one redirection for the whole file,
rem than execute one redirection *for each line*

echo EVA has done her work
pause

If this is not what you want, then you have to explain your problem more clearly...

Antonio

Re: IPO - batch

Posted: 26 Jan 2017 04:40
by xThule
Squashman wrote:You said the code you need to keep is alphanumeric meaning it contains numbers and letters. How are we supposed to know where to start and stop?

Regardless you are inside a code block so you need to use delayed expansion.


ok maybe it wasnt clear enough the syntax is everytime the same 12 numbers then the code and then again 12 numbers

Aacini wrote:You have not explained what is your problem, nor what is the format of the input file (an example is certainly not a description), and this phrase: "everything works alone but together only the first part works" is not clear at all!

However, if you want to eliminate the first 12 and last 12 characters from each line, then your code is close:


ok sorry my problem is that it doesnt cut the lines and only writes echo is off in the files

the file i work with is a simple txt that i got from the db with lines explained above and i have to reupload a simple txt
the program in the background does the rest but i cant change the db output atm so i needed this workaround

but your code solved my problem

last question it doesnt matter how long the file is ? (line count)

thx for the fast response
thx for the help
and sorry for that it wasnt clear enough explained

Re: IPO - batch

Posted: 26 Jan 2017 17:26
by rodrigolima
Hello xThule

try this:

Code: Select all

@echo off
cls

:: Delete Files before start process
if exist "%~dp0output.txt" del "%~dp0output.txt"
if exist "%~dp0pipeline.txt" del "%~dp0pipeline.txt"

SetLocal EnableDelayedExpansion

::generate text file to get file names
dir /b text*.txt>pipeline.txt

:: Loop through Files
for /f %%a in (pipeline.txt) do (
echo Current File: %~dp0%%a
::Get File Content(Just 1 Line)
set /p str=<%~dp0%%a

:: Replace [0-9] to Empty
set str=!str:0=!
set str=!str:1=!
set str=!str:2=!
set str=!str:3=!
set str=!str:4=!
set str=!str:5=!
set str=!str:6=!
set str=!str:7=!
set str=!str:8=!
set str=!str:9=!

:: Get Current File Original Texto NumbersTextNumbers
set /p str1=<%~dp0%%a

:: Generate Log
:: FileName#BeforeReplace#AfterReplace(Text Extraction)
echo %%a#!str1!#!str!>>output.txt
)
endLocal

goto:eof


To test script, create 2 text files:

text.txt
Content:123456789012Greece123456789012

text1.txt
Content:123456789012Rome123456789012

After execution, open output.txt file and check the results.

I hope that script helps you in your problem.

See you

Re: IPO - batch

Posted: 26 Jan 2017 17:42
by xThule
thx for the input rodrigolima

beside the fact that Aacini already solved my problem the easiest way possible

your code will not work for me because i've got an alphanumerical code in the middle
the 10 symbols in the middle are numbers AND characters so i cant delete only numbers that would make my codes unusable for the following steps but thank you anyway =)