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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [BATCH] [APORTE] Rutina TEXTMAN para manipular archivos de texto
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [BATCH] [APORTE] Rutina TEXTMAN para manipular archivos de texto  (Leído 8,048 veces)
Eleкtro
Ex-Staff
*
Conectado Conectado

Mensajes: 9.878



Ver Perfil
[BATCH] [APORTE] Rutina TEXTMAN para manipular archivos de texto
« en: 2 Octubre 2012, 15:58 pm »

Las dudas más frecuentes sobre Batch suelen ser sobre la manipulación de texto, así que he creado esta rutina para que tengan esta pequeña ayuda.

A diferencia del 99% de rutinas parecidas a esta, mi código respeta los caracteres especiales al no usar la expansión. Por contra, resulta más lento el proceso.

 - ¿Que funciones tiene?
  • AÑADIR TEXTO AL PRINCIPIO DE UNA LÍNEA
  • AÑADIR TEXTO AL FINAL DE UNA LÍNEA
  • ELIMINAR UNA LINEA
  • INSERTAR UNA LINEA (VACÍA O CON TEXTO)
  • REEMPLAZAR UNA LINEA
  • REEMPLAZAR PALABRAS DE UNA LINEA
  • REEMPLAZAR PALABRAS EN TODAS LAS LINEAS
  • ELIMINAR LOS PRIMEROS "X" CARACTERES EN TODAS LAS LÍNEAS
  • ELIMINAR LOS ÚLTIMOS  "X" CARACTERES EN TODAS LAS LÍNEAS
  • CORTAR LAS PRIMERAS "X" LÍNEAS
  • CORTAR LAS ÚLTIMAS  "X" LÍNEAS

Por ejemplo, para eliminar la linea 5 en un archivo de texto lo usariamos así:

Código:
Call :TEXTMAN E 5 "Archivo.txt"

Léanse la ayuda que está escrita dentro del código antes de usarlo.

Espero que a alguien le sirva de ayuda.
Saludos.



Versión 0.2, corregido un fallo en la función de L-
Versión 0.5

Código:
@Echo OFF


:: TEXT MANIPULATOR ROUTINE v0.5
:: by Elektro H@cker
 

REM SYNTAX:
::
:: TEXTMAN [ACTION] [LINE(S)] [FILE] [TEXT]
::
:: * [LINE(S)] parameter is Optional for some actions
:: * [TEXT] parameter is Optional for some actions
 

REM ACTIONS:
::
::  AB  = ADD_BEGINNING      * Add text to the beginning of a line.
::  AE  = ADD_ENDING         * Add text to the end of a line.
::  E   = ERASE              * Delete a line.
::  I   = INSERT             * Add a empty line (Or a line with text).
::  RL  = REPLACE_LINE       * Replace a entire line.
::  RS  = REPLACE_STRING     * Replace word from line.
::  RSA = REPLACE_STRING_ALL * Replace word from all lines.
::  C+  = CHARACTER_PLUS     * Delete the first "X" characters from all lines.
::  C-  = CHARACTER_LESS     * Delete the last  "X" characters from all lines.
::  L+  = LINE_PLUS          * Cut the first "X" amount of lines.
::  L-  = LINE_LESS          * Cut the last  "X" amount of lines.
::  GL  = GET_LINE           * Delete all except "X" line.
::  GR  = GET_RANGE          * Delete all except "X" range of lines.
 

