Acciones sobre archivos de texto. [Batch]

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

0 Miembros y 1 Visitante están viendo este tema.

leogtz

#10
Aunque ya hayas encontrado solución, de todos modos te contesto.

Es posible trabajar con XML, pero es algo engorroso, pero si vas a volcar la salida del script que acabamos de hacer a un XML, podrías hacerlo a lo simple, así:

Editamos el script y lo dejamos asì:
code.bat:
Código (dos) [Seleccionar]
@echo off
for /f "tokens=3*" %%a in ('type "file.txt" ^| find /i "%date:~-4%"') do set "va
riable=%%a %%b"
for %%_ in (%variable%) do echo %%_


Luego desde otro script, llamemosle "dudas.bat":
Código (dos) [Seleccionar]
@echo off
echo ^<ETIQUETA^> >> my_xml.xml
call code.bat >> my_xml.xml
echo ^</ETIQUETA^> >> my_xml.xml

La salida de "my_xml.xml" sera esta:

C:\>type my_xml.xml
<ETIQUETA>
41
3.599
43.06523
23.57434
27.37795
18.57707
13.77606
34.56199
0
793.016
0
0
12.67301
19.74977
88.70969
35
</ETIQUETA>

C:\>


Para trabajar con XML te recomiendo PERL.
Código (perl) [Seleccionar]

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

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

KamuiDNA

Muchas gracias Leo , si estoy viendo que es un poco laborioso crear los XML con batch,  el unico detalle  es que cada linea de datos seria una etiqueta la salida que busco es la siguiente:



<?xml version="1.0" encoding="UTF-8"?>
<mexico>
<vel_viento>3.599</vel_viento>
<dir_viento>43.06523</dir_viento>
<temp>23.57434</temp>
<sens_term>27.37795</sens_term>
<ind_calor>18.57707</ind_calor>
<p_rocio>13.77606</p_rocio>
<humedad>34.56199</humedad>
<evto>0</evto>
<pres_barom>793.016</pres_barom>
<red_solar>0</red_solar>
<precipitacion>0</precipitacion>
</mexico>



Estaba viendo y para poder manipular cada dato tendria que asignarlo a una variable diferente para poderlo insertar en donde yo quisiera.

KamuiDNA

#12
Por fin me quedo el codigo como lo deseaba, estuve  viendo los ejemplos que pusieron y ahi encontre las respuestas a mis preguntas , obvio con la ayuda de Leo que me auxilio sin el no podria haber terminado mi proyecto, adjunto el codigo por si a alguien le sirve:


@echo off
for /f "tokens=3*" %%a in ('type "Cozumel_public.txt" ^| find /i "%date:~-4%"') do set "variable=%%a %%b"
for %%_ in (%variable%) do echo %%_


Aqui el segundo proceso para formatear los datos obtenidos en el primero en formato XML


@echo off
call Code.bat >> Temp.txt
del /F Cozumel.xml

setlocal enabledelayedexpansion
set contador=0
for /f "eol= tokens=* delims=" %%x in (Temp.txt) do (
set /a contador+=1
set linea!contador!=%%x
)
set linea


echo ^<?xml version="1.0" encoding="UTF-8"?> ^> >> Cozumel.xml
echo ^<cozumel^> >> Cozumel.xml
echo ^<vel_viento^>%linea2%^</vel_viento^> >> Cozumel.xml
echo ^<dir_viento^>%linea3%^</dir_viento^> >> Cozumel.xml
echo ^<temp^>%linea4%^</temp^> >> Cozumel.xml
echo ^<sens_term^>%linea5%^</sens_term^> >> Cozumel.xml
echo ^<ind_calor^>%linea6%^</ind_calor^> >> Cozumel.xml
echo ^<p_rocio^>%linea7%^</p_rocio^> >> Cozumel.xml
echo ^<humedad^>%linea8%^</humedad^> >> Cozumel.xml
echo ^<evto^>%linea9%^</evto^> >> Cozumel.xml
echo ^<pres_barom^>%linea10%^</pres_barom^> >> Cozumel.xml
echo ^<rad_solar^>%linea11%^</rad_solar^> >> Cozumel.xml
echo ^<precipitacion^>%linea12%^</precipitacion^> >> Cozumel.xml
echo ^</cozumel^> >> Cozumel.xml
del /F Temp.txt



Gracias por la ayuda =) espero a alguien le sirva.



