modificar lineas contenidas en un archivo

Iniciado por romanjr, 17 Febrero 2011, 02:23 AM

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

romanjr

Hola una vez mas yo... agradeciendo sus respuestas y el apoyo y las enseñanzas recibidas

les mando otro problema para resolver con batch, espero puedan ayudarme.
bueno tengo una serie de archivos .jpg

crucero 1-bj04.jpg
crucero 2-bj04.jpg
...
...
crucero nn-bj04.jpg


de igual forma tengo unos mapas que son

map_crucero 1-bj04.jpg
map_crucero 2-bj04.jpg
...
...
map_crucero nn-bj04.jpg


y asi mismo una serie de archivos html (todos tienen el mismo contenido)

code_crucero 1-bj04.html
code_crucero 2-bj04.html
...
...
code_crucero nn-bj04.html


en la linea 12 de cada html tiene el siguiente codigo
<p align="center" ><span>Cruceros BJU-04</span></p>

en la linea 13
<p align="center"><img src="CRUCERO 1-BJ04.jpg" width="624" height="493"></p>

y en la 14
<p align="center"><img src="mapa 1-BJ04.jpg" width="624" height="493"></p>
 
como puedo hacer para modificar la linea 12 para que en lugar de Cruceros BJU-04 diga el nombre del archivo jpg


como puedo hacer para modificar la linea 13 para que en lugar de CRUCERO 1-BJ04.jpg como texto, coloque el nombre del archivo .jpg que le corresponde segun su propio nombre

y

como puedo hacer para modificar la linea 14 para que en lugar de mapa 1-BJ04.jpg como texto, coloque el nombre del archivo map_*.jpg que le corresponde segun su propio nombre

he estado haciendo lo siguiente, obiamente mal:
Código (dos) [Seleccionar]
@echo off

for /f "tokens=*" %%_ in ('dir /B *.jpg') do (call:cambia "%%~_")
goto:eof


:cambia

set lin12=^<p align="center"^>^<span^>"%~n1"^</span^>^</p^>
set lin13=^<p align="center"^>^<img src="%~n1.jpg" width="624" height="493"^>^</p^>
set lin14=^<p align="center"^>^<img src="map_%~n1.jpg" width="624" height="493"^>^</p^>

echo ^<p align="center"^>^<span^>"%~n1"^</span^>^</p^>
echo ^<p align="center"^>^<img src="%~n1.jpg" width="624" height="493"^>^</p^>
echo ^<p align="center"^>^<img src="map_%~n1.jpg" width="624" height="493"^>^</p^>


pero lo que hace es ponerme tambien los map_*.jpg y esos no quiero, ademas de que ya de aqui no se como entrar al archivo y editarlo para remplazar las lineas correspondientes a las %lin12% %lin13% %lin14%

 alguna opinion

Gracias nuevamente




leogtz

#1
Por favor, en cmd.exe teclea el comando edlin y dime si lo tienes disponible, porque es probable que lo use.

Mmm, al parecer el bug de EDLIN no me permitirá usar archivos con espacios, así que tendré que hacer todo a pie.

Bueno, me voy a dormir, mañana si no tengo tarea lo resuelvo, sino hasta el viernes.

Saludos.
Código (perl) [Seleccionar]

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

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

romanjr

ok Leo, gracias y lochecare enwin7 no lo permite pero talvez en vista si igual mañaa lo checo gracias portu ayuda

saludos

SuperDraco

Sabía que Leo te iba a contestar lo del Edlin xD pero mira si no lo puedes usar, tienes como alternativa el SED.exe:

http://gnuwin32.sourceforge.net/packages/sed.htm

No se como adaptarlo para resolver tu problema, supongo que debes usar el for + el sed, pero te explico como uso el sed a ver si así puedes hacer algo por ti mismo... :/


SED "s/PALABRA//Ig;s/OTRAPALABRA[ \t]*$//" "C:\ARCHIVO.HTML" > "C:\ARCHIVO2.HTML"

Con ese código buscas PALABRA y la cambias por OTRAPALABRA en el archivo c:\ARCHIVO.HTML que luego se guarda las modificaciones en ARCHIVO2.html.

Espero que te sirva de algo, saludos.
No he vuelto, solo estoy de paso.

romanjr

#4
ok pitoloko gracias por la respuesta lo voy a checar... sin embargo me entra una duda:

en la instruccion sed que das al final dirijes los cambios hechos a un nuevo archivo html, ese puede ser el mismo que se modifica?

por cierto el edlin si me responde en vista, asi que si podria servirme pero esta solucion tambien la voy a probar

les aviso

de verdad les agradezco mucho sus enseñanzas

romanjr

#5
hola, sigo con lo mismo

