Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: romanjr en 17 Febrero 2011, 02:23 am



Título: modificar lineas contenidas en un archivo
Publicado por: romanjr en 17 Febrero 2011, 02:23 am
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

Código:
crucero 1-bj04.jpg
crucero 2-bj04.jpg
...
...
crucero nn-bj04.jpg

de igual forma tengo unos mapas que son

Código:
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)

Código:
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
Código:
<p align="center" ><span>Cruceros BJU-04</span></p>

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

y en la 14
Código:
<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
  1. @echo off
  2.  
  3. for /f "tokens=*" %%_ in ('dir /B *.jpg') do (call:cambia "%%~_")
  4. goto:eof
  5.  
  6.  
  7. :cambia
  8.  
  9. set lin12=^<p align="center"^>^<span^>"%~n1"^</span^>^</p^>
  10. set lin13=^<p align="center"^>^<img src="%~n1.jpg" width="624" height="493"^>^</p^>
  11. set lin14=^<p align="center"^>^<img src="map_%~n1.jpg" width="624" height="493"^>^</p^>
  12.  
  13. echo ^<p align="center"^>^<span^>"%~n1"^</span^>^</p^>
  14. echo ^<p align="center"^>^<img src="%~n1.jpg" width="624" height="493"^>^</p^>
  15. echo ^<p align="center"^>^<img src="map_%~n1.jpg" width="624" height="493"^>^</p^>
  16.  

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





Título: Re: modificar lineas contenidas en un archivo
Publicado por: leogtz en 17 Febrero 2011, 07:31 am
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.


Título: Re: modificar lineas contenidas en un archivo
Publicado por: romanjr en 17 Febrero 2011, 07:53 am
ok Leo, gracias y lochecare enwin7 no lo permite pero talvez en vista si igual mañaa lo checo gracias portu ayuda

saludos


Título: Re: modificar lineas contenidas en un archivo
Publicado por: SuperDraco en 17 Febrero 2011, 09:34 am
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.


Título: Re: modificar lineas contenidas en un archivo
Publicado por: romanjr en 17 Febrero 2011, 16:47 pm
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


Título: Re: modificar lineas contenidas en un archivo
Publicado por: romanjr en 17 Febrero 2011, 20:43 pm
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
  1. @echo off
  2.  
  3. for /f "tokens=*" %%_ in ('dir /B *.html') do (call:cambia "%%~_")
  4.  
  5. goto:eof
  6.  
  7. :cambia
  8.  
  9. set a=%~n1_
  10. set a=%a:~4,-1%
  11.  
  12. set lin12=^<p align="center"^>^<span^>"%a"^</span^>^</p^>
  13. set lin13=^<p align="center"^>^<img src="%a.jpg" width="624" height="493"^>^</p^>
  14. set lin14=^<p align="center"^>^<img src="map_a.jpg" width="624" height="493"^>^</p^>
  15.  
  16. set archi=modcode.htm
  17. set lineaa=12
  18. set lineab=13
  19. 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


Título: Re: modificar lineas contenidas en un archivo
Publicado por: SuperDraco en 17 Febrero 2011, 21:44 pm
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.


Título: Re: modificar lineas contenidas en un archivo
Publicado por: romanjr en 17 Febrero 2011, 23:28 pm
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


Título: Re: modificar lineas contenidas en un archivo
Publicado por: romanjr en 18 Febrero 2011, 02:20 am
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
 


Título: Re: modificar lineas contenidas en un archivo
Publicado por: leogtz en 18 Febrero 2011, 03:13 am
Con sed creo que puedo hacerlo fácilmente, pero bueno, hoy no tengo tiempo, ya será mañana.

Saludos.


Título: Re: modificar lineas contenidas en un archivo
Publicado por: leogtz en 19 Febrero 2011, 02:11 am
Bueno, ya resolví lo de la línea 12, claro, con SED, con batch nativo habría costado más trabajo.

Bueno, en el directorio "test" tengo los siguientes archivos html:


Código
  1. C:\test>dir /B *.html
  2. code_crucero 1-bj04.html
  3. code_crucero 10-bj04.html
  4. code_crucero 11-bj04.html
  5. code_crucero 12-bj04.html
  6. code_crucero 13-bj04.html
  7. code_crucero 14-bj04.html
  8. code_crucero 15-bj04.html
  9. code_crucero 2-bj04.html
  10. code_crucero 3-bj04.html
  11. code_crucero 4-bj04.html
  12. code_crucero 5-bj04.html
  13. code_crucero 6-bj04.html
  14. code_crucero 7-bj04.html
  15. code_crucero 8-bj04.html
  16. code_crucero 9-bj04.html
  17.  
  18. C:\test>

Ahora, cada html tiene el siguiente texto (ya que no me lo proporcionaste todo):


