![]() |
|
|
#1 | |||
|
Moderador y merodeador :=
![]() Fecha de Ingreso: marzo-2011
Ubicación: Valencia city, Spain
Amigos 17
Mensajes: 987
Gracias: 1.959
Agradecido 341 veces en 246 mensajes.
|
He visto estos últimos años a mucha gente preguntando como delimitar un texto para cortarlo en trozos, y generar los subarchivos delimitados, así que me he visto en la casi necesidad de crear esta función para ese propósito, así les será más fácil.
Código:
@Echo OFF
Title TEXTCUTTER [By Elektro H@cker]
REM Call :TEXTCUTTER "ARCHIVO" "DELIMITADOR (A)" "DEIMITADOR (B)"
:: Ejemplo
Call :TEXTCUTTER "TEST.XML" "<fdaDeployJob" "</fdaDeployJob>"
Pause&Exit
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:TEXTCUTTER
Echo # # # # # # # #
Echo # #
Echo # TEXT CUTTER # by Elektro H@cker
Echo # #
Echo # # # # # # # # | MORE
Setlocal enabledelayedexpansion
Set "FILE=%~nx1"
SET "Delimiter_A=%~2"
SET "Delimiter_B=%~3"
:: Comprobaciones iniciales
If Exist "%FILE%" (
Echo # Procesar archivo : "%FILE%"
Echo # Delimitar desde : "%Delimiter_A%"
Echo # Delimitar hasta : "%Delimiter_B%" | MORE
) ELSE (Echo Archivo "%FILE%" no encontrado & GOTO:EOF)
Type "%FILE%" | FIND "%Delimiter_A%" >NUL || (Echo No se ha encontrado ninguna cadena con el delimitador (A^): "%Delimiter_A%" & GOTO:EOF)
Type "%FILE%" | FIND "%Delimiter_B%" >NUL || (Echo No se ha encontrado ninguna cadena con el delimitador (B^): "%Delimiter_B%" & GOTO:EOF)
:: 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 el número de las lineas que contienen los delimitadores [A] y [B].
For /F "Delims=:" %%X in ('findstr /I /N "%Delimiter_A%" "%TEMP%\%FILE%"') do (Set /A "NUM_A+=1" && Set "Delimiter_A_!NUM_A!=%%X")
For /F "Delims=:" %%X in ('findstr /I /N "%Delimiter_B%" "%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!>> "%~n1_%%X_%~x1"
)
)
)
)
Set /A "LIN_A=!Delimiter_A_%%X! - %LINES%", "LIN_B=!Delimiter_B_%%X! - %LINES%"
Set /A "LINE=0"
Echo [+] "%~n1_%%X_%~x1"
Echo (Linea !LIN_A! hasta Linea !LIN_B!^) | MORE
)
Setlocal disabledelayedexpansion
Echo Listo.
GOTO:EOF
![]() PD: Recuerden, así pueden ocultar la salida: Código:
Call :TEXTCUTTER "ARCHIVO" "DELIMITADOR (A)" "DEIMITADOR (B)" >NUL Saludos. El archivo que he usado en el ejemplo: Test.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">
Tienes esta lista: lista.txt Código:
Nombre: elektro Años: 26 Altura: 5,00 Peso: 50,0 Nombre:jaime Años: 20 Altura: 2 Peso: 22 Nombre: tonto polla Años: 69 Altura: 6.9 m Peso: 68 kg 1.txt Código:
Nombre: elektro Años: 26 Altura: 5,00 Peso: 50,0 Código:
Nombre:jaime Años: 20 Altura: 2 Peso: 22 Código:
Nombre: tonto polla Años: 69 Altura: 6.9 m Peso: 68 kg Última edición por cuban; 21-sep-2012 a las 06:22 |
|||
|
|
|
| El Siguiente Usuario Agradeció a EleKtro H@cker Por Este Mensaje: | cuban (20-sep-2012) |
|
|
#2 |
|
Colaborador
![]() Fecha de Ingreso: agosto-2011
Ubicación: Chile, Valparaiso
Amigos 6
Mensajes: 416
Gracias: 51
Agradecido 76 veces en 63 mensajes.
|
Podrias explicar bien que ahce plis ? que no entendi o.o
|
|
|
|
| El Siguiente Usuario Agradeció a cristofer007 Por Este Mensaje: | EleKtro H@cker (20-sep-2012) |
|
|
#3 |
|
Moderador y merodeador :=
![]() Fecha de Ingreso: marzo-2011
Ubicación: Valencia city, Spain
Amigos 17
Mensajes: 987
Gracias: 1.959
Agradecido 341 veces en 246 mensajes.
|
Tienes esta lista:
lista.txt Código:
Nombre: elektro Años: 26 Altura: 5,00 Peso: 50,0 Nombre:jaime Años: 20 Altura: 2 Peso: 22 Nombre: tonto polla Años: 69 Altura: 6.9 m Peso: 68 kg 1.txt Código:
Nombre: elektro Años: 26 Altura: 5,00 Peso: 50,0 Código:
Nombre:jaime Años: 20 Altura: 2 Peso: 22 Código:
Nombre: tonto polla Años: 69 Altura: 6.9 m Peso: 68 kg Saludos |
|
|
|
|
|
#4 |
|
Colaborador
![]() Fecha de Ingreso: agosto-2011
Ubicación: Chile, Valparaiso
Amigos 6
Mensajes: 416
Gracias: 51
Agradecido 76 veces en 63 mensajes.
|
A genial te pasaste muy util o.o deverias crear haci como un pack tools con + herramientas de manejo de archivos que te quedo genial
|
|
|
|
| El Siguiente Usuario Agradeció a cristofer007 Por Este Mensaje: | EleKtro H@cker (21-sep-2012) |
|
|
#5 | |
|
Moderador
![]() Fecha de Ingreso: noviembre-2006
Amigos 4
Mensajes: 2.635
Gracias: 3
Agradecido 294 veces en 210 mensajes.
|
Buen trabajo electro, es algo muy útil, gran xml parser o.o
kj
__________________
|
|
|
|
|
| El Siguiente Usuario Agradeció a kj Por Este Mensaje: | EleKtro H@cker (21-sep-2012) |
![]() |
| Herramientas | |
| Desplegado | |
|
|

Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Tutorial Programación Batch - completo - | GUN$ | Batch | 5 | 04-dic-2011 17:42 |
| [Guia] Iniciando en Python | Doddy | Python | 63 | 29-ago-2011 17:04 |
| Saint Seiya Serie Completa (38 DVD Full) [Audio LAT-JAP] | pomposos | Foro anime | 1 | 25-jul-2011 17:34 |
| FATAL ERROR 001b 0x7c92b21a 0x00000010 | c0p3rn1c | Problemas Tecnicos Windows | 1 | 15-dic-2010 22:59 |
| Acciones sobre archivos de texto - by RockOx | SMARTGENIUS | Batch | 6 | 05-feb-2009 16:50 |