elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [Batch] Crear varios txt a partir de otro txt [Solucionado]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Batch] Crear varios txt a partir de otro txt [Solucionado]  (Leído 16,552 veces)
bjeli1980

Desconectado Desconectado

Mensajes: 8


Ver Perfil
[Batch] Crear varios txt a partir de otro txt [Solucionado]
« en: 13 Abril 2010, 17:34 pm »

Hola,

A ver si alguien me puede echar una mano que estoy bastante atascado.

Quiero generar varios txt a partir de un txt. El fichero origen es asi:

La primera línea es el nombre del fichero, y tiene que generar un fichero hasta que encuentra la línea FIN MATERIAL.


1-1958.ad
Melamina Blanca1801958BK1X11-BK                     22/03/2010
1901958BK1X2001120004000000060Costado Armario 1100006
1901958BK1X2000752004485000010Puerta Armario 80500001
1901958BK1X2001482004485000100Puerta Armario A1 00010
1901958BK1X2000391505240000950Tapa-Fondo A1 basi00095
1801958BK1X4003660020500999990Melamina Blanca 3699999
FIN MATERIAL
1-1959.ad
Melamima Blanca1001959BK1X11-BK                     22/03/2010
1001959BK1X2000865003790000010Division Horizonta00001
1001959BK1X2001455008750000200Trasera 1535 A1 ba00020
1001959BK1X2001810008750000250Trasera 1900 A1 BA00025
1001959BK1X2000715008750000200Trasera 805 A1 BAS00020
1001959BK1X4003660020500999990Melamima Blanca 3699999
FIN MATERIAL
1-24507.ad
Blanco Super So25024507BK111-BK                     22/03/2010
25024507BK12000864003590000040Balda A1 basica00004
25024507BK14002550021000999990Blanco Super Soft 99999
FIN MATERIAL


Yo he hecho este script pero me da un error de "No se esperaba ( en este momento.".

::CrearFichero por Materiales partiendo de "listacorteoptimizador.txt"

@echo off
:Main
set sFin=FIN MATERIAL
set fListadoCorte=listacorteoptimizador.txt

setlocal enabledelayedexpansion
set bNombreFichero = 0

For /f "useback tokens=*" %%F in ("%fListadoCorte%") do (
   
   If "%%F" == "%sFin%" (
    set bNombreFichero = 0
   ) Else (
   If %bNombreFichero% == 0 (
         set fMaterial = %%F
         set bNombreFichero = 1
      ) Else (
      echo %%F >> %fMaterial%
   )
)

A ver si alguien me puede echar una mano. Gracias

;)


« Última modificación: 14 Abril 2010, 23:18 pm por Leo Gutiérrez. » En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: [Batch] Crear varios txt a partir de otro txt
« Respuesta #1 en: 13 Abril 2010, 19:30 pm »

En la tarde lo resuelvo, estoy en la escuela.  :-\


En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
xassiz_

Desconectado Desconectado

Mensajes: 273


Ich werde dich töten..


Ver Perfil WWW
Re: [Batch] Crear varios txt a partir de otro txt
« Respuesta #2 en: 13 Abril 2010, 19:59 pm »

Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3.  
  4. for /f "tokens=*" %%x in (listacorteoptimizaror.txt) do (
  5. set "line=%%x"
  6. if "!line:~-3!"==".ad" (set "fichero=!line!")
  7. if not "!line!"=="FIN MATERIAL" (
  8. if not "!line:~-3!"==".ad" (echo:!line!>>!fichero!)
  9. )
  10. )
  11.  
  12.  

Saludos ;)
En línea



YXVuIGVyZXMgbWF0YWRvIHBhcmEgcG9uZXJ0ZSBhIGRlc2NpZnJhciBlc3RvIHhE
bjeli1980

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: [Batch] Crear varios txt a partir de otro txt
« Respuesta #3 en: 14 Abril 2010, 09:35 am »

Muchas gracias xassiz, me ha funcionando perfectamente.

¿para que sirve "!line:~-3!"==".ad"?

¿xq pones !line!>>!fichero! entre admiraciones?

En línea

xassiz_

Desconectado Desconectado

Mensajes: 273


Ich werde dich töten..


Ver Perfil WWW
Re: [Batch] Crear varios txt a partir de otro txt
« Respuesta #4 en: 14 Abril 2010, 15:24 pm »

Lo primero se llama extracción de carácteres y lo segundo polimetría. Hay mucha info sobre estas cosillas te explico lo primero así por encima, la polimetria es muy extensa:

Código:
set variable=holanomostrarmundo
echo %variable:~0,4% %variable:~13,5%
Creo que el ejemplo lo explica todo, ahora con valores negativos:

Código:
set variable=holanomostrarmundo
echo %variable:~0,4% %variable:~-5%

Al igual que:
Código:
set archivo=algo.txt
echo Extension: %archivo:~-4%
o
Código:
set archivo=algo.ad
echo Extension: %archivo~-3%

