functions.dkh

Variables globales

Estas variables globales mejoran la seguridad de tipos y facilitan la lectura de los programas.

Constantes

@true Use estas variables globales como constantes para comparaciones en expresiones como: valor==@true, valor==@false
@false

Plantillas de variables

@bool Use estas variables para establecer atributos al momento de declarar variables en la forma (ejemplos): mivariable[@bool] // Declara una variable que solo admite 1 o 0 ** minumero [@int] =10 / Declara una variable que solo admite números enteros y la inicializa con el valor 10/
@int
@number
@positive
@negative
@string

Vea cómo se han declarado estas variables en el archivo functions.dkh

Variables de configuración

@exec_timeout Contiene el tiempo en milisegundos que espera el intérprete por la respuesta de un proceso invocado con la función exec definida más adelante.

Registros (estructuras)

Función @

@(fieldpath)

Permite obtener el valor de un campo del registro de contexto @__context

  • fieldpath es una cadena con la ruta del miembro cuyo valor se quiere obtener

Para indicar el tipo del valor a obtener use los siguientes prefijos en fieldpath:

  • & Para obtener una referencia
  • # Para obtener un valor numérico
  • $ Para obtener un valor de cadena (opcional)

En algunas ocasiones resultará más sencillo acceder a valores (miembros) de un registro global (de contexto). El registro de contexto es una variable global denominada @__context que puede establecer previamente como una referencia a una estructura, para usarla con la función @

Ejemplo:

using miestructura
{
 @"nombre":"Juan"
 @"apellidos":"Pérez López"
 @"edad":38
 member @conyuge
 {
    @"nombre":"Lupita"
 }
}

ref @__context=miestructura // Establecer el registro de contexto para la función @

// Obtiene miembros como cadenas, observe que el uso del prefijo $ es opcional
nombrecompleto=@("nombre") + " " + @("$apellidos") 

//Obtiene un miembro como número
edad=@("#edad")

//Obtiene una referencia
ref conyuge=@("&conyuge")

//Obtiene un miembro de un miembro
nombre_conyuge=@("conyuge/nombre")

Función @@

@@(referencia, fieldpath)

Permite obtener el valor de un campo del registro indicado en referencia

  • referencia es una referencia a un registro (estructura de datos)
  • fieldpath es una cadena con la ruta del miembro cuyo valor se quiere obtener

Para indicar el tipo del valor a obtener use los siguientes prefijos en fieldpath:

  • & Para obtener una referencia
  • # Para obtener un valor numérico
  • $ Para obtener un valor de cadena (opcional)

Ejemplo:

using miestructura
{
 @"nombre":"Juan"
 @"apellidos":"Pérez López"
 @"edad":38
 member @conyuge
 {
    @"nombre":"Lupita"
 }
}

// Obtiene miembros como cadenas, observe que el uso del prefijo $ es opcional
nombrecompleto=@@(miestructura,"nombre") + " " + @@(miestructura,"$apellidos") 

//Obtiene un miembro como número
edad=@@(miestructura,"#edad")

//Obtiene una referencia
ref conyuge=@@(miestructura,"&conyuge")

//Obtiene un miembro de un miembro
nombre_conyuge=@@(miestructura,"conyuge/nombre")
Función Descripción
field.remove Elimina el campo indicado del registro y devuelve @true si tuvo éxito.
field.exist Devuelve @true si el campo indicado existe en el registro.
field.typeof Devuelve un valor numérico que indica el tipo del campo especificado. Los posibles valores de retorno son:
field.num Devuelve el valor numérico de un campo, si no existe se produce un error, si el campo no es de tipo numérico se intenta realizar la conversión automáticamente.
field.str Devuelve el valor de cadena de un campo, si no existe se produce un error, si el campo no es de tipo cadena se intenta realizar la conversión automáticamente.
field.obj Devuelve una referencia al valor del campo indicado, si no existe se produce un error.
field.dnum Devuelve el valor numérico de un campo, si el campo no es de tipo numérico se intenta realizar la conversión automáticamente, si no existe devuelve el valor predeterminado por default.
field.dstr Devuelve el valor de cadena de un campo, si el campo no es de tipo cadena se intenta realizar la conversión automáticamente, si no existe devuelve el valor predeterminado por default.
field.dobj Devuelve una referencia al valor de un campo, si no existe el campo devuelve la referencia predeterminada por default.
record.create Devuelve una referencia a un nuevo registro.
record.clear Elimina todos los campos de una estructura.
record.copy Devuelve un nuevo registro con una copia de los campos indicados.
record.copyex Devuelve un nuevo registro con una copia de los campos indicados renombrados.
record.caseinsensitive Devuelve una referencia a una copia del registro pero con insensibilidad a mayúsculas o minúsculas para los nombres de campos.

