Comunidad Underground Hispana  

Retroceder   Comunidad Underground Hispana > Programacion > Batch


Respuesta Crear Nuevo Tema
 
Compartir en twitter LinkBack Herramientas Desplegado
Antiguo 20-sep-2012, 00:59   #1
Moderador y merodeador :=
 
Avatar de EleKtro H@cker
 
Fecha de Ingreso: marzo-2011
Ubicación: Valencia city, Spain
Amigos 17
Mensajes: 987
Gracias: 1.959
Agradecido 341 veces en 246 mensajes.
Predeterminado [APORTE] TextCutter (Delimita el texto de un archivo)

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
  
Espero que les séa de ayuda.
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">

[Solo usuarios registrados pueden ver los links. REGISTRARSE]

</individualEmail> <individualEmail owner="0">

[Solo usuarios registrados pueden ver los links. REGISTRARSE]

</individualEmail> </individualRestrictions> <fileUploader> </fileUploader> </fileRule> </fileInfo> </fdaDeployJob> ---------------------------------------------- <fdaDeployJob xml:lang="en-EN"> <fileInfo> <displayName>

[Solo usuarios registrados pueden ver los links. REGISTRARSE]

</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.***************************************</individualEmail> <individualEmail owner="0">Elektro H@cker</individualEmail> </individualRestrictions> <fileUploader> </fileUploader> </fileRule> </fileInfo> </fdaDeployJob> ----------------------------------------------

Cita:
Iniciado por cristofer007 Ver Mensaje
Podrias explicar bien que ahce plis ? que no entendi o.o
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
  
Y quieres separarla en una serie de archivos de esta manera:

1.txt
Código:
Nombre: elektro
Años: 26
Altura: 5,00
Peso: 50,0
  
2.txt
Código:
Nombre:jaime
Años: 20
Altura: 2
Peso: 22
  
3.txt
Código:
Nombre: tonto polla
Años: 69
Altura: 6.9 m
Peso: 68 kg
  
Pues para eso sirve

Última edición por cuban; 21-sep-2012 a las 06:22
EleKtro H@cker está desconectado   Responder Citando
El Siguiente Usuario Agradeció a EleKtro H@cker Por Este Mensaje:
cuban (20-sep-2012)
Antiguo 20-sep-2012, 15:16   #2
Colaborador
 
Avatar de cristofer007
 
Fecha de Ingreso: agosto-2011
Ubicación: Chile, Valparaiso
Amigos 6
Mensajes: 416
Gracias: 51
Agradecido 76 veces en 63 mensajes.
Predeterminado Respuesta: [APORTE] TextCutter (Delimita el texto de un archivo)

Podrias explicar bien que ahce plis ? que no entendi o.o
cristofer007 está desconectado   Responder Citando
El Siguiente Usuario Agradeció a cristofer007 Por Este Mensaje:
EleKtro H@cker (20-sep-2012)
Antiguo 20-sep-2012, 17:05   #3
Moderador y merodeador :=
 
Avatar de EleKtro H@cker
 
Fecha de Ingreso: marzo-2011
Ubicación: Valencia city, Spain
Amigos 17
Mensajes: 987
Gracias: 1.959
Agradecido 341 veces en 246 mensajes.
Predeterminado Respuesta: [APORTE] TextCutter (Delimita el texto de un archivo)

Cita:
Iniciado por cristofer007 Ver Mensaje
Podrias explicar bien que ahce plis ? que no entendi o.o
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
  
Y quieres separarla en una serie de archivos de esta manera:

1.txt
Código:
Nombre: elektro
Años: 26
Altura: 5,00
Peso: 50,0
  
2.txt
Código:
Nombre:jaime
Años: 20
Altura: 2
Peso: 22
  
3.txt
Código:
Nombre: tonto polla
Años: 69
Altura: 6.9 m
Peso: 68 kg
  
Pues para eso sirve

Saludos
EleKtro H@cker está desconectado   Responder Citando
Antiguo 20-sep-2012, 17:19   #4
Colaborador
 
Avatar de cristofer007
 
Fecha de Ingreso: agosto-2011
Ubicación: Chile, Valparaiso
Amigos 6
Mensajes: 416
Gracias: 51
Agradecido 76 veces en 63 mensajes.
Predeterminado Respuesta: [APORTE] TextCutter (Delimita el texto de un archivo)

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
cristofer007 está desconectado   Responder Citando
El Siguiente Usuario Agradeció a cristofer007 Por Este Mensaje:
EleKtro H@cker (21-sep-2012)
Antiguo 21-sep-2012, 13:54   #5
kj
Moderador
 
Fecha de Ingreso: noviembre-2006
Amigos 4
Mensajes: 2.635
Gracias: 3
Agradecido 294 veces en 210 mensajes.
Predeterminado Respuesta: [APORTE] TextCutter (Delimita el texto de un archivo)

Buen trabajo electro, es algo muy útil, gran xml parser o.o

kj
__________________

[Solo usuarios registrados pueden ver los links. REGISTRARSE]

kj está desconectado   Responder Citando
El Siguiente Usuario Agradeció a kj Por Este Mensaje:
EleKtro H@cker (21-sep-2012)
Respuesta

Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder mensajes
No puedes subir archivos adjuntos
No puedes editar tus mensajes

Los Códigos BB están Activado
Las Caritas están Activado
[IMG] está Activado
El Código HTML está Desactivado
Trackbacks están Activado
Pingbacks están Activado
Refbacks están Activado



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



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.0