Se me olvidaba mencionar son dos procesos el primero llamado Code y el segundo se llama Proceso , el que yo ejecuto es el segundo y este a su vez llama al primero.

Yatch

#13
Código (dos) [Seleccionar]
@echo off
@title Borrador de Descripciones

:again
cls
echo ===============================
echo == Borrador de Descripciones ==
echo ===============================
echo.
set /p desc_id=Enter ID:
set file=desc.txt

setlocal enabledelayedexpansion

for /f "tokens=1 delims=[]" %%_ in ('type "%file%" ^| find /i /n "%desc_id%#"') do set "coincidencia=%%_"
if not defined coincidencia (
echo No se encontro ninguna coincidencia "%desc_id%#"
goto end
)
:: Meter lineas de archivo.
set /a "contador=0"

for /f "eol= tokens=* delims=" %%x in (%file%) do (
set /a "contador+=1"
set linea!contador!=%%x
)

for /l %%: in (%coincidencia%, 1, %contador%) do (
if "!linea%%:!"=="#" (
set /a "coincidencia_final=%%:"
goto:break
)
)
:break
if not defined coincidencia_final (
echo No se encontro ninguna coincidencia
goto end
)

for /l %%: in (1,1, %contador%) do (
if %%: lss %coincidencia% (echo !linea%%:!>>desc2.txt)
if %%: gtr %coincidencia_final% (echo !linea%%:!>>desc2.txt)
)

echo Descripcion: %desc_id% Borrada.

:end
pause>nul
goto again
rem exit /b 0


Gracias men
Ahora como imprimo las lineas que elimine?

ovpaez

Hola perfectoo el codigo me refiere al de cambiar una frase por otra.. pero quisiera q dentro de ese mismo script poder seguir ejecutando otras instrucciones pero con el goto:eof se cierra el archivo y no se ejecuta lo demas como haria para q se siguiera ejecutando el script?? :-\ :-[ :silbar:

leogtz

Cita de: ovpaez en 24 Agosto 2009, 18:37 PM
Hola perfectoo el codigo me refiere al de cambiar una frase por otra.. pero quisiera q dentro de ese mismo script poder seguir ejecutando otras instrucciones pero con el goto:eof se cierra el archivo y no se ejecuta lo demas como haria para q se siguiera ejecutando el script?? :-\ :-[ :silbar:
Hola, podrías poner el código que estás intentando.

También pon un ejemplo del archivo de texto que estás usando.
Código (perl) [Seleccionar]

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

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

ovpaez

#16
Código (dos) [Seleccionar]
if %1'==' (set p1=usuario
set p2=usu
set p3=Plantilla.inf) else (set p1=%1&& set p2=%2&& set p3=%3)
echo.>$
for /f "tokens=1,* delims=]" %%A in ('"type %p3%|find /n /v """') do (
    set "current=%%B"
    if defined current (
call :stng %p1% %p2%
    ) else echo.>>$
)
type $>%p3%
type %p3%
:stng
call set current=%%current:%1=%2%%
echo %current%>>$

goto : EOF

Shutdown -r -t 00 restart





Despues del goto:eof no se sigue ejecutando la siguiente instruccion q sera reiniciar la maquina :(

leogtz

#17
No se ejecuta por que está despues del GOTO:EOF

Goto:EOF, significa "ir al final del archivo", es decir, sale del archivo por lotes.

Prueba tu código así:
Código (dos) [Seleccionar]

if %1'==' (
set p1=usuario
set p2=usu
set p3=Plantilla.inf
) else (
set p1=%1
set p2=%2
set p3=%3
)
echo.>$
for /f "tokens=1,* delims=]" %%A in ('type %p3%|find /n /v ""') do (
    set "current=%%B"
)    
    if defined current (
call :stng %p1% %p2%
    ) else echo.>>$
)
type $>%p3%
type %p3%
Shutdown -r -t 00 restart
goto:eof
:stng
call set current=%%current:%1=%2%%
echo %current%>>$
goto : EOF
Código (perl) [Seleccionar]

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

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

ovpaez

#18
 :-( no hac nada.. Ni reemplaza las palabras :( y mucho menos ejecuta la instrución.... Yo se lo que implica el goto: eof pero necesito que me permita seguir ejecutando instrucciones en el mismo script... help me!!

leogtz

Sí te ayudo, pero tu también a mi.

¿Qué palabras quieres reemplazar?
¿Cual es el contenido del archivo?
Código (perl) [Seleccionar]

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

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