Listas

Las listas no son una estructura nativa del lenguaje Devkron, por lo que se implementan a través de objetos que implementan System.Collections.Generic.IList con estas funciones.

Las listas tienen índice base cero. | Función | | Descripción | | ----------- | ----------- | ----------- | |list.create| |Devuelve una referencia a una nueva instancia de un objeto de lista| |list.create_from_fields| |Devuelve una referencia a una nueva lista formada por los nombres de todos los campos de un registro. | |list.count| |Devuelve la cantidad de elementos de una lista. | |list.add| |Agrega un elemento a la lista | |list.ins| |Inserta un elemento en la posición especificada de la lista | |list.set| |Establece un elemento en la posición indicada | |list.obj| |Devuelve una referencia al valor en la posición indicada de la lista | |list.str| |Devuelve como cadena el valor de la posición indicada de la lista | |list.num| |Devuelve como número el valor de la posición indicada de la lista | |list.del| |Elimina el elemento de la lista en la posición indicada | |list.clear| |Elimina todos los elementos de la lista |

Tablas

Las tablas (en memoria) se implementan a través de las clases de System.Data.DataTables con estas funciones para crear y manipular estructura y datos. | Función | | Descripción | | ----------- | ----------- | ----------- | |table.rows| |Devuelve la cantidad de filas de una tabla | |table.cols| |Devuelve la cantidad de columnas de una tabla | |cell.num| |Devuelve el valor numérico de una celda ubicada en la posición de fila y columna indicada | |cell.numc| | Devuelve el valor numérico de una celda ubicada en la posición de fila y columna indicada por nombre | |cell.dnum| |Devuelve el valor numérico de una celda ubicada en la posición de fila y columna indicada | |cell.dnumc| |Devuelve el valor numérico de una celda ubicada en la posición de fila y columna indicada por nombre | |cell.str| |Devuelve el valor de cadena de una celda ubicada en la posición de fila y columna indicada | |cell.strc| |Devuelve el valor de cadena de una celda ubicada en la posición de fila y columna indicada por nombre | |cell.dstr| |Devuelve el valor de cadena de una celda ubicada en la posición de fila y columna indicada | |cell.dstrc| |Devuelve el valor de cadena de una celda ubicada en la posición de fila y columna indicada por nombre | |cell.obj| |Devuelve una referencia al valor de una celda ubicada en la posición de fila y columna indicada | |cell.objc| |Devuelve una referencia al valor de una celda ubicada en la posición de fila y columna indicada por nombre. | |col.caption| |Establece el título de la columna indicada por su índice | |col.captionc| |Establece el título de la columna indicada por su nombre | |col.get| |Devuelve una referencia al objeto subyacente a la columna indicada por su índice | |col.getc| |Devuelve una referencia al objeto subyacente a la columna indicada por su nombre | |row.get| |Devuelve una referencia a un registro que contiene todos los datos de la fila indicada. | |cell.set| |Establece el valor de una celda de la tabla por el índice de su fila y columna | |cell.setc| |Establece el valor de una celda de la tabla en la fila y columna indicada por nombre | |table.create| |Devuelve una referencia hacia una nueva tabla con las columnas correspondientes a los campos del registro indicado | |table.new| |Devuelve una referencia hacia una tabla vacía| |row.del| |Elimina la fila indicada | |row.add| |Agrega los datos del registro indicado como una nueva fila al final de la tabla, los nombres de los campos del registro deben coincidir con los nombres de las columnas. | |row.ins| |Inserta los datos del registro indicado como una nueva fila en la posición señalada de la tabla, los nombres de los campos del registro deben coincidir con los nombres de las columnas. | |row.upd| |Actualiza los datos del registro indicado en la fila señalada de la tabla, los nombres de los campos del registro deben coincidir con los nombres de las columnas. | |table.pivot| |Devuelve una referencia a una nueva tabla que contiene la representación transversal de otra. | |table.from| |Deserializa una tabla a partir de una cadena y devuelve una referencia | |table.to| |Serializa una tabla y devuelve una cadena que la representa. |

Cadenas y textos

