| MetaCard y Revolution: Herramientas de autor multiplataforma para multimedia | ||
|---|---|---|
| Anterior | Capítulo 3. Programación en MetaTalk y Transcript | Siguiente |
El siguiente código lo utilizo para extraer de un fichero HTML la lista de nombres y direcciones de correo de los alumnos. Así genero un fichero XML a base de recorrer el anterior buscando las coincidencias con el patrón que se observa en el fichero HTML que contiene la información sobre cada alumno. A destacar de este código:
Excepto que no se puede utilizar ninguna referencia a objetos gráficos, aquí no hay interfaz gráfica el resto de las instrucciones de MetaTalk están disponibles.
La limitación de número de instrucciones no se aplica en este caso.
Se puede utilizar cualquier editor de texto para crearlos y editarlos.
Aquí el punto de entrada del código, puesto que no hay ningún objeto gráfico no es un openCard, mouseUp o similar, es el evento startup.
Se ejecuta con "revolution nombreFichero"; pero como no empleo nada particular de Revolution, la verdad es que se puede ejecutar también con "mc nombreFichero". A no ser que sepa cómo instruir a su sistema operativo para que utilice deteminada aplicación para ejecutar este archivo ..., en cuyo caso bastará con invocar el nombre del fichero como con cualquier ejecutable.
Nota: Eche un vistazo a un fichero de MetaCard (un ".mc") con un editor de texto. Además de ver una buena idea para el comentario anterior, comprobará que las pilas son parte texto y parte código binario. Aquí sí que todo es texto, no hay propiedades de los objetos gráficos que guardar en binario por eficiencia.
#
# /home/magusti/revo/revolution
#
# ########################################################
#
#/home/magusti/docencia/2k2-2k3/SMM/3x/orlesCampusVirtual.mc
# El primer argument es el directori on està el fitxer HTML que te els noms
# i correus.
#
# ########################################################
local fitxerHTML
local nomAlumne, correuAlumne, restoHTML
on startup
if ($1 is empty)
then
put "Aplicació per fer la conversió de la informació dels alumes en XML per al Campus Virtual."
put return &\"
"Exemple d'utilització: ~/MetaCard2.4/mc orlesCampusVirtual.mc ." & \
return
exit startup
end if
put return & \
"Construint l'eixida a partir de " &\
$1 & "/orlaCorreus.html"
if not there is a file ($1 & "/orlaCorreus.html")
then
put "Error: no està " & $1 & "/orlaCorreus.html"
else
# Ficar noms i @s de correu
#Examinar fitxer
put "Procesant " & $1 & "/orlaCorreus.html"
put url ("file:" & $1 & "/orlaCorreus.html") into fitxerHTML
repeat while matchText( fitxerHTML, \
"<head>(.*)</head>(.*)", \
nomAlumne, restoHTML ) is true
put nomAlumne & return
put restoHTML into fitxerHTML
end repeat
set the caseSensitive to false
put "<?xml version=" & quote & "1.0" & quote & \
" encoding=" & quote & "iso-8859-1" & quote & "?>" & return & \
"<!-- Fet en el MetaCard 2.4 a" && the internet date &&\
"per M. Agustí per a l'asignatura de SMM 2k2/2k3 -->" & return & \
"<alumnos>" & return into llistaDatos
put 0 into i
repeat while matchText( fitxerHTML, \
"<tr.[^h]*h.[^>]*>(.[^<]*)<.[^m]*mailto.[^>]*>(.[^<]*)<(.*)", \
nomAlumne, correuAlumne, restoHTML ) is true
put " <alumno nombre=" & quote & last item of nomAlumne & quote & \
" apellido1=" & quote & word 1 to -2 of first item of nomAlumne & quote & \
" apellido2=" & quote & last word of first item of nomAlumne & quote & \
" email=" & quote & correuAlumne & quote & "/>" & return after llistaDatos
put (i + 1) into i
put restoHTML into fitxerHTML
end repeat
put " " && "Ja no topete més correspondencies !!"
put "</alumnos>" & return after llistaDatos
# Una simple questió d'estética
replace "nombre= " with "nombre=" in llistaDatos
put llistaDatos & return
end if
end startup