Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Funciones builtin

Usables como expresión en cualquier lugar, p.ej. &Usuario = USERID(). La mayoría son de cero argumentos con tipo de retorno fijo; Val() es la excepción (ver su propia entrada).

FunciónRetornoDescripción
USERID()char(10)Perfil de usuario IBM i que ejecuta este programa. Sin argumentos.
PGNAME()char(10)Nombre de objeto de este mismo programa — constante de compilación, no una consulta en tiempo de ejecución. Sin argumentos.
TODAY()dateFecha actual del sistema. Sin argumentos.
TIME()char(8)Hora actual del sistema formateada "HH:MM:SS" (8 caracteres). Sin argumentos.
Val(&CharVariable)igual al destino de la asignaciónParsea un valor char a Number, usando la precisión/escala del destino de la asignación — a diferencia de las demás builtin, no tiene tipo de retorno fijo. Sólo válida directamente como &NumberVariable = Val(&CharExpr); usarla en cualquier otro lugar (anidada en otra expresión, como argumento de Do/Call, etc.) es un error.
CurrentInput()char(30)Ver @Source: Event y Screen.
String(&NumberVariable, integerDigits[, decimalDigits])char(integerDigits [+ 1 + decimalDigits])Convierte un Number a char, p.ej. para concatenarlo en un Message(...) (que sólo acepta texto). integerDigits/decimalDigits deben ser literales enteros (constantes de compilación) — el ancho del retorno depende de ellos. decimalDigits es opcional (default 0, sin separador decimal en el resultado). Ancho fijo, rellenado con ceros (sin supresión de ceros a la izquierda); no maneja negativos de forma especial.
SubString(&Variable, inicio, longitud)char(longitud)Recorta un pedazo de ancho fijo de un valor char (variable o literal) para que quepa en una variable más chica — p.ej. &Corto40 = SubString(&Largo120, 1, 40). Sin esto, asignar un char más ancho directo a uno más angosto es error de compilación. inicio/longitud deben ser literales enteros. Cuando el tamaño del origen se conoce en tiempo de compilación, que inicio + longitud - 1 lo exceda también es error de compilación.
Trim(&Variable)igual al argumento (char/varchar)Quita blancos a izquierda y derecha. Un solo argumento.
LTrim(&Variable)igual al argumentoQuita blancos a la izquierda. Un solo argumento.
RTrim(&Variable)igual al argumentoQuita blancos a la derecha. Un solo argumento.
Length(&Variable)numberTamaño de un valor char/varchar: para varchar, el contenido real en tiempo de ejecución; para char, su longitud fija declarada. Un solo argumento.
IndexOf(needle, &haystack)numberBusca needle dentro de haystack y devuelve la posición cruda (1-based si se encuentra, 0 si no), sin conversión aplicada. Exactamente dos argumentos (texto a buscar, texto donde buscar).

Fecha, hora y timestamp

Year/Month/Days/Hour/Minute/Second son polimórficas: aceptan date/time/timestamp según corresponda (Year/Month/Days con date o timestamp; Hour/Minute/Second con time o timestamp) — no hace falta un nombre distinto por tipo.

format (donde aplica) es siempre opcional: si se omite, cae al valor configurado en @GeneratorConfig (Date Format/Time Format/Timestamp Format); si tampoco hay configuración, se usa el formato por defecto del sistema.

FunciónRetornoDescripción
Year(&Variable)number(4)Año de un date/timestamp.
Month(&Variable)number(2)Mes de un date/timestamp.
Days(&Variable)number(2)Día del mes de un date/timestamp.
Hour(&Variable)number(2)Hora de un time/timestamp.
Minute(&Variable)number(2)Minuto de un time/timestamp.
Second(&Variable)number(2)Segundo de un time/timestamp.
DateDiff(&Fecha1, &Fecha2, Unidad)numberDiferencia entre dos date, en Days/Months/Years (palabra suelta, no string). Positivo cuando Fecha1 es posterior a Fecha2, negativo en caso contrario.
TimeDiff(&Hora1, &Hora2, Unidad)numberIgual que DateDiff, sobre time, con Hours/Minutes/Seconds.
TimestampDiff(&Ts1, &Ts2, Unidad)numberIgual que DateDiff, sobre timestamp, con las 6 unidades habilitadas: Seconds/Minutes/Hours/Days/Months/Years.
DateAdd(&Fecha, cantidad, Unidad)dateSuma (o resta, si cantidad es negativa) días/meses/años a una fecha. cantidad puede ser cualquier expresión number (no sólo literal).
TimeAdd(&Hora, cantidad, Unidad)timeIgual que DateAdd, sobre time, con Hours/Minutes/Seconds.
TimestampAdd(&Ts, cantidad, Unidad)timestampIgual que DateAdd, sobre timestamp, con las 6 unidades.
IsDate(valor[, format])number(1)Valida si valor (char/varchar/number) es una fecha válida en format (opcional — uno de Iso/Usa/Eur/Jis/Mdy/Dmy/Ymd/Jul). Devuelve 1/0 (WARP no tiene tipo booleano). No es una expresión pura — igual que Val(), sólo es válida directamente como &NumberVariable = IsDate(...).
IsTime(valor[, format])number(1)Igual que IsDate, sobre time (format uno de Hms/Iso/Usa/Eur/Jis).
IsTimestamp(valor[, format])number(1)Igual que IsDate, sobre timestamp (format uno de Iso/Usa/Eur/Jis). Iso es el formato recomendado y de mayor compatibilidad.
StringToDate(string[, format])dateConvierte char/varchar a date.
NumberToDate(number[, format])dateConvierte number a date — mismas reglas de format que StringToDate.
StringToTime(string[, format])timeConvierte char/varchar a time.
StringToTimestamp(string[, format])timestampConvierte char/varchar a timestamp.
DateToString(&Fecha[, format])char(10)Convierte date a texto — mismas reglas de format.
TimeToString(&Hora[, format])char(8)Convierte time a texto.
TimestampToString(&Ts[, format])char(26)Convierte timestamp a texto (26 = ancho ISO con microsegundos).
Now()timestampTimestamp actual del sistema. Sin argumentos.

Ejemplos

&Usuario = USERID()
&Programa = PGNAME()
&FechaHoy = TODAY()
&HoraActual = TIME()

&Cantidad = Val(&CantidadTexto)

Message("Total: " + String(&Total, 9, 2), Info)

&Corto = SubString(&Largo, 1, 40)
&Limpio = Trim(&ConEspacios)
&Tam = Length(&Descripcion)
&Pos = IndexOf("@", &Email)

&FechaVencimiento = DateAdd(&FechaHoy, 30, Days)
&DiasHastaVencer = DateDiff(&FechaVencimiento, &FechaHoy, Days)
&EsFechaValida = IsDate(&TextoFecha, Dmy)

&Ahora = Now()
&HorasTranscurridas = TimestampDiff(&Ahora, &Inicio, Hours)