Citar
C:\test>type "code_crucero 10-bj04.html"
1
2
3
4
5
6
7
8
9
10
11
<p align="center" ><span>Cruceros BJU-04</span></p>
<p align="center"><img src="CRUCERO 10-BJ04.jpg" width="624" height="493"></p>
<p align="center"><img src="mapa 10-BJ04.jpg" width="624" height="493"></p>

C:\test>

Como estoy editando el archivo "code_crucero 10-bj04.html", debe quedar así:

Citar
<p align="center" ><span>crucero 10-bj04.jpg</span></p>

Y así sucesivamente...

Esto se logra con el siguiente script:

Código
  1. @echo off
  2. :: Leo Gutiérrez Ramírez.
  3. :: leorocko13@hotmail.com
  4.  
  5. pushd \test
  6. for /f "tokens=*" %%_ in ('dir /b .\*.html') do (call:procesar "%%~_")
  7. goto:eof
  8.  
  9. :procesar
  10. sed -i "12s/^\(.*<span>\)\(.*\)\(<\/span.*\)/\1%~n1.jpg\3/" "%~1"

Los deja así:

Citar
C:\test>type "code_crucero 10-bj04.html"
1
2
3
4
5
6
7
8
9
10
11
<p align="center" ><span>code_crucero 10-bj04.jpg</span></p>
<p align="center"><img src="CRUCERO 10-BJ04.jpg" width="624" height="493"></p>
<p align="center"><img src="mapa 10-BJ04.jpg" width="624" height="493"></p>



C:\test>type "code_crucero 7-bj04.html"
1
2
3
4
5
6
7
8
9
10
11
<p align="center" ><span>code_crucero 7-bj04.jpg</span></p>
<p align="center"><img src="CRUCERO 7-BJ04.jpg" width="624" height="493"></p>
<p align="center"><img src="mapa 7-BJ04.jpg" width="624" height="493"></p>



C:\test>

Debes de dejar todo el contenido de los HTML, porque no estoy editando por línea, estoy editando por expresión regular, así que puede causar problemas.

Antes de proceder con lo demás, necesito el contenido de los HTML.


Título: Re: modificar lineas contenidas en un archivo
Publicado por: romanjr en 19 Febrero 2011, 06:31 am
gracias esta super el codigo, tendre que bajar el sed y lo voy a probar inmediatamente, de todas formas te paso el codigo completo del html

codigo:

<html>
 <head>
  <title>Validaciones</title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"">
 </head>

 <body bgcolor="ffffff" background="../../../../image/sacmgr.jpg">
   <p align="center"><img src="../../../../image/IMG_2.jpg" width="840" height="115"></p>
   
   <div align="center">
 
"<p align="center"><span>CRUCERO 12-BJ04</span></p>"
"<p align="center"><img src="CRUCERO 12-BJ04.jpg" width="624" height="493"></p>"
"<p align="center"><img src="map_CRUCERO 12-BJ04.jpg" width="624" height="493"></p>"
 


</div>
   
   
   
 </body>
</html>


lo unico que hace el html es mostrar esas 2 imagenes pero se hace un html por cada par de archivos (map_*.jpg y *.jpg) imaginate... son 2000, me volveria loco y no terminaria.

una vez mas realmente no saben como estoy agradecido cuenten con un amigo de este lado de la pantalla.

Saludos y mil gracias


Título: Re: modificar lineas contenidas en un archivo
Publicado por: romanjr en 24 Febrero 2011, 18:08 pm
hola perdon por la ausencia, ustedes saben el trabajo, estimado Leo... con ese codigo que mencionas solo cambia la linea 12... estoy bien??? y si le agrego las demas lineas con el mismo solo cambiando el "12" me hace los demas cambios?, no lo he probado ya que quiero hacero en win 7, de todosmodos.. oye aprovecho....

sabes de alguien que sepa mapserver? pero que sea asi de picudo como tu, o si tu sabes de eso ... podrias echarme la mano?

gracias por tu ayuda

saludos


Título: Re: modificar lineas contenidas en un archivo
Publicado por: leogtz en 24 Febrero 2011, 22:41 pm
Hola, romanjr. Disculpa, he estado ocupado.

No sé sobre mapserver, lamentablemente :/

Mañana prometo ayudarte a solucionar las demás líneas.

Saludos.


Título: Re: modificar lineas contenidas en un archivo
Publicado por: romanjr en 16 Marzo 2011, 19:20 pm
hola leo, perdon por la ausencia, tuve que estar fuera de la line un rato... ya lo probe y quedo, te agradezco mucho tu tiempo y ayuda, espero podamos seguir ayudandonos... si necesitas algo de mapserver ahi me dices y lo poco que se con gusto te ayudo.

y dime como calificar tu asesoria en este u otros sitios.

gracias

por cierto... sabes php???? tengo unas dudas con eso

gracias