Función Descripción
trim Devuelve una cadena sin los caracteres vacíos (espacio y tabulador) del inicio y final de la cadena dada.
ltrim Devuelve una cadena sin los caracteres vacíos (espacio y tabulador) del inicio de la cadena dada.
rtrim Devuelve una cadena sin los caracteres vacíos (espacio y tabulador) del final de la cadena dada.
right Devuelve una subcadena que inicia en la cantidad de caracteres indicados a partir del final de la cadena original.
left Devuelve una subcadena que omite los caracteres al inicio de la cadena original indicados.
substring Devuelve una subcadena que inicia en el carácter indicado y tiene la longitud indicada.
lremove Devuelve una subcadena sin los caracteres después de la posición indicada a partir del inicio de la cadena dada.
remove Devuelve una subcadena sin los caracteres indicados del inicio y longitud en la cadena dada.
rremove Devuelve una subcadena sin los caracteres indicados contados a partir del final de la cadena dada.
length Devuelve la longitud de una cadena.
toupper Devuelve la cadena dada en mayúsculas.
tolower Devuelve la cadena dada en minúsculas.
split Devuelve una referencia a una lista de subcadenas delimitadas por el carácter indicado en la cadena dada.
replace Devuelve una cadena en donde se ha reemplazado una subcadena por otra en una cadena dada.
padright Devuelve una cadena de la longitud indicada que incluye a la cadena dada alineada a la derecha con las posiciones vacías llenas con el carácter indicado.
padleft Devuelve una cadena de la longitud indicada que incluye a la cadena dada alineada a la izquierda con las posiciones vacías llenas con el carácter indicado.
contains Devuelve cierto si una cadena contiene a la subcadena indicada.
findstrex Devuelve la posición de inicio (base cero) de la subcadena buscada en la cadena dada.
findstr Devuelve la posición de inicio (base cero) de la subcadena buscada en la cadena dada sin distinción de mayúsculas/minúsculas.
ranychars Devuelve una cadena donde se han reemplazado cualquiera de los caracteres indicados por el carácter señalado.
ranydiffchars Devuelve una cadena donde se han reemplazado cualquiera de los caracteres diferentes a los indicados por el carácter señalado.
cut Devuelve una cadena recortada a la cantidad de caracteres especificada, si la cadena dada es de longitud menor a lo solicitado la devuelve completa.
format Devuelve la representación de un número con el formato indicado.
isany Devuelve @true si el carácter indicado es alguno de los que forman la cadena dada.
containschar Devuelve @true si alguno de los caracteres de la cadena de caracteres está en la cadena dada.
containsword Devuelve @true si alguna de las palabras delimitadas por comas de la cadena de palabras está en la cadena dada.
isanyword Devuelve @true si alguna de las palabras delimitadas por comas de la cadena de palabras es la cadena.
from.args Devuelve un registro con los pares clave valor delimitados por el carácter separado indicado de la lista de argumentos dada.
from.argsn Devuelve un registro con los pares clave valor delimitados por el carácter separado indicado de la lista de argumentos dada.
text.create Devuelve una referencia a un nuevo objeto de buffer de texto (basado en StringBuilder).
text.echo Agrega una cadena a un buffer de texto.
text.say Agrega una línea de texto (adiciona la secuencia de retorno de carro y avance de línea) a un buffer de texto.
text.clear Limpia un buffer de texto.
text.get Devuelve una cadena a partir de un buffer de texto.

Fecha y hora

Función Descripción
now Devuelve una referencia a una estructura DateTime de .Net que corresponde a la fecha y hora actuales
str2dt Devuelve una referencia a una estructura DateTime de .Net que corresponde a la cadena indicada si es posible hacer la conversión.
date_str Devuelve una cadena que corresponde con la fecha (DateTime) indicada con el formato especificado.

Codificación y encriptación

Función Descripción
url_encode Devuelve una cadena codificada que puede usarse como parte de una url
url_dcode Devuelve una cadena decodificada que previamente fue codificada por url_encode
to.base64 Devuelve la cadena codificada en base64 utf8
from.base64 Devuelve la cadena decodificada de base64 utf8
to.b64 Devuelve la cadena codificada en base64 con la codificación de caracteres indicada
from.b64 Devuelve la cadena decodificada de base64 con la codificación de caracteres indicada
encoding Devuelve una referencia a un objeto Encoding de .Net con base en la cadena dada
encryp Devuelve una cadena encriptada con la clave dada
decryp Devuelve una cadena desencriptada con la clave dada
md5 Devuelve la firma md5 de la cadena (considerada una secuencia de bytes ASCII)
md5e Devuelve la firma md5 de la cadena como secuencia de bytes codificados como se indique.
uuid Devuelve una cadena que representa un Identificado Global Único de 128bits.
hmacsha256 Devuelve una cadena que representa el HMAC de un mensaje con cifrado SHA 256

