Artículo
· 11 hr atrás Lectura de 3 min

Cómo encontrar un texto específico en ObjectScript

Probablemente os suene esta situación:

Hace tiempo encontraste una función muy especial, $ZU, para un tipo de problema muy concreto. Como una especie de fórmula mística. Esta se popularizó y muchos desarrolladores la utilizaron en su código.

Tras varias versiones y actualizaciones, ISC informa de que vuestro mágico $ZU está obsoleto y ya no es soportado. Se os recomienda reemplazarlo por un nuevo $loquesea().

Entonces, ¿cómo podrías localizar y documentar el uso de este mágico $ZU? Puede estar en clases, en código MAC, INT o INC o incluso distribuido en múltiples namespaces.

Me he encontrado con esta situación más de una vez en diferentes instalaciones.
En aquel momento, el control de versiones no estaba disponible y, cuando finalmente se introdujo, apenas se utilizaba.

Dado que ObjectScript era la única opción posible para abordar este desafío, escribí mi propia utilidad.
Mi solución ha ido evolucionando a lo largo de los años y, cuando se planificó la migración a IRIS, comprobé de nuevo lo útil que seguía siendo.
Y, como estaba escrita en puro ObjectScript, funcionó en IRIS sin que fuera necesario cambiar ni un solo carácter.
Como sabréis, el problema de buscar un texto específico en ObjectScript no ha cambiado.

Mis objetivos personales para esta utilidad eran:

  • Solo ObjectScript
  • Sin construcciones sofisticadas, milagrosas o frágiles
  • Usar la menor cantidad posible de funciones $avanzadas
  • Priorizar la legibilidad sobre la elegancia para facilitar el mantenimiento futuro
  • Mostrar el número de ocurrencias contadas por namespace y por elemento de código
  • Para clases, distinguir también entre:
    • parámetros
    • propiedades (si son calculadas)
    • métodos
    • índices
  • Opción para mostrar la línea que contiene la ocurrencia
  • Sin preocuparse por el formato de salida:
    • cualquier programa de terminal puede escribir un registro
    • bash tiene STDOUT para ello

Esta utilidad está, por tanto, disponible para vosotros en Open Exchange y GitHub.
También he creado un vídeo para mostrar la herramienta en acción.
Además, está disponible en el Demo Server.

Simplemente ejecutadla desde el terminal:
user>DO ^rcc.find

A continuación se os harán unas cuantas preguntas:

  • ¿Qué texto estás buscando?
  • ¿Verbose?
    • ¿Queréis ver la línea completa que contenga vuestro texto?
    • Advertencia: esto puede generar un listado muy grande.
    • En una prueba reciente se encontraron más de 90.000 coincidencias.
    • Con verbose=1, obtendréis más de 90.000 líneas.
  • ¿Solo mayúsculas?
    • Esto soluciona el problema de funciones escritas en mayúsculas, minúsculas o mezcladas.
    • “Uppercase=1” asegura que no os perdáis ninguna ocurrencia.
  • ¿Qué tipo de código queréis escanear? (CLS, MAC, INT, INC, ALL)
  • ¿En qué namespace queréis buscar?
    • Un namespace específico de la lista o ALL.
    • Para ALL, obtendréis una lista condensada de namespaces y tipos (no visible en el vídeo).

Selecciona el namespace e inicia el escaneo.
¡Vamos a ello!

USER> do ^rcc.find
----------------

enter search string [$ZU] <blank> to exit: RCC
          Verbose? (0,1) [0]:
          Force UpperCase? (1,0) [1]:

enter code type (CLS,MAC,INT,INC,ALL) [ALL]: CLS

select namespace (ALL,%SYS,DOCBOOK,ENSDEMO,ENSEMBLE,SAMPLES,USER) [USER]:

** Scan Namespace: USER **

** CLS **
** 2      User.ConLoad
** 15     User.Main
** 3      csp.form
** 3      csp.winner
** 2      dc.rcc.Contest
** 37     dc.rcc.Main
** 1      dc.rcc.Prize
** 63 CLS **
----------------

Espero que hayáis disfrutado de mi historia.
He intentado evitar listados de código aburridos; para eso están Open Exchange y GitHub.

Comentarios (0)1
Inicie sesión o regístrese para continuar