oye Leo y Pitoloko mas preguntas... sed puede cambiar lineas completas?, mi pregunta es por lo siguiente, el archivo html que sirve de modelo para crear los demas le puedo cambiar de nombre a modcode.htm, ese al sustituir la linea que quiero cambiar lo renombro ya con el nombre corregido con espacios y demas con esta alternativa talvez si se pueda usar el edlin pero no se aun como sustituir la linea, mi codigo va hasta ahorita mas o menos asi

Código (dos) [Seleccionar]
@echo off

for /f "tokens=*" %%_ in ('dir /B *.html') do (call:cambia "%%~_")

goto:eof

:cambia

set a=%~n1_
set a=%a:~4,-1%

set lin12=^<p align="center"^>^<span^>"%a"^</span^>^</p^>
set lin13=^<p align="center"^>^<img src="%a.jpg" width="624" height="493"^>^</p^>
set lin14=^<p align="center"^>^<img src="map_a.jpg" width="624" height="493"^>^</p^>

set archi=modcode.htm
set lineaa=12
set lineab=13
set lineac=14


+++++ aqui es donde ya me perdi

(
echo %lineaa%
rem echo %lin12%
echo w
echo e
) | edlin /b %archi%


++++ y aqui es donde sustituyo el "archivo virtual" por el bueno

copy "modcode.htm" "cod_%a%.html"


voy bien? o me regreso?????

saludos

SuperDraco

Quedate con el edlin, seguro que es más fácil que el SEd, yo no tengo EDLIN y nunca lo he usado asi que no puedo ayudarte como Leo, por desgracia tampoco se muxo del SED, solo lo uso para su función básica.

1. - Yo he intentado guardar los cambios realizados con el SED sobre el mismo archivo, pero lo único que consigo es "vaciar" todas las lineas así que queda un archivo en blanco... por eso hay que guardarlo en un segundo archivo.

2. - Si que se puede cambiar la linea entera, solo tienes que escribir esa linea dentro de la cadena "PALABRA". Si lo que quieres es cambiarla de otra forma, no se decirte.

A ver si pudieras subir el edlin.exe a mediafire, o algo, que ya me tais dando muxa envidia :(    xD

Saludos.
No he vuelto, solo estoy de paso.

romanjr

jajajaj no chicos ... envida la mia que son todos unos masters, te dejo el link para que descargues el edlin

http://www.mediafire.com/file/7yhaobk07x3xyab/edlin.exe

este archivo esta localizado en la ruta c:\windows\system32

asi que te recomiendo lo tengas en el mismo lugar..... no lo he corrido en win 7... la verdad es que no se que pase.

por cierto esto es lo que llevo

@echo off

for /f "tokens=*" %%_ in ('dir /B *.html') do (call:cambia "%%~_")

goto:eof

:cambia

set a=%~n1_
set a=%a:~4,-1%

echo %a%

set lin12=^<p align="center"^>^<span^>"%a"^</span^>^</p^>
set lin13=^<p align="center"^>^<img src="%a.jpg" width="624" height="493"^>^</p^>
set lin14=^<p align="center"^>^<img src="map_a.jpg" width="624" height="493"^>^</p^>

set archi=modcode.htm
set lineaa=12
set lineab=13
set lineac=14

rem aqui debe hacer el cambio


copy "modcode.htm" "cod_%a%.html"



solo me falta modificar el archivo

saludos

romanjr

jajajajaja ya me han de alucinar  ;D :D

ok ya lo resolvi pero medio cavernicola, ademas al presentar los htmls en el explorer me muestra unas " pero no importa se ve lo que quiero ver....

aun asi insisto si hay una opcion mejor se los agradere

un abrazo y gracias



@echo off

for /f "tokens=*" %%_ in ('dir /B *.html') do (call:cambia "%%~_")

goto:eof

:cambia

set a=%~n1_
set a=%a:~4,-1%

echo %a%

set lin12=^<p align="center"^>^<span^>%a%^</span^>^</p^>
set lin13=^<p align="center"^>^<img src="%a%.jpg" width="624" height="493"^>^</p^>
set lin14=^<p align="center"^>^<img src="map_%a%.jpg" width="624" height="493"^>^</p^>

rem aqui debe hacer el cambio

@echo off
(   
echo 12   
echo "%lin12%"
echo w   
echo e
) | edlin /b modcode.htm

@echo off
(   
echo 13   
echo "%lin13%"
echo w   
echo e
) | edlin /b modcode.htm

@echo off
(   
echo 14   
echo "%lin14%"
echo w   
echo e
) | edlin /b modcode.htm

rem aqui termina de hacer el cambio

copy "modcode.htm" "cod_%a%.html"

otra vez gracias y espero sus comentarios

leogtz

Con sed creo que puedo hacerlo fácilmente, pero bueno, hoy no tengo tiempo, ya será mañana.

Saludos.
Código (perl) [Seleccionar]

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

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