REM EXAMPLES:
::
:: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: ::
::                                                                         ::
:: Delete the line 3                                                       ::
:: Call :TEXTMAN E 3 "Test.txt"                                            ::
::                                                                         ::                                                                       
:: Add a string to the beginning of line 3                                 ::
:: Call :TEXTMAN AL 3 "Test.txt" "Elektro H@cker"                          ::
::                                                                         ::                                                                     
:: Add a string to the end of line 3.                                      ::
:: Call :TEXTMAN AR 3 "Test.txt" "Elektro H@cker"                          ::
::                                                                         ::                                                                       
:: Add a empty line at line 3.                                             ::
:: Call :TEXTMAN I 3 "Test.txt"                                            ::
::                                                                         ::                                                                       
:: Add a line with a word at line 3.                                       ::
:: Call :TEXTMAN I 3 "Test.txt" "Elektro H@cker"                           ::
::                                                                         ::   
:: Replace the line 3 with "Elektro H@cker".                               ::
:: Call :TEXTMAN RL 3 "Test.txt" "Elektro H@cker"                          ::
::                                                                         ::
:: Replace the words "Elektro" to "H@cker" in line 3.                      ::
:: Call :TEXTMAN RS 3 "Test.txt" "Elektro" "H@cker"                        ::
::                                                                         ::
:: Replace the words "Elektro" to "H@cker" in all lines.                   ::
:: Call :TEXTMAN RSA "Test.txt" "Elektro" "H@cker"                         ::
::                                                                         ::
:: Delete the first 3 characters in all lines.                             ::
:: Call :TEXTMAN C+ 3 "Test.txt"                                           ::
::                                                                         ::
:: Delete the last 3 characters in all lines.                              ::
:: Call :TEXTMAN C- 3 "Test.txt"                                           ::
::                                                                         ::
:: Delete the first 3 lines.                                               ::
:: Call :TEXTMAN L+ 3 "Test.txt"                                           ::
::                                                                         ::
:: Delete the last 3 lines.                                                ::
:: Call :TEXTMAN L- 3 "Test.txt"                                           ::
::                                                                         ::
:: Delete all except the line number 3.                                    ::
:: Call :TEXTMAN SL 3 "Test.txt"                                           ::
::                                                                         ::
:: Delete all except the 3 to 9 range of lines.                            ::
:: Call :TEXTMAN SR 3 9 "Test.txt"                                         ::
::                                                                         ::
:: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: :: ::
 

:TEXTMAN
(SET /A "A=0", "LINE=0", "TOTAL_LINES=0")  &  (CALL :%~1 %* || (ECHO Invalid parameter & Exit /B 1)) & (GOTO:EOF)
:AB
(For /F "tokens=1* delims=]" %%A in ('type "%~3" ^| find /n /v ""') DO (Call Set /A "LINE+=1" && (CMD /C "IF NOT "%%LINE%%" EQU "%~2" (if "%%B" EQU "" (Echo+>> "%~3.NEW") ELSE ((Echo %%B)>> "%~3.NEW")) ELSE (if "%%B" EQU "" ((Echo %~4)>> "%~3.NEW") ELSE ((Echo %~4%%B)>> "%~3.NEW"))"))) && (CALL :RENAMER "%~3") & (GOTO:EOF)
:AE
(For /F "tokens=1* delims=]" %%A in ('type "%~3" ^| find /n /v ""') DO (Call Set /A "LINE+=1" && (CMD /C "IF NOT "%%LINE%%" EQU "%~2" (if "%%B" EQU "" (Echo+>> "%~3.NEW") ELSE ((Echo %%B)>> "%~3.NEW")) ELSE ((Echo %%B%~4)>> "%~3.NEW")"))) && (CALL :RENAMER "%~3") & (GOTO:EOF)
:E
(For /F "tokens=1* delims=]" %%A in ('type "%~3" ^| find /n /v ""') DO (Call Set /A "LINE+=1" && (CMD /C "IF NOT "%%LINE%%" EQU "%~2" (if "%%B" EQU "" (Echo+>> "%~3.NEW") ELSE ((Echo %%B) >> "%~3.NEW"))"))) && (CALL :RENAMER "%~3") & (GOTO:EOF)
:I
(For /F "tokens=1* delims=]" %%A in ('type "%~3" ^| find /n /v ""') DO (Call Set /A "LINE+=1" && (CMD /C "IF     "%%LINE%%" EQU "%~2" (IF NOT "%~4" EQU "" ((Echo %~4) >> "%~3.NEW") ELSE (Echo+>> "%~3.NEW"))" & (if "%%B" EQU "" (Echo+>> "%~3.NEW") ELSE ((Echo %%B)>> "%~3.NEW"))))) && (CALL :RENAMER "%~3") & (GOTO:EOF)
:RL
(For /F "tokens=1* delims=]" %%A in ('type "%~3" ^| find /n /v ""') DO (Call Set /A "LINE+=1" && (CMD /C "IF NOT "%%LINE%%" EQU "%~2" (if "%%B" EQU "" (Echo+>> "%~3.NEW") ELSE ((Echo %%B)>> "%~3.NEW")) ELSE ((Echo %~4)>> "%~3.NEW")"))) && (CALL :RENAMER "%~3") & (GOTO:EOF)
:RS
(For /F "tokens=1* delims=]" %%A in ('type "%~3" ^| find /n /v ""') DO (Call Set /A "LINE+=1" && (CMD /C "IF NOT "%%LINE%%" EQU "%~2" (if "%%B" EQU "" (Echo+>> "%~3.NEW") ELSE ((Echo %%B)>> "%~3.NEW")) ELSE (CALL SET "STRING=%%B" &&     (if "%%B" EQU "" (Echo+>> "%~3.NEW") ELSE ((CALL ECHO %%STRING:%~4=%~5%%)>> "%~3.NEW")))"))) && (CALL :RENAMER "%~3") & (GOTO:EOF)
:RSA
(For /F "tokens=1* delims=]" %%A in ('type "%~2" ^| find /n /v ""') DO (CALL SET "STRING=%%B" && (if "%%B" EQU "" (Echo+>> "%~2.NEW") ELSE ((CALL ECHO %%STRING:%~3=%~4%%)>>"%~2.NEW")))) && (CALL :RENAMER "%~2") & (GOTO:EOF)
:C+
(For /F "usebackq tokens=*" %%@ in ("%~3") DO (Call Set   "LINE=%%@" && (CALL ECHO %%LINE:~%~2%% >>      "%~3.NEW"))) && (CALL :RENAMER "%~3") & (GOTO:EOF)
:C-
(For /F "usebackq tokens=*" %%@ in ("%~3") DO (Call Set   "LINE=%%@" && (CALL ECHO %%LINE:~0,-%~2%% >>   "%~3.NEW"))) && (CALL :RENAMER "%~3") & (GOTO:EOF)
:L+
(Call SET /A "A=%~2") && (Call TYPE "%~3" |@MORE +%%A%% > "%~3.NEW") && (CALL :RENAMER "%~3") & (GOTO:EOF)
:L-
(For /F "tokens=1* delims=]" %%A in ('type "%~3" ^| find /n /v ""') DO (CALL SET /A "TOTAL_LINES+=1")) & (CALL SET /A "TOTAL_LINES-=%~2-1") & (For /F "tokens=1* delims=]" %%A in ('type "%~3" ^| find /n /v ""') DO (Call Set /A "LINE+=1" & Call echo "%%LINE%%"|@FIND "%%TOTAL_LINES%%" >NUL) && (CALL :RENAMER "%~3" && GOTO:EOF) || (Echo %%B >> "%~3.NEW"))
:GL
(Call SET /A "A=%~2" && Call SET /A "A-=1") && (Call TYPE "%~3" |@MORE +%%A%% > "%temp%\getline.tmp") && (For /F "tokens=1* delims=]" %%A in ('type "%temp%\getline.tmp" ^| find /n /v ""') DO ((if "%%B" EQU "" (Echo+>> "%~3.NEW") ELSE ((Echo %%B)> "%~3.NEW"))) && ((CALL :RENAMER "%~3") & (GOTO:EOF)))
:GR
(For /F "tokens=1* delims=]" %%A in ('type "%~4" ^| find /n /v ""') DO (Call Set /A "LINE+=1" && (CMD /C "(IF "%%LINE%%" GEQ "%~2" IF "%%LINE%%" LEQ "%~3" (if "%%B" EQU "" (Echo+>> "%~4.NEW") ELSE ((Echo %%B)>> "%~4.NEW"))) && (IF "%%LINE%%" EQU "%~3" Exit /B 1)" || ((CALL :RENAMER "%~4") & (GOTO:EOF)))))

