Acciones sobre archivos de texto. [Batch]

Iniciado por leogtz, 24 Enero 2009, 00:30 AM

0 Miembros y 3 Visitantes están viendo este tema.

flony

si un problema no tiene solucion entonces no es un problema...es algo inevitable

leogtz

Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

flony

leo si se lo de delims....pero mi pregunta es
Citarmurcielago.batman
si uso for /f "delims=. tokens=*" in(etc...
va a tomar para realizar la accion hasta murcielago...yo lo que quiero es tomar batman
para adelante?
si un problema no tiene solucion entonces no es un problema...es algo inevitable

leogtz

Código (dos) [Seleccionar]
@echo off
for /f "tokens=1* delims=." %%a in ('echo "elefante. perro gato alguien"') do (
echo %%b
)
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

flony

claro pero en el code define con el tokens y con eso perfeccionas la busqueda....si fuera dos renglones y el punto en el segundo renglon se hubica en el tokens 2?
Citarelefante. perro gato alguien
elefante perro. gato alguien
haber aclaro para no molestar poder se puede seria el pseudocodigo asi
1*contar los string
2*"tokens=* delims=."
con esto tomo todo el renglon hasta el punto
3*por diferencia eliminar los primeros string hasta el punto
4*el resultado quedan los restantes despues del punto
en nuestro ejemplo
1°renglon
Citarperro gato alguien
2°renglon
Citargato alguien

mi pregunta no hay una forma mas corta de hacerlo?
:P gracias por tenerme paciencia  ;)
si un problema no tiene solucion entonces no es un problema...es algo inevitable

leogtz

Cita de: flony en 12 Noviembre 2010, 01:12 AM
claro pero en el code define con el tokens y con eso perfeccionas la busqueda....si fuera dos renglones y el punto en el segundo renglon se hubica en el tokens 2?
Citarelefante. perro gato alguien
elefante perro. gato alguien
haber aclaro para no molestar poder se puede seria el pseudocodigo asi
1*contar los string
2*"tokens=* delims=."
con esto tomo todo el renglon hasta el punto
3*por diferencia eliminar los primeros string hasta el punto
4*el resultado quedan los restantes despues del punto
en nuestro ejemplo
1°renglon
Citarperro gato alguien
2°renglon
Citargato alguien

mi pregunta no hay una forma mas corta de hacerlo?
:P gracias por tenerme paciencia  ;)

No, no hay manera automática de hacerlo, tendríamos que idear algo, o usar "sed" para Windows.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

flony

gracias leo ....queria sacarme esa duda  ;-)
si un problema no tiene solucion entonces no es un problema...es algo inevitable

leogtz

Utiliza dos for, uno interno y otro externo(anidados) e itera sobre cada línea, haya el token en el que está el punto.

Saludos.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

flony

ves por eso sos un genio...no lo habia pensado
;-) ;-) ;-) ;-)
si un problema no tiene solucion entonces no es un problema...es algo inevitable

SennorDark

#119
Muy buenas tardes, la verdad he estado leyendo este Post, y se ve que sabes lo que haces, es factible que me puedas echar una mano, te explico mi situacion.

Necesito leer un archivo.txt cada x tiempo (esto lo realizare con una tarea programada de windows)
El archivo a leer, lo que encuentre a corde unos filtros lo creare en uno nuevo (esto lo tengo, tengo un .bat que contiene los codigos a buscar y pregunto si existe lo borro de lo contrario lon creo)

Que necesito hacer y no tengo idea de como hacerlo, es que cuando se ejecute lea las lineas que tenga y si esta el codigo que las pase al otro archivo, pero como el archivo que leo esta creciendo constantemente por otro proceso que lo llena, necesito manejar un flag que me indique la ultima lectura que hice fue en la linea xxxx y de hay empezar a leer para no realizar todo la lectura otravez

lo que tengo es lo siguiente:

Código (dos) [Seleccionar]

@echo off
if exist E:\LogPrueba24x7\Resultados_Logs\logs24x7.txt (goto si) else (goto no)
:fin
exit

:si
del E:\LogPrueba24x7\Resultados_Logs\logs24x7.txt
call codigos.bat
goto fin

:no
call codigos.bat
goto fin

exit

Como lo habia pensado, pero no se como llevarlo a un .bat
-leer el txt
-copiar lo que necesito a un new txt siendo la primera linea el numero de la ultima linea del txt
-al volver a ejecutarse leer la primera linea del new txt para saber donde empezar con la nueva lectura al txt
y asi sucesivamente

Es posible que me puedas ayudar gracias de antemano

el codigos.bat tiene lo siguiente:
Código (dos) [Seleccionar]
find /i " 529 " < "LogPrueba.TXT" >> Resultados_Logs\logs24x7.txt
find /i " 530 " < "LogPrueba.TXT" >> Resultados_Logs\logs24x7.txt
find /i " 531 " < "LogPrueba.TXT" >> Resultados_Logs\logs24x7.txt
find /i " 539 " < "LogPrueba.TXT" >> Resultados_Logs\logs24x7.txt
find /i " 630 " < "LogPrueba.TXT" >> Resultados_Logs\logs24x7.txt