Páginas

lunes, 6 de octubre de 2014

Explorador de proyecto de gambas3: Uso de la orden SCAN

Explorador de proyecto de gambas3: 

Uso de la orden SCAN


Tras leer un hilo (enlace) abierto por Shell en el foro de gambas-es.org, me he mirado  hoy  que hacia esta orden, que nunca había escuchado nada de ella,  ni de su uso, he intentar hacer un ejemplo de como usarla
Lo primero que vi fue la ayuda de gambaswiki ( http://gambaswiki.org/wiki/lang/scan?l=es ):

String Array = Scan ( String AS String , Pattern AS String )


La definición viene a decir que:

Busca coincidencia de una cadena con respecto a un patrón dado (según los patrones usados por LIKE, y devuelve una matriz con las cadenas asociadas a un caracter generico "*"

Me he hecho una aplicación que es capaz de leer un proyecto completo realizado en gambas3, y extraer los eventos, métodos, y variables que usa cada clase ó modulo.
Para la parte que "analiza" y extrae la información uso la funcion scan.

Por ejemplo:
    LISTA = Scan(lineas[A], "PUBLIC SUB *")
    If LISTA.count > 0 Then
      sublista = Scan(LISTA[0], "*_*")
      If sublista.count = 0 Then
        'se trata de una subrutina
        TreeView1.Add(ruta & "/public" & LISTA[0], LISTA[0] & " en " & Str$(a), Picture["method.png"], ruta & "/public")
        Continue
      Else
        'se trata de un evento
        TreeView1.Add(ruta & "/event" & LISTA[0], LISTA[0] & " en " & Str$(a), Picture["event.png"], ruta & "/event")

        Continue
      Endif
    Endif

En una linea de código (Linea[A]), compruebo con SCAN que su contenido es igual al patron "PUBLIC SUB *", asi discrimino todas las lineas donde se definen subrutinas públicas. Si coincide, devuelve un array de cadena con el contenido del nombre de la subrutina.
Esta subrutina, puede ser que sea un evento, para ello la vuelvo a analizar con el siguiente patrón:
= Scan(LISTA[0], "*_*")

Con el cual busco que el contenido del nombre que he extraido en el primer patrón, contiene un caracter "_" que en gambas se usa para señalar evento. Si se cumple esto, se trata de un evento, y pongo el icono de evento, y si no,  se trata de un método y pongo su respectivo icono.
Ademas de poner el icono, y el nombre del método/evento/variable también pongo el numero de linea donde esta dicha definición en la clase, para poderla buscar posteriormente.

Aquí tenéis el programa analizando en el proyecto del juego "1945":




Os dejo aqui el código completo: enlace de descarga en drive google

Saludos.

Julio