hola,
a ver si alguien puede echarme una mano,
voy a tratar de explicar lo que quiero, creo que no será imposible.
tengo un archivo .txt (de unas 40.000 líneas, numeradas del 1 al 490 repetidamente hasta el final).
necesito un ejecutable (bat), donde me divida el archivo en archivos de 490 líneas, que las 4 primeras líneas (no numeradas sean comunes a todos los archivos creados, que las 2 ultimas filas (no numeradas) sean comunes y que los nuevos archivos tengan el nombre del primero enumerados.
ZZZ
X0.0 Y0.0 Z30.0
M601
M2
G0 Z-100.0
N1 G1 X240.1 Y324.9 Z3.6 F2
N2 G1 X239.5 Y325.5 Z4.9 F2
N3 G1 X238.8 Y326.1 Z4.9 F2
N4 G1 X238.2 Y326.8 Z2.4 F2
N5 G1 X237.6 Y327.4 Z1.4 F2
N6 G1 X247.5 Y317.5 F2
N490 G1 X240.7 Y324.3 Z0.5 F2
N1 G1 X240.1 Y324.9 Z3.6 F2
N2 G1 X239.5 Y325.5 Z4.9 F2
N3 G1 X238.8 Y326.1 Z4.9 F2
N4 G1 X238.2 Y326.8 Z2.4 F2
N5 G1 X237.6 Y327.4 Z1.4 F2
N6 G1 X237.0 Y328.0 Z0.9 F2
N490 G1 X236.4 Y328.6 Z0.7 F2
N1 G1 X235.7 Y329.2 Z3.3 F2
N2 G1 X235.1 Y329.8 Z4.1 F2
N3 G1 X234.5 Y330.5 Z0.8 F2
N4 G1 X233.9 Y331.1 Z1.7 F2
N5 G1 X233.3 Y331.7 Z4.9 F2
N6 G1 X232.6 Y332.3 Z3.7 F2
N490 G1 X232.0 Y332.9 Z1.1 F2
N1 G1 X231.4 Y333.6 Z0.6 F2
N2 G1 X230.8 Y334.2 Z0.6 F2
N3 G1 X230.2 Y334.8 Z4.2 F2
N4 G1 X229.6 Y335.4 Z5.0 F2
N5 G1 X228.9 Y336.0 Z5.0 F2
N6 G1 X228.3 Y336.7 Z5.0 F2
N490 G1 X226.5 Y338.5 Z1.0 F2
G0 Z-100.0
G0 Y0
en este ejemplo me tendrían que quedar 4 archivos.
deZZZ.txt, tienen que salir ZZZ1.txt, ZZZ2.txt, ZZZ3.txt, ZZZ4.txt
cada uno lleva:
X0.0 Y0.0 Z30.0
M601
M2
G0 Z-100.0
N1 ...............
N2 ..............
N3 .............
N4...............
N5...................
N6....................
N490...................
G0 Z-100.0
G0 Y0
gracias de antemano
qué tienes hecho?
qué no sabes?
el foro es para resolver dudas no para pedir trabajos o tarea hecha
lo siento, no volverá a pasar
No te recomiendo utilizar una herramienta limitada como es Batch para este tipo de tareas, por no decir que además es muy lento al procesar texto.
Te muestro un ejemplo que puedes adaptar a tus necesidades por ti mismo:
Source
@Echo OFF & SetLocal EnableDelayedExpansion
Set "inputFile=.\Archivo.txt"
Set /A "fileCount=1"
Echo [+] ".\ZZZ%fileCount%.txt"
For /F "UseBackQ Tokens=* Delims=" %%a In ("%inputFile%") Do (
Set "line=%%~a"
Echo !line!
(Echo !line!)>>".\zzzz!fileCount!.txt"
If /I "!line:~0,4!" EQU "N490" (
Set /A "fileCount+=1"
Echo+
Echo [+] ".\ZZZ!fileCount!.txt"
)
)
Pause&Exit /B 0
Output
[+] ".\ZZZ1.txt"
ZZZ
X0.0 Y0.0 Z30.0
M601
M2
G0 Z-100.0
N1 G1 X240.1 Y324.9 Z3.6 F2
N2 G1 X239.5 Y325.5 Z4.9 F2
N3 G1 X238.8 Y326.1 Z4.9 F2
N4 G1 X238.2 Y326.8 Z2.4 F2
N5 G1 X237.6 Y327.4 Z1.4 F2
N6 G1 X247.5 Y317.5 F2
N490 G1 X240.7 Y324.3 Z0.5 F2
[+] ".\ZZZ2.txt"
N1 G1 X240.1 Y324.9 Z3.6 F2
N2 G1 X239.5 Y325.5 Z4.9 F2
N3 G1 X238.8 Y326.1 Z4.9 F2
N4 G1 X238.2 Y326.8 Z2.4 F2
N5 G1 X237.6 Y327.4 Z1.4 F2
N6 G1 X237.0 Y328.0 Z0.9 F2
N490 G1 X236.4 Y328.6 Z0.7 F2
[+] ".\ZZZ3.txt"
N1 G1 X235.7 Y329.2 Z3.3 F2
N2 G1 X235.1 Y329.8 Z4.1 F2
N3 G1 X234.5 Y330.5 Z0.8 F2
N4 G1 X233.9 Y331.1 Z1.7 F2
N5 G1 X233.3 Y331.7 Z4.9 F2
N6 G1 X232.6 Y332.3 Z3.7 F2
N490 G1 X232.0 Y332.9 Z1.1 F2
[+] ".\ZZZ4.txt"
N1 G1 X231.4 Y333.6 Z0.6 F2
N2 G1 X230.8 Y334.2 Z0.6 F2
N3 G1 X230.2 Y334.8 Z4.2 F2
N4 G1 X229.6 Y335.4 Z5.0 F2
N5 G1 X228.9 Y336.0 Z5.0 F2
N6 G1 X228.3 Y336.7 Z5.0 F2
N490 G1 X226.5 Y338.5 Z1.0 F2
[+] ".\ZZZ5.txt"
G0 Z-100.0
G0 Y0
Presione una tecla para continuar . . .
gracias, seguire tu consejo
hola de nuevo y gracias por la ayuda.
ya he ajustado el bat a mis necesidades:
@Echo OFF & SetLocal EnableDelayedExpansion
cd\
cd %1
Set "inputFile=.\%1.PRG"
Set /A "fileCount=1"
Echo [+] ".\%1%fileCount%.PRG"
For /F "UseBackQ Tokens=* Delims=" %%a In ("%inputFile%") Do (
Set "line=%%~a"
Echo !line!
(Echo !line!)>>".\%1!fileCount!.PRG"
If /I "!line:~0,4!" EQU "N490" (
Set /A "fileCount+=1"
Echo+
Echo [+] ".\%1!fileCount!.PRG"
)
)
Pause&Exit /B 0
Ahora de los archivos nuevos creados necesito eliminar los comienzos de línea
N0,N1,N2,N3.....N490.
llevo varias horas intentándolo y solo he conseguido eliminar la N, con esto:
@echo off
Setlocal EnableDelayedExpansion
@echo off
for /f %%a in ('dir /b *.*') do (call :camcomtb %%a)
goto :EOF
:camcomtb
for /f "tokens=* delims=" %%i in (%1) do (set c=%%i&echo !c:N=!>> ZZZ1.PRG)
goto :EOF
por favor pido ayuda, soy muy novato.
1. Utiliza las etiquetas GeShi para insertar código, esto es un foro y hay que respetar unas normas de publicación.
Puedes utilizar el comando FindStr para filtrar el archivo descartando lineas que empeicen por "X":
(Type "Archivo.txt" | FindStr /I /V "^N0 ^N1 ^N2 ^N3")> "Nuevo Archivo.txt
Lee sobre el uso de rexpresiones regulares (RegEx).
Saludos