Programando en MetaCard y Revolution sin pilas

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:

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í 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