Archivos y carpetas

Función Descripción
commandline Devuelve una referencia a un registro que contiene los pares clave/valor pasados por línea de comando
commandlinen Devuelve una referencia a un registro que contiene los pares clave/valor pasados por línea de comando y además identifica aquellos que deben considerarse de tipo numérico
exec Ejecuta un proceso (programa ejecutable) del sistema y devuelve su salida de consola como una cadena, desencadena una excepción si ocurre el ejecutable termina con un error.
file.newer Devuelve un número que indica cuál de dos archivos es más nuevo (con base en su fecha de modificación).
file.exists Devuelve @true si el archivo indicado existe
dir.exists Devuelve @true si el directorio indicado existe
dir.delete Elimina el directorio indicador
dir.create Crea el directorio indicado
file.rbytes Devuelve una referencia a un array de Bytes que es el contenido del archivo indicado.
file.wbytes Escribe un array de bytes en el archivo indicado sobrescribiendo su contenido (si existe y si no lo crea).
file.delete Elimina el archivo indicado
file.extension Devuelve una cadena con la extensión del archivo indicado
file.name Devuelve el nombre con extensión del archivo indicado
dir.name Devuelve el nombre del directorio indicado
file.justname Devuelve solo el nombre (sin extensión) del archivo indicado
list.dirs Devuelve una referencia a una lista de cadenas que contiene todos los nombres de directorios de la ubicación indicada.
list.files Devuelve una referencia a una lista de cadenas que contiene todos los nombres de archivos de la ubicación indicada.
dir.ensure Verifica si un directorio existe y si no lo crea.
file.copy Copia el archivo indicado y sobrescribe el destino en caso de que exista.
file.wtext Escribe la cadena de texto indicada en el archivo especificado con codificación utf8 sin BOM, si el archivo ya existe lo sobrescribe.
file.wtexte Escribe la cadena de texto indicada en el archivo especificado con la codificación especificada, si el archivo ya existe lo sobrescribe.
file.rtext Devuelve una cadena con el contenido del archivo especificado asumiendo que está codificado utf8
file.rtexte Devuelve una cadena con el contenido del archivo especificado con la codificación especificada
file.len Devuelve un número que representa el tamaño en bytes del archivo indicado
path.concat Devuelve una cadena de ruta que es la concatenación de las dos rutas dadas.
dir.struct Devuelve una referencia a una lista de cadenas que representa todas las carpetas de la estructura de directorios de la ruta dada

Utilidades


Función Descripción
parse.bool Devuelve un valor numérico (booleado) tras el análisis de una cadena dada
parse.num Devuelve un valor numérico tras el análisis de una cadena dada
field.parse.dbool Devuelve un valor numérico (booleado) tras el análisis de un campo de un registro
field.parse.dnum Devuelve un valor numérico tras el análisis de un campo de un registro
foreach.fstr Itera los campos de un registro y permite usar sus valores como cadenas con el apoyo de la sentencia go
foreach.fnum Itera los campos de un registro y permite usar sus valores como números con el apoyo de la sentencia go
foreach.fobj Itera los campos de un registro y permite usar sus valores como referencias a objetos con el apoyo de la sentencia go
foreach.lstr Itera una lista y permite usar sus valores como cadenas con el apoyo de la sentencia go
foreach.lnum Itera una lista y permite usar sus números como cadenas con el apoyo de la sentencia go
foreach.lobj Itera una lista y permite usar sus valores como referencias a objetos con el apoyo de la sentencia go


```DKL #include "dkli.dkh" #! program "ejemplo" { #include "functions.dkh" new registro { @"nombre":"Juan" @"apellido1":"López" @"apellido2":"García" @"Identidad de género":"Hombre" } go foreach.fstr(index:i,key:k, value:v) with(registro) { do print("Índice:"+str(i)+" clave:"+k + " valor:"+v) } ref lista=list.create() do list.add(lista,"Uno") do list.add(lista,"Dos") do list.add(lista,"Tres") go foreach.lstr(index:i, value:v) with(lista) { do print("Índice:"+str(i)+ " valor:"+v) } } ```