:RENAMER
(REN "%~1" "%~nx1.BAK") & (MOVE /Y "%~1.BAK" "%TEMP%\" >NUL) & (REN "%~1.NEW" "%~nx1") & (GOTO:EOF)


« Última modificación: 19 Agosto 2013, 00:55 am por EleKtro H@cker » En línea



Rikosky

Desconectado Desconectado

Mensajes: 5



Ver Perfil WWW
Re: [BATCH] [APORTE] Rutina TEXTMAN para manipular archivos de texto
« Respuesta #1 en: 15 Marzo 2014, 15:12 pm »

Como se podria insertar una linea de texto al principio de un .txt?

Código:
echo %text23%>>Accesos.txt

Lo mismo que se haria con ese codigo, pero insertando la linea al principio y no al final, de forma que lo mas reciente este arriba y no al final del texto.


En línea

FranciskoAsdf

Desconectado Desconectado

Mensajes: 231


Ni bueno, ni malo. Solo nada.


Ver Perfil WWW
Re: [BATCH] [APORTE] Rutina TEXTMAN para manipular archivos de texto
« Respuesta #2 en: 15 Marzo 2014, 15:17 pm »

Que buen aporte! (como siempre :D), yo que manipulo muchos archivos en el trabajo me sirve mucho para aprender y para -porfin- tener una forma rapida de donde sacar ejemplos y asi aplicarlos a otros Scripts !!

Muchas Gracias!!
En línea

Asdf debería ser algún tipo de función.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

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