Read input file, create seperate files based on table
Moderator: DosItHelp
Read input file, create seperate files based on table
Hello
I read this article "batch file to read imput file, create seperate files " and I have a issue very similar
This is my sequential input file:
AA00codeotherdata
AAotherdata
......
AA99codeotherdata
this is my table:
code;newcode
.....;.........
I'd like to create new file called newfile.newcode.txt splitting with beginning AAcode from table and end with AA99code
this is example of file name
AA001234other
AAsomedata
AA991234other
AA005678other
AAsomedata
AA995678other
table:
1234;rome
5678;milan
new file :
fix.rome.txt
fix.milan.txt
Thanks
I read this article "batch file to read imput file, create seperate files " and I have a issue very similar
This is my sequential input file:
AA00codeotherdata
AAotherdata
......
AA99codeotherdata
this is my table:
code;newcode
.....;.........
I'd like to create new file called newfile.newcode.txt splitting with beginning AAcode from table and end with AA99code
this is example of file name
AA001234other
AAsomedata
AA991234other
AA005678other
AAsomedata
AA995678other
table:
1234;rome
5678;milan
new file :
fix.rome.txt
fix.milan.txt
Thanks
Re: Read input file, create seperate files based on table
Are all files you want to rename in the same folder?
Are always the first 4 characters used for the new files too?
Is the length of (old) code always 4 characters?
What file extensions do the old file names have?
Are there special characters (like "&") used in file names?
Regards
aGerman
Are always the first 4 characters used for the new files too?
Is the length of (old) code always 4 characters?
What file extensions do the old file names have?
Are there special characters (like "&") used in file names?
Regards
aGerman
Re: Read input file, create seperate files based on table
Are all files you want to rename in the same folder? yes
Are always the first 4 characters used for the new files too? variable
Is the length of (old) code always 4 characters? yes it depends on table, but yes 4
What file extensions do the old file names have? g00v00xxx where xxx is sequential but one is processed at time
Are there special characters (like "&") used in file names? no not used only dot separe file name
Tomorrow I give you a more detailed sample
Kind Regards
Dario
Are always the first 4 characters used for the new files too? variable
Is the length of (old) code always 4 characters? yes it depends on table, but yes 4
What file extensions do the old file names have? g00v00xxx where xxx is sequential but one is processed at time
Are there special characters (like "&") used in file names? no not used only dot separe file name
Tomorrow I give you a more detailed sample
Kind Regards
Dario
Re: Read input file, create seperate files based on table
layout input file:
col 1-2 'AA' code product
col 3-4 "00" start data or "99" end data
col 5-8 "1234" old code
table1 (4 char + 8 char fix)
1234;000milan
5678;0000rome
table2 (2 char + 12 char fix)
AA;ABCDEFG_0000
BB;QWERTYO_0000
name of new file with insire record from AA00code (table1) end AA99code (table1)
somecharfix.newcode(from table1).newcod(from table2)
col 1-2 'AA' code product
col 3-4 "00" start data or "99" end data
col 5-8 "1234" old code
table1 (4 char + 8 char fix)
1234;000milan
5678;0000rome
table2 (2 char + 12 char fix)
AA;ABCDEFG_0000
BB;QWERTYO_0000
name of new file with insire record from AA00code (table1) end AA99code (table1)
somecharfix.newcode(from table1).newcod(from table2)
Re: Read input file, create seperate files based on table
You could try this:
The batch file, Table1.txt and Table2.txt are in the same folder (but not together with the other files).
If you think it would work, remove the ECHO command.
Regards
aGerman
The batch file, Table1.txt and Table2.txt are in the same folder (but not together with the other files).
Code: Select all
@echo off &setlocal
pushd "C:\your\folder\with\files"
for /f "delims=" %%a in ('dir /a-d /b') do (
set "name=%%a"
call :procName
)
popd
pause
goto :eof
:procName
set "newCode1="
set "newCode2="
set "prodCode=%name:~0,2%"
set "num=%name:~2,2%"
set "oldCode=%name:~4,4%"
for /f "usebackq tokens=1* delims=;" %%a in ("%~dp0Table1.txt") do (
if "%oldCode%"=="%%a" set "newCode1=%%b"
)
for /f "usebackq tokens=1* delims=;" %%a in ("%~dp0Table2.txt") do (
if "%prodCode%"=="%%a" set "newCode2=%%b"
)
ECHO ren "%name%" "%prodCode%%num%.%newCode1%.%newCode2%.txt"
goto :eof
If you think it would work, remove the ECHO command.
Regards
aGerman
Re: Read input file, create seperate files based on table
Hello AGerman Thanks a lot it's almous perfect!
I make some changes and I have one two more question
The first is when I write the data
ECHO %name% >> "ADDRESS.%newCode1%.%newCode2%"
it's add a blank space at the end of line
The second question in when the batch read the code into the table to find the code I think there's no reason to read the table to the end, so the code must be fast
Here the code modified
I make some changes and I have one two more question
The first is when I write the data
ECHO %name% >> "ADDRESS.%newCode1%.%newCode2%"
it's add a blank space at the end of line
The second question in when the batch read the code into the table to find the code I think there's no reason to read the table to the end, so the code must be fast
Here the code modified
Code: Select all
@echo off &setlocal
pushd "C:\your\folder\with\files"
set "newCode1="
set "newCode2="
for /f "delims=" %%a in (fileinput.txt) do (
set "name=%%a"
call :procName
)
popd
goto :eof
:procName
set "prodCode=%name:~0,2%"
set "num=%name:~2,2%"
set "oldCode=%name:~4,4%"
for /f "usebackq tokens=1,2 delims=;" %%a in ("%~dp0Table1.txt") do (
if "%oldCode%"=="%%a" set "newCode1=%%b"
)
for /f "usebackq tokens=1,2 delims=;" %%a in ("%~dp0Table2.txt") do (
if "%prodCode%"=="%%a" set "newCode2=%%b"
)
ECHO %name% >> "ADDRESS.%newCode1%.%newCode2%"
goto :eof
Re: Read input file, create seperate files based on table
darioit wrote:The first is when I write the data
ECHO %name% >> "ADDRESS.%newCode1%.%newCode2%"
it's add a blank space at the end of line
It's because of the space behind %name%
You can use
Code: Select all
ECHO %name%>> "ADDRESS.%newCode1%.%newCode2%"
or
>> "ADDRESS.%newCode1%.%newCode2%" ECHO %name%
darioit wrote:The second question in when the batch read the code into the table to find the code I think there's no reason to read the table to the end, so the code must be fast
You can break a for loop with a goto :label
Code: Select all
for /f "usebackq tokens=1,2 delims=;" %%a in ("%~dp0Table1.txt") do (
if "%oldCode%"=="%%a" (
set "newCode1=%%b"
goto :break_loop
)
)
:break_loop
Re: Read input file, create seperate files based on table
ok thanks for your suggestion
I have simplify all operation and now is very fast, what do you think is correct writing code in this way?
I have simplify all operation and now is very fast, what do you think is correct writing code in this way?
@echo off &setlocal
pushd "E:\bat\Temp"
for /f "delims=" %%a in (fileinput.txt) do set "name=%%a"&call :procName
popd
goto :eof
:procName
if "%name:~2,2%"=="00" (
for /f "usebackq tokens=1,2 delims=;" %%a in ("%~dp0Table2.txt") do if "%name:~4,4%"=="%%a" set "newCode1=%%b"
for /f "usebackq tokens=1,2 delims=;" %%a in ("%~dp0Table1.txt") do if "%name:~0,2%"=="%%a" set "newCode2=%%b"
)
>> "ADDRESS.%newCode1%.%newCode2%" ECHO %name%
goto :eof
Re: Read input file, create seperate files based on table
Think you could make it like jeb suggested.
[Edit: Think you have to use different names for the dynamic variables in the 2nd FOR loop in this case /]
Regards
aGerman
Code: Select all
@echo off &setlocal
pushd "E:\bat\Temp"
for /f "delims=" %%a in (fileinput.txt) do set "name=%%a"&call :procName
popd
goto :eof
:procName
if "%name:~2,2%"=="00" (
for /f "usebackq tokens=1,2 delims=;" %%a in ("%~dp0Table2.txt") do if "%name:~4,4%"=="%%a" (
set "newCode1=%%b"
for /f "usebackq tokens=1,2 delims=;" %%c in ("%~dp0Table1.txt") do if "%name:~0,2%"=="%%c" (
set "newCode2=%%d"
goto break_loop
)
)
)
:break_loop
>> "ADDRESS.%newCode1%.%newCode2%" ECHO %name%
goto :eof
[Edit: Think you have to use different names for the dynamic variables in the 2nd FOR loop in this case /]
Regards
aGerman
Re: Read input file, create seperate files based on table
Thanks you very mutch now it works very fast, but I have one more question, in a row I have
AA001234 data data & data data
and when I write %name% the simbol "&" is view like a separator and don't write the full row, why?
AA001234 data data & data data
and when I write %name% the simbol "&" is view like a separator and don't write the full row, why?