# 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: ``` DKL 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: ``` DKL 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](field/field.remove.md)| |Elimina el campo indicado del registro y devuelve @true si tuvo éxito.| |[field.exist](field/field.exist.md)| |Devuelve @true si el campo indicado existe en el registro. | |[field.typeof](field/field.typeof.md)| | Devuelve un valor numérico que indica el tipo del campo especificado. Los posibles valores de retorno son: | |[field.num](field/field.num.md)| |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](field/field.str.md)| |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](field/field.obj.md)| |Devuelve una referencia al valor del campo indicado, si no existe se produce un error. | |[field.dnum](field/field.dnum.md)| |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](field/field.dstr.md)| |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](field/field.dobj.md)| |Devuelve una referencia al valor de un campo, si no existe el campo devuelve la referencia predeterminada por default. | |[record.create](record/record.create.md)| |Devuelve una referencia a un nuevo registro. | |[record.clear](record/record.clear.md)| |Elimina todos los campos de una estructura. | |[record.copy](record/record.copy.md)| |Devuelve un nuevo registro con una copia de los campos indicados. | |[record.copyex](record/record.copyex.md)| |Devuelve un nuevo registro con una copia de los campos indicados renombrados.| |[record.caseinsensitive](record/record.caseinsensitive.md)| |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](list/list.create.md)| |Devuelve una referencia a una nueva instancia de un objeto de lista| |[list.create\_from\_fields](list/list.createfromfields.md)| |Devuelve una referencia a una nueva lista formada por los nombres de todos los campos de un registro. | |[list.count](list/list.count.md)| |Devuelve la cantidad de elementos de una lista. | |[list.add](list/list.add.md)| |Agrega un elemento a la lista | |[list.ins](list/list.ins.md)| |Inserta un elemento en la posición especificada de la lista | |[list.set](list/list.set.md)| |Establece un elemento en la posición indicada | |[list.obj](list/list.obj.md)| |Devuelve una referencia al valor en la posición indicada de la lista | |[list.str](list/list.str.md)| |Devuelve como cadena el valor de la posición indicada de la lista | |[list.num](list/list.num.md)| |Devuelve como número el valor de la posición indicada de la lista | |[list.del](list/list.del.md)| |Elimina el elemento de la lista en la posición indicada | |[list.clear](list/list.clear.md)| |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](tables/table.rows.md)| |Devuelve la cantidad de filas de una tabla | |[table.cols](tables/table.cols.md)| |Devuelve la cantidad de columnas de una tabla | |[cell.num](tables/cell.num.md)| |Devuelve el valor numérico de una celda ubicada en la posición de fila y columna indicada | |[cell.numc](tables/cell.numc.md)| | Devuelve el valor numérico de una celda ubicada en la posición de fila y columna indicada por nombre | |[cell.dnum](tables/cell.dnum.md)| |Devuelve el valor numérico de una celda ubicada en la posición de fila y columna indicada | |[cell.dnumc](tables/cell.dnumc.md)| |Devuelve el valor numérico de una celda ubicada en la posición de fila y columna indicada por nombre | |[cell.str](tables/cell.str.md)| |Devuelve el valor de cadena de una celda ubicada en la posición de fila y columna indicada | |[cell.strc](tables/cell.strc.md)| |Devuelve el valor de cadena de una celda ubicada en la posición de fila y columna indicada por nombre | |[cell.dstr](tables/cell.dstr.md)| |Devuelve el valor de cadena de una celda ubicada en la posición de fila y columna indicada | |[cell.dstrc](tables/cell.dstrc.md)| |Devuelve el valor de cadena de una celda ubicada en la posición de fila y columna indicada por nombre | |[cell.obj](tables/cell.obj.md)| |Devuelve una referencia al valor de una celda ubicada en la posición de fila y columna indicada | |[cell.objc](tables/cell.objc.md)| |Devuelve una referencia al valor de una celda ubicada en la posición de fila y columna indicada por nombre. | |[col.caption](tables/col.caption.md)| |Establece el título de la columna indicada por su índice | |[col.captionc](tables/col.captionc.md)| |Establece el título de la columna indicada por su nombre | |[col.get](tables/col.get.md)| |Devuelve una referencia al objeto subyacente a la columna indicada por su índice | |[col.getc](tables/col.getc.md)| |Devuelve una referencia al objeto subyacente a la columna indicada por su nombre | |[row.get](tables/row.get.md)| |Devuelve una referencia a un registro que contiene todos los datos de la fila indicada. | |[cell.set](tables/cell.set.md)| |Establece el valor de una celda de la tabla por el índice de su fila y columna | |[cell.setc](tables/cell.setc.md)| |Establece el valor de una celda de la tabla en la fila y columna indicada por nombre | |[table.create](tables/table.create.md)| |Devuelve una referencia hacia una nueva tabla con las columnas correspondientes a los campos del registro indicado | |[table.new](tables/table.new.md)| |Devuelve una referencia hacia una tabla vacía| |[row.del](tables/row.del.md)| |Elimina la fila indicada | |[row.add](tables/row.add.md)| |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](tables/row.ins.md)| |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](tables/row.upd.md)| |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](tables/table.pivot.md)| |Devuelve una referencia a una nueva tabla que contiene la representación transversal de otra. | |[table.from](tables/table.from.md)| |Deserializa una tabla a partir de una cadena y devuelve una referencia | |[table.to](tables/table.to.md)| |Serializa una tabla y devuelve una cadena que la representa. | ## Cadenas y textos | Función | | Descripción | | ----------- | ----------- | ----------- | |[trim](strings/trim.md)| |Devuelve una cadena sin los caracteres vacíos (espacio y tabulador) del inicio y final de la cadena dada. | |[ltrim](strings/ltrim.md)| |Devuelve una cadena sin los caracteres vacíos (espacio y tabulador) del inicio de la cadena dada. | |[rtrim](strings/rtrim.md)| |Devuelve una cadena sin los caracteres vacíos (espacio y tabulador) del final de la cadena dada. | |[right](strings/right.md)| |Devuelve una subcadena que inicia en la cantidad de caracteres indicados a partir del final de la cadena original. | |[left](strings/left.md) | | Devuelve una subcadena que omite los caracteres al inicio de la cadena original indicados.| |[substring](strings/substring.md)| |Devuelve una subcadena que inicia en el carácter indicado y tiene la longitud indicada. | |[lremove](strings/lremove.md)| |Devuelve una subcadena sin los caracteres después de la posición indicada a partir del inicio de la cadena dada. | |[remove](strings/remove.md)| |Devuelve una subcadena sin los caracteres indicados del inicio y longitud en la cadena dada.| |[rremove](strings/rremove.md)| |Devuelve una subcadena sin los caracteres indicados contados a partir del final de la cadena dada. | |[length](strings/length.md)| |Devuelve la longitud de una cadena. | |[toupper](strings/toupper.md)| |Devuelve la cadena dada en mayúsculas. | |[tolower](strings/tolower.md)| |Devuelve la cadena dada en minúsculas. | |[split](strings/split.md)| |Devuelve una referencia a una lista de subcadenas delimitadas por el carácter indicado en la cadena dada. | |[replace](strings/replace.md)| |Devuelve una cadena en donde se ha reemplazado una subcadena por otra en una cadena dada.| |[padright](strings/padright.md)| |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](strings/padleft.md)| |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](strings/contains.md)| |Devuelve cierto si una cadena contiene a la subcadena indicada. | |[findstrex](strings/findstrex.md)| |Devuelve la posición de inicio (base cero) de la subcadena buscada en la cadena dada.| |[findstr](strings/findstr.md)| |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](strings/ranychars.md)| |Devuelve una cadena donde se han reemplazado cualquiera de los caracteres indicados por el carácter señalado. | |[ranydiffchars](strings/ranydiffchars.md)| |Devuelve una cadena donde se han reemplazado cualquiera de los caracteres diferentes a los indicados por el carácter señalado.| |[cut](strings/cut.md)| |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](strings/format.md)| |Devuelve la representación de un número con el formato indicado. | |[isany](strings/isany.md)| |Devuelve @true si el carácter indicado es alguno de los que forman la cadena dada. | |[containschar](strings/containschar.md)| |Devuelve @true si alguno de los caracteres de la cadena de caracteres está en la cadena dada. | |[containsword](strings/containsword.md)| |Devuelve @true si alguna de las palabras delimitadas por comas de la cadena de palabras está en la cadena dada. | |[isanyword](strings/isanyword.md)| |Devuelve @true si alguna de las palabras delimitadas por comas de la cadena de palabras es la cadena. | |[from.args](strings/from.args.md)| |Devuelve un registro con los pares clave valor delimitados por el carácter separado indicado de la lista de argumentos dada. | |[from.argsn](strings/from.argsn.md)| |Devuelve un registro con los pares clave valor delimitados por el carácter separado indicado de la lista de argumentos dada. | |[text.create](strings/text.create.md)| |Devuelve una referencia a un nuevo objeto de buffer de texto (basado en StringBuilder). | |[text.echo](strings/text.echo.md)| |Agrega una cadena a un buffer de texto. | |[text.say](strings/text.say.md)| |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](strings/text.clear.md)| |Limpia un buffer de texto. | |[text.get](strings/text.get.md)| |Devuelve una cadena a partir de un buffer de texto. | <br> ### Fecha y hora | Función | | Descripción | | ----------- | ----------- | ----------- | |[now](fecha_y_hora/now.md)| |Devuelve una referencia a una estructura DateTime de .Net que corresponde a la fecha y hora actuales | |[str2dt](fecha_y_hora/str2dt.md)| |Devuelve una referencia a una estructura DateTime de .Net que corresponde a la cadena indicada si es posible hacer la conversión. | |[date_str](fecha_y_hora/datestr.md)| |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](codificacion_encriptacion/url_encode.md)| |Devuelve una cadena codificada que puede usarse como parte de una url | |[url_dcode](codificacion_encriptacion/url_dcode.md)| |Devuelve una cadena decodificada que previamente fue codificada por url_encode | |[to.base64](codificacion_encriptacion/to.base64.md)| |Devuelve la cadena codificada en base64 utf8 | |[from.base64](codificacion_encriptacion/from.base64.md)| |Devuelve la cadena decodificada de base64 utf8 | |[to.b64](codificacion_encriptacion/to.b64.md)| |Devuelve la cadena codificada en base64 con la codificación de caracteres indicada | |[from.b64](codificacion_encriptacion/from.b64.md)| |Devuelve la cadena decodificada de base64 con la codificación de caracteres indicada | |[encoding](codificacion_encriptacion/encoding.md)| |Devuelve una referencia a un objeto Encoding de .Net con base en la cadena dada | |[encryp](codificacion_encriptacion/encryp.md)| |Devuelve una cadena encriptada con la clave dada | |[decryp](codificacion_encriptacion/decryp.md)| |Devuelve una cadena desencriptada con la clave dada | |[md5](codificacion_encriptacion/md5.md)| |Devuelve la firma md5 de la cadena (considerada una secuencia de bytes ASCII) | |[md5e](codificacion_encriptacion/md5e.md)| |Devuelve la firma md5 de la cadena como secuencia de bytes codificados como se indique. | |[uuid](codificacion_encriptacion/uuid.md)| |Devuelve una cadena que representa un Identificado Global Único de 128bits. | |[hmacsha256](codificacion_encriptacion/hmacsha256.md)| |Devuelve una cadena que representa el HMAC de un mensaje con cifrado SHA 256 | ## Archivos y carpetas | Función | | Descripción | | ----------- | ----------- | ----------- | |[commandline](folders_files/commandline.md)| |Devuelve una referencia a un registro que contiene los pares clave/valor pasados por línea de comando | |[commandlinen](folders_files/commandlinen.md)| |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](folders_files/exec.md)| |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](folders_files/file.newer.md)| |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](folders_files/file.exists.md)| |Devuelve @true si el archivo indicado existe | |[dir.exists](folders_files/dir.exists.md)| |Devuelve @true si el directorio indicado existe | |[dir.delete](folders_files/dir.delete.md)| |Elimina el directorio indicador | |[dir.create](folders_files/dir.create.md)| |Crea el directorio indicado | |[file.rbytes](folders_files/file.rbytes.md)| |Devuelve una referencia a un array de Bytes que es el contenido del archivo indicado. | |[file.wbytes](folders_files/file.wbytes.md)| |Escribe un array de bytes en el archivo indicado sobrescribiendo su contenido (si existe y si no lo crea). | |[file.delete](folders_files/file.delete.md)| |Elimina el archivo indicado | |[file.extension](folders_files/file.extension.md)| |Devuelve una cadena con la extensión del archivo indicado | |[file.name](folders_files/file.name.md)| |Devuelve el nombre con extensión del archivo indicado | |[dir.name](folders_files/dir.name.md)| |Devuelve el nombre del directorio indicado | |[file.justname](folders_files/file.justname.md)| |Devuelve solo el nombre (sin extensión) del archivo indicado | |[list.dirs](folders_files/list.dirs.md)| |Devuelve una referencia a una lista de cadenas que contiene todos los nombres de directorios de la ubicación indicada. | |[list.files](folders_files/list.files.md)| |Devuelve una referencia a una lista de cadenas que contiene todos los nombres de archivos de la ubicación indicada. | |[dir.ensure](folders_files/dir.ensure.md)| |Verifica si un directorio existe y si no lo crea. | |[file.copy](folders_files/file.copy.md)| |Copia el archivo indicado y sobrescribe el destino en caso de que exista. | |[file.wtext](folders_files/file.wtext.md)| |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](folders_files/file.wtexte.md)| |Escribe la cadena de texto indicada en el archivo especificado con la codificación especificada, si el archivo ya existe lo sobrescribe. | |[file.rtext](folders_files/file.rtext.md)| |Devuelve una cadena con el contenido del archivo especificado asumiendo que está codificado utf8 | |[file.rtexte](folders_files/file.rtexte.md)| |Devuelve una cadena con el contenido del archivo especificado con la codificación especificada | |[file.len](folders_files/file.len.md)| |Devuelve un número que representa el tamaño en bytes del archivo indicado | |[path.concat](folders_files/path.concat.md)| |Devuelve una cadena de ruta que es la concatenación de las dos rutas dadas. | |[dir.struct](folders_files/dir.struct.md)| |Devuelve una referencia a una lista de cadenas que representa todas las carpetas de la estructura de directorios de la ruta dada | ## Utilidades <br> | Función | | Descripción | | ----------- | ----------- | ----------- | |[parse.bool](utilidades/parse.bool.md)| |Devuelve un valor numérico (booleado) tras el análisis de una cadena dada | |[parse.num](utilidades/parse.num.md)| |Devuelve un valor numérico tras el análisis de una cadena dada | |[field.parse.dbool](utilidades/field.parse.dbool.md)| |Devuelve un valor numérico (booleado) tras el análisis de un campo de un registro | |[field.parse.dnum](utilidades/field.parse.dnum.md)| |Devuelve un valor numérico tras el análisis de un campo de un registro | |[foreach.fstr](utilidades/foreach.fstr.md)| |Itera los campos de un registro y permite usar sus valores como cadenas con el apoyo de la sentencia go | |[foreach.fnum](utilidades/foreach.fnum.md)| |Itera los campos de un registro y permite usar sus valores como números con el apoyo de la sentencia go | |[foreach.fobj](utilidades/foreach.fobj.md)| |Itera los campos de un registro y permite usar sus valores como referencias a objetos con el apoyo de la sentencia go | |[foreach.lstr](utilidades/foreach.lstr.md)| |Itera una lista y permite usar sus valores como cadenas con el apoyo de la sentencia go | |[foreach.lnum](utilidades/foreach.lnum.md)| |Itera una lista y permite usar sus números como cadenas con el apoyo de la sentencia go | |[foreach.lobj](utilidades/foreach.lobj.md)| |Itera una lista y permite usar sus valores como referencias a objetos con el apoyo de la sentencia go | <br> <br> ```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) } } ```