[Tutorial] Polimetria by Smartgenius


Saludos ;)
« Última modificación: 14 Abril 2010, 15:26 pm por xassiz » En línea



YXVuIGVyZXMgbWF0YWRvIHBhcmEgcG9uZXJ0ZSBhIGRlc2NpZnJhciBlc3RvIHhE
bjeli1980

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: [Batch] Crear varios txt a partir de otro txt
« Respuesta #5 en: 14 Abril 2010, 16:09 pm »

Muchas gracias!!!

Me queda mucho por aprender. :-(

En línea

ADRIANGUDU

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: [Batch] Crear varios txt a partir de otro txt [Solucionado]
« Respuesta #6 en: 19 Septiembre 2012, 15:59 pm »

Hola, soy nuevo en esto de programar y tengo un problema similar al posteado pero no logro adecuar el codigo a mis necesidades.

mi archivo se llama 'Query_infos_archivo_DDDPLUS.txt' y el formato es este:

----------------------------------------------
<fdaDeployJob xml:lang="es-ES">
  <fileInfo>
   <displayName>Plus_IMS_ARG_DDDLEG_002_A_20120801.ZIP</displayName>
   <description>DATOS AR_DDDPLUS Argentina Ambiente plus Agosto 2012 CLIENT SERVICE, IMSHEALTH
    <additionalInfo></additionalInfo>
    <loginRequired>0</loginRequired>
    <approved>1</approved>
    <emailNotification>1</emailNotification>
   <activeDate>2012/09/19</activeDate>
   <expirationDate>2012/10/30</expirationDate>
    <fileRule>
      <productRestrictions>
      </productRestrictions>
      <companyRestrictions>
      </companyRestrictions>
      <productCompanyRestrictions>
      </productCompanyRestrictions>
      <individualRestrictions>
       <individualEmail owner="1">aduran@ar.imshealth.com</individualEmail>   
       <individualEmail owner="0">mechenique@ar.imshealth.com</individualEmail>
      </individualRestrictions>
<fileUploader> </fileUploader>
</fileRule>
  </fileInfo>
</fdaDeployJob>
----------------------------------------------

Esto se repite muchas veces en un txt y necesito generar varios archivos txt que corten cuando encuentre la linea </fdaDeployJob> y darle el nombre que en este caso sería Plus_IMS_ARG_DDDLEG_002_A_20120801.ZIP el cual siempre esta en la misma linea.

Gracias

En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.885



Ver Perfil
Re: [Batch] Crear varios txt a partir de otro txt [Solucionado]
« Respuesta #7 en: 20 Septiembre 2012, 05:44 am »

necesito generar varios archivos txt que corten cuando encuentre la linea </fdaDeployJob> y darle el nombre que en este caso sería Plus_IMS_ARG_DDDLEG_002_A_20120801.ZIP

EDITO: Código mejorado
Código:
@Echo OFF
Title By Elektro H@cker
Setlocal enabledelayedexpansion

:::::::::::::::::::
Set "FILE=Test.XML"
:::::::::::::::::::

If Exist "%FILE%" (Echo Archivo a procesar: "%FILE%" | MORE) ELSE (Echo Archivo "%FILE%" no encontrado & Exit /B 1)

:: Creamos un archivo temporal y le agregamos X lineas en blanco para evitar errores en el SORT de Batch.
REM Ajustamos el número de lineas a agregar para agilizar el proceso de generación de archivos.
REM 100 lineas si el archivo original tiene menos de 100 lineas.
REM 1.000 lineas si el archivo original tiene entre 100 y 999 lineas.
REM 10.000 lineas si el archivo original tiene entre 1.000 y 9.999 lineas.
REM 100.000 lineas si el archivo original tiene entre 10.000 y 99.999 lineas.
REM 1.000.000 lineas si el archivo original tiene entre 100.000 y 999.999 lineas o más de 1.000.000 de lineas.
For /F %%a in ('Type "%FILE%" ^| find /V /C ""') do (Echo %%a>"%TEMP%\%FILE%" & FOR %%? IN ("%TEMP%\%FILE%") DO (SET /A "longitud=%%~z? - 3"))
Echo+ > "%TEMP%\%FILE%"
IF "%LONGITUD%" LEQ "2" (Set /A "LINES=100")
IF "%LONGITUD%" EQU "3" (Set /A "LINES=1000")
IF "%LONGITUD%" EQU "4" (Set /A "LINES=10000")
IF "%LONGITUD%" EQU "5" (Set /A "LINES=100000")
IF "%LONGITUD%" GEQ "6" (Set /A "LINES=1000000")
Echo Generando un archivo temporal, espere...
For /L %%X in (2,1,%LINES%) Do (Echo+ >> "%TEMP%\%FILE%")

:: Eliminamos las lineas en blanco del archivo original y copiamos el resto en el archivo temporal.
Type "%FILE%" | FINDSTR "." >> "%TEMP%\%FILE%"

:: Obtenemos los nombres de las imagenes. ("<displayName>")
For /F "Tokens=3 Delims=:<>" %%# in ('Type "%FILE%" ^| FIND /I "displayName"') do (Set /A "NUM_NAME+=1" && Set "NAME!NUM_NAME!=%%#")

:: Obtenemos el número de las lineas que contienen los delimitadores [A] y [B]. ("<fdaDeployJob" y "</fdaDeployJob>")
For /F "Delims=:" %%X in ('findstr /I /N "<fdaDeployJob "  "%TEMP%\%FILE%"') do (Set /A "NUM_A+=1" && Set "Delimiter_A_!NUM_A!=%%X")
For /F "Delims=:" %%X in ('findstr /I /N "</fdaDeployJob>" "%TEMP%\%FILE%"') do (Set /A "NUM_B+=1" && Set "Delimiter_B_!NUM_B!=%%X")

:: Cortamos y generamos los archivos.
Echo+ & Echo Generando los archivos, espere... | MORE

For /L %%X in (1,1,%NUM_B%) Do (
For /F "Tokens=* Delims=:" %%@ in ('Type "%TEMP%\%FILE%"') do (

Set /A "LINE+=1"
SET "String=%%@"

IF NOT "!LINE!" GTR "!Delimiter_B_%%X!" (
IF "!LINE!" GEQ "!Delimiter_A_%%X!" (
IF NOT "!STRING!" EQU " " (
ECHO !STRING!>> "!NAME%%X!.XML"
)
)
)
)
Set /A "LIN_A=!Delimiter_A_%%X! - %LINES%", "LIN_B=!Delimiter_B_%%X! - %LINES%"
Set /A "LINE=0"

Echo [+] !NAME%%X!.XML
Echo     (Linea !LIN_A! hasta Linea !LIN_B!^) | MORE
)

Echo Listo.
Pause&Exit

 

Output:

Plus_IMS_ARG_DDDLEG_002_A_20120801.ZIP.XML:
Código:
<fdaDeployJob xml:lang="es-ES"> 
  <fileInfo>
   <displayName>Plus_IMS_ARG_DDDLEG_002_A_20120801.ZIP</displayName>
   <description>DATOS AR_DDDPLUS Argentina Ambiente plus Agosto 2012 CLIENT SERVICE, IMSHEALTH
    <additionalInfo></additionalInfo>
    <loginRequired>0</loginRequired>
    <approved>1</approved>
    <emailNotification>1</emailNotification>
   <activeDate>2012/09/19</activeDate>
   <expirationDate>2012/10/30</expirationDate>
    <fileRule>
      <productRestrictions>
      </productRestrictions>
      <companyRestrictions>
      </companyRestrictions>
      <productCompanyRestrictions>
      </productCompanyRestrictions>
      <individualRestrictions>
       <individualEmail owner="1">aduran@ar.imshealth.com</individualEmail>    
       <individualEmail owner="0">mechenique@ar.imshealth.com</individualEmail>
      </individualRestrictions>
<fileUploader> </fileUploader>
</fileRule>
  </fileInfo>
</fdaDeployJob>

Plus_IMS_ELEKTRO_H@CKER.ZIP.XML:
Código:
<fdaDeployJob xml:lang="en-EN"> 
  <fileInfo>
   <displayName>Plus_IMS_ELEKTRO_H@CKER.ZIP</displayName>
   <description>blablablabla
    <additionalInfo></additionalInfo>
    <loginRequired>0</loginRequired>
    <approved>1</approved>
    <emailNotification>1</emailNotification>
   <activeDate>2011/11/22</activeDate>
   <expirationDate>2011/11/22</expirationDate>
    <fileRule>
      <productRestrictions>
      </productRestrictions>
      <companyRestrictions>
      </companyRestrictions>
      <productCompanyRestrictions>
      </productCompanyRestrictions>
      <individualRestrictions>
       <individualEmail owner="1">www.elhacker.net</individualEmail>    
       <individualEmail owner="0">Elektro H@cker</individualEmail>
      </individualRestrictions>
<fileUploader> </fileUploader>
</fileRule>
  </fileInfo>
</fdaDeployJob>

Y con esto cierro el tema, haz el favor de leer las normas, has revivido un tema de 2 años de antiguedad sin aportar nada, debes formular tu pregunta en un nuevo topic.

Saludos.

EDITO 2: [BATCH] [APORTE] TextCutter (Delimita texto de un archivo y lo corta en trozos)
« Última modificación: 20 Septiembre 2012, 07:56 am por EleKtro H@cker » En línea



Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.885



Ver Perfil
[Batch] Crear varios txt a partir de otro txt [Solucionado]
« Respuesta #8 en: 20 Septiembre 2012, 05:45 am »

El mensaje '[Batch] Crear varios txt a partir de otro txt [Solucionado]' fue bloqueado
tema antiguo revivido
Leer reglas:
http://foro.elhacker.net/reglas
« Última modificación: 20 Septiembre 2012, 05:48 am por EleKtro H@cker » En línea



Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines