Ir al contenido principal

Sintaxis y estructura

Sintaxis Basic
: La función «Custom Scripting» de IndySoft ejecuta código escrito en sintaxis Basic. La sintaxis básica actual admite:

·sub .. fin y función .. declaraciones de fin

·directivas byref y dim

·if .. entonces... o bien... fin del constructor

·for .. a... paso... siguiente constructor

·do .. mientras que... bucle y haz... bucle .. mientras que los constructores

·hacen... hasta que... bucle y haz... bucle .. hasta los constructores

·^ , * , / , y , + , - , o , <> , >=, <= , = , > , < , div , mod , xor , shl , shr y los operadores

·try .. excepto y prueba... por último, bloquea

·select case .. fin de la selección del constructor

·constructores de matrices (x:=[ 1, 2, 3 ];)

·instrucción «exit»

·acceso a propiedades y métodos de objetos ( ObjectName.SubObject.Property )

Estructura del script

La estructura del script se compone de dos bloques principales:

a) declaraciones de funciones y subrutinas, y

b) bloque «main».

Ambos son opcionales, pero al menos uno debe estar presente en el script.

Algunos ejemplos:

GUION 1:

SUB DoSomething

CallSomething

END SUB

CallSomethingElse

GUION 2:

Llamar a otra cosa

GUION 3:

FUNCIÓN MyFunction

MyFunction = 'Ok!'

END FUNCIÓN

Al igual que en el lenguaje Basic estándar, las instrucciones de una sola línea pueden separarse con el carácter «:».

Identificadores

Nombres de identificadores en el script (nombres de variables, nombres de funciones y procedimientos, etc.) Sigue las reglas más comunes en Basic:

  1. | debe comenzar con una letra (a..z o A..Z) o con «_», y puede ir seguido de caracteres alfanuméricos o del carácter «_».2. | No puede contener ningún otro carácter ni espacios. Identificadores válidos:

VarName

_Some

V1A2 _____Some____

Identificadores no válidos:

2Var

Mi nombre es Some-more

Esto no es válido

Las sentencias de asignación

Las sentencias de asignación (asignar un valor o el resultado de una expresión a una variable o a la propiedad de un objeto) se escriben utilizando el operador «=».

Ejemplos:

MyVar = 2

Button.Caption = 'Esto ' + 'está bien.'

Las cadenas de caracteres

(secuencias de caracteres) se declaran en Basic utilizando el carácter de comillas dobles ('').

Algunos ejemplos:

A = 'Esto es un texto'

; Str = 'Texto ' + 'concat'

Comentarios:

. Se pueden insertar comentarios dentro del código. Puedes usar los caracteres ' o REM. El comentario terminará al final de la línea.

Ejemplos:

' Este es un comentario antes de ShowMessage

ShowMessage('Ok')

REM Este es otro comentario ShowMessage('¡Más ok!')

' Y este es un comentario

' de dos líneas

ShowMessage('Fin de los ok')

Variables

No es necesario declarar los tipos de las variables en el script. Por lo tanto, para declarar una variable basta con utilizar la directiva DIM y su nombre.

No es necesario declarar las variables si la propiedad OptionExplicit del script está establecida en «false». En este caso, las variables se declaran de forma implícita

. Si quieres tener más control sobre el script, establece la propiedad OptionExplicit en «true». Esto provocará un error de compilación de tipo «

» si se utiliza la variable «variable» sin haberla declarado en el script.

Ejemplos:

GUION 1:

SUB Msg

DIM S

S = '¡Hola, mundo!'

ShowMessage(S)

END SUB

GUION 2:

DIM A

A = 0

A = A+1

ShowMessage(A)

Ten en cuenta que, si la propiedad OptionExplicit del script está establecida en «false», no es necesario declarar las variables en ninguno de los scripts

mencionados anteriormente.

Índices

Las cadenas, las matrices y las propiedades de las matrices se pueden indexar utilizando los caracteres «[» y «]». Por ejemplo, si Str es una variable de cadena, la expresión de «

» Str[3] devuelve el tercer carácter de la cadena denotada por Str, mientras que Str[I + 1] devuelve el carácter

inmediatamente posterior al indexado por I.

Más ejemplos:

MyChar = MyStr[2]

; MyStr[1] = 'A'; MyArray[1,2] = 1530

; Lines.Strings[2] = 'Some text'

Matrices

Script admite constructores de matrices y matrices de variantes. Para crear una matriz, utiliza los caracteres «[» y «]». Puedes utilizar <br /> <br /> para crear constructores de matrices anidadas con índices múltiples. A continuación, puedes acceder a las matrices mediante índices. Si la matriz tiene varios índices,

