Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: neila en 21 Febrero 2015, 16:26 pm



Título: tema(batch) de un txt,crear varios txt, renombrado
Publicado por: neila en 21 Febrero 2015, 16:26 pm
   


 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






Título: Re: tema(batch) de un txt,crear varios txt, renombrado
Publicado por: engel lex en 21 Febrero 2015, 16:35 pm
qué tienes hecho?
qué no sabes?


el foro es para resolver dudas no para pedir trabajos o tarea hecha


Título: Re: tema(batch) de un txt,crear varios txt, renombrado
Publicado por: neila en 21 Febrero 2015, 16:58 pm
lo siento, no volverá a pasar


Título: Re: tema(batch) de un txt,crear varios txt, renombrado
Publicado por: Eleкtro en 21 Febrero 2015, 20:11 pm
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


Código
  1. @Echo OFF & SetLocal EnableDelayedExpansion
  2.  
  3. Set    "inputFile=.\Archivo.txt"
  4. Set /A "fileCount=1"
  5.  
  6. Echo [+] ".\ZZZ%fileCount%.txt"
  7. For /F "UseBackQ Tokens=* Delims=" %%a In ("%inputFile%") Do (
  8.  
  9. Set "line=%%~a"
  10. Echo !line!
  11. (Echo !line!)>>".\zzzz!fileCount!.txt"
  12. If /I "!line:~0,4!" EQU "N490" (
  13. Set /A "fileCount+=1"
  14. Echo [+] ".\ZZZ!fileCount!.txt"
  15. )
  16.  
  17. )
  18.  
  19. Pause&Exit /B 0


Output


Código:
[+] ".\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 . . .


Título: Re: tema(batch) de un txt,crear varios txt, renombrado
Publicado por: neila en 21 Febrero 2015, 20:35 pm
gracias, seguire tu consejo


Título: Re: tema(batch) de un txt,crear varios txt, renombrado
Publicado por: neila en 1 Marzo 2015, 19:44 pm
hola de nuevo y gracias por la ayuda.
ya he ajustado el bat a mis necesidades:
Código:
@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:

Código
  1. @echo off
  2. Setlocal EnableDelayedExpansion
  3. @echo off
  4. for /f %%a in ('dir /b *.*') do (call :camcomtb %%a)
  5. goto :EOF
  6. :camcomtb
  7. for /f "tokens=* delims=" %%i in (%1) do (set c=%%i&echo !c:N=!>> ZZZ1.PRG)
  8.  
  9. goto :EOF


por favor pido ayuda, soy muy novato.





Título: Re: tema(batch) de un txt,crear varios txt, renombrado
Publicado por: Eleкtro en 1 Marzo 2015, 19:49 pm
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":

Código:
(Type "Archivo.txt" | FindStr /I /V "^N0 ^N1 ^N2 ^N3")> "Nuevo Archivo.txt

Lee sobre el uso de rexpresiones regulares (RegEx).

Saludos