separa los índices con «,».

Si la variable es una matriz de variantes, el script admite automáticamente la indexación en dicha variable. Una variable es una matriz variante si se ha asignado mediante un constructor de matrices (

), si es una referencia directa a una variable de Delphi que es una matriz variante (véase más adelante la integración de Delphi y .

) o si se ha creado mediante el procedimiento VarArrayCreate.

En los scripts, los índices de las matrices comienzan en 0. Algunos ejemplos:

NewArray = [2, 4, 6, 8]

; Num = NewArray[1] //Num recibe «4»

; MultiArray = [ ['verde', 'rojo', 'azul'], ['manzana', 'naranja', 'limón'] ]

; Str = MultiArray[0, 2] //Str recibe «azul»

; MultiArray[1, 1] = 'nueva naranja'

Sentencias «if»

Existen dos formas de sentencia «if»: «if...then...end if» y «if...then...else...end if». Al igual que en el caso básico, si la expresión «

» es verdadera, se ejecutan las instrucciones. Si hay una parte «else» y la expresión es falsa, se ejecutan las instrucciones que siguen al «else».

Ejemplos:

IF J <> 0 THEN

Result = I/J

END IF

IF J = 0 THEN

Exit Sub

ELSE

Result = I/J

END IF

IF J <> 0 THEN

Resultado = I/J

Recuento = Recuento + 1

ELSE

Hecho = True

END IF

Las sentencias «while»

Una sentencia «while» se utiliza para repetir sentencias mientras una condición de control (expresión) se evalúe como verdadera. La condición del control «

» se evalúa antes de las instrucciones. Por lo tanto, si la condición de control es falsa en la primera iteración, la secuencia de instrucciones «

» nunca se ejecuta. La instrucción «while» ejecuta la instrucción que la compone repetidamente, evaluando la expresión «testing» antes de «

» en cada iteración. Mientras la expresión devuelva «True», la ejecución continúa.

Ejemplos:

WHILE (Data[I] <> X)

I = I + 1

END WHILE

WHILE (I > 0)

IF Odd(I) THEN

Z = Z * X

END IF

X = Sqr(X)

END WHILE

WHILE (not Eof(InputFile))

Readln(InputFile, Line)

Process(Line)

END WHILE

Instrucciones de bucle:

Script admite instrucciones de bucle. Las sintaxis posibles son:

DO WHILE expr sentencias LOOP

DO UNTIL expr sentencias LOOP

DO sentencias LOOP WHILE expr

DO sentencia LOOP UNTIL expr

Las instrucciones se ejecutarán MIENTRAS la expresión sea verdadera, o HASTA que la expresión sea verdadera. Si la expresión aparece antes de las sentencias, la condición del control «

» se evaluará antes de la iteración. De lo contrario, la condición de control se comprobará tras la iteración.

Ejemplos:

HACER

K = I mod J

I = J

J = K

BUCLE HASTA QUE J = 0

HACER HASTA QUE I >= 0

Escribir('Introduce un valor (0..9): ') Leer(I)

BUCLE

DO

K = I mod J

I = J

J = K

LOOP WHILE J <> 0

DO WHILE I < 0

Write('Introduce un valor (0..9): ')

Readln(I)

LOOP

Para las sentencias «

», Scripter admite sentencias con la siguiente sintaxis: FOR contador = valorInicial TO valorFinal STEP valorPaso

sentencias NEXT.

Para el conjunto de instrucciones con el contador establecido en el valor inicial, se repite la ejecución de la instrucción hasta «siguiente» y se incrementa el valor del contador en el valor de incremento, hasta que el contador alcance el valor final. El parámetro «step» es opcional; si se omite, se considera que «stepValue» es 1 (

).

Ejemplos:

GUION 1:

FOR c = 1 TO 10 STEP 2

a = a + c

NEXT

GUION 2:

FOR i = a TO b

j = i ^ 2

sum = sum + j

NEXT

Instrucciones «select case»

Scripter admite las instrucciones «select case» con la siguiente sintaxis:

SELECT CASE selectorExpression

CASE caseexpr1

statement1

CASE caseexprn

statementn

CASE ELSE

elsestatement

END SELECT

Si la expresión de selección coincide con el resultado de una de las expresiones de los casos, se ejecutarán las sentencias correspondientes.

De lo contrario, se ejecutará la instrucción «else». El resto de la instrucción «case» es opcional.

Ejemplo:

SELECT CASE uppercase(Fruit)

; CASE 'lime' ShowMessage('green');

; CASE 'orange' ShowMessage('orange');

; CASE 'apple' ShowMessage('red');

; CASE ELSE ShowMessage('black');

; END SELECT |