<< Click to Display Table of Contents >> Navigation: Using SyncBackPro > Technical Reference > Scripting > Basic Scripting Language |
Although the Basic script syntax is very similar to VBScript, it is not identical and there are differences. See the Converting VBS to Basic section for details.
The Basic syntax supports:
•sub .. end and function .. end declarations
•byref and dim directives
•if .. then .. else .. end constructor
•for .. to .. step .. next constructor
•do .. while .. loop and do .. loop .. while constructors
•do .. until .. loop and do .. loop .. until constructors
•^ , * , / , and , + , - , or , <> , >=, <= , = , > , < , div , mod , xor , shl , shr operators
•try .. except and try .. finally blocks
•try .. catch .. end try and try .. finally .. end try blocks
•select case .. end select constructor
•array constructors (x:=[ 1, 2, 3 ];)
•exit statement
•access to object properties and methods (ObjectName.SubObject.Property)
Identifiers
Identifier names in scripts (variable names, function and procedure names, etc.) follow the most common rules in Basic: they should begin with a character (a..z or A..Z), or '_', and can be followed by alphanumeric chars or '_' char. They cannot contain any other character or spaces.
For example:
•Valid: VarName, _Some, V1A2, _____Some____
•Invalid: 2Var, My Name, Some-more, This,is,not,valid
Assign Statements
Assign statements (assign a value or expression result to a variable or object property) are built using "=".. Examples:
MyVar = 2
Button.Caption = "This " + "is ok."
New statement
The "new" statement is provided for the Basic syntax. Since you don't provide the method name in this statement, it looks for a method named "Create" in the specified class. If the method doesn't exist, the statement fails. For example:
MyLabel = new TLabel(Form1)
MyFont = new TFont
In the above examples, a method named "Create" for TLabel and TFont class will be called. The method must be registered. If the method receives parameters, you can pass the parameters in parenthesis, like the TLabel example above.
Character Strings
Strings (sequence of characters) are declared in Basic using the double quotes (") character. For example:
A = "This is a text"
Str = "Text "+"concat"
Comments
Comments can be inserted inside scripts. You can use ' chars or REM. A comment will finish at the end of the line. For example:
' This is a comment before ShowMessage
ShowMessage("Ok")
REM This is another comment
ShowMessage("More ok!")
' And this is a comment
' with two lines
ShowMessage("End of okays")
Variables
To aid with VBScript compatibility, there is no need to declare variable types or even variables themselves. However, if you wish to declare variables you can using the DIM directive and the variable name. For example:
SUB Msg
DIM S
S = "Hello world!"
ShowMessage(S)
END SUB
DIM A
A = 0
A = A+1
ShowMessage(A)
You can also declare global variables as private or public using the following syntax :
PRIVATE A
PUBLIC B
B = 0
A = B + 1
ShowMessage(A)
Variables declared with the DIM statement are public by default. Private variables are not accessible from other scripts. Variables can be default initialized with the following syntax:
DIM A = "Hello world"
DIM B As Integer = 5
Indexes
Strings, arrays and array properties can be indexed using "[" and "]" chars. For example, if Str is a string variable, the expression Str[3] returns the third character in the string denoted by Str, while Str[I + 1] returns the character immediately after the one indexed by I. For example:
MyChar = MyStr[2]
MyStr[1] = "A"
MyArray[1,2] = 1530
Lines.Strings[2] = "Some text"
Arrays
Array constructors and variant arrays are supported. To construct an an array, use "[" and "]" chars. You can construct multi-index array nesting array constructors. You can then access arrays using indexes. If the array is multi-index, separate indexes using ",".
If a variable is a variant array, then indexing in that variable is supported. A variable is a variant array if it was assigned using an array constructor, if it is a direct reference to a Delphi variable which is a variant array or if it was created using the VarArrayCreate procedure.
Arrays are 0-based index. For example:
NewArray = [ 2,4,6,8 ]
Num = NewArray[1] //Num receives "4"
MultiArray = [ ["green","red","blue"] , ["apple","orange","lemon"] ]
Str = MultiArray[0,2] //Str receives 'blue'
MultiArray[1,1] = "new orange"
If statements
There are two forms of if statement: if...then...end and the if...then...else...end if. Like normal Basic, if the if expression is true, the statement (or block) is executed. If there is an else part and the expression is false, then the statement (or block) after else is executed. For example:
FUNCTION Test(I, J)
IF J <> 0 THEN Result = I/J END IF
IF J = 0 THEN Exit Function ELSE Result = I/J END IF
IF J <> 0 THEN
Exit Function
ELSE
Result = I/J
END IF
END FUNCTION
If the IF statement is in a single line, you don't need to finish it with END IF:
IF J <> 0 THEN Result = I/J
IF J = 0 THEN Exit ELSE Result = I/J
While statements
A while statement is used to repeat a statement or a block, while a control condition (expression) is evaluated as true. The control condition is evaluated before the statement. Hence, if the control condition is false at first iteration, the statement sequence is never executed. The while statement executes its constituent statement (or block) repeatedly, testing the expression before each iteration. As long as the expression returns True, execution continues. For example:
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
loop statements
The possible syntax's are:
DO WHILE expr statements LOOP
DO UNTIL expr statements LOOP
DO statements LOOP WHILE expr
DO statement LOOP UNTIL expr
The statements will be executed WHILE expr is true, or UNTIL expr is true. If expr is before statements, then the control condition will be tested before iteration. Otherwise, control condition will be tested after iteration. For example:
DO
K = I mod J
I = J
J = K
LOOP UNTIL J = 0
DO UNTIL I >= 0
Write("Enter a value (0..9): ")
Readln(I)
LOOP
DO
K = I mod J
I = J
J = K
LOOP WHILE J <> 0
DO WHILE I < 0
Write("Enter a value (0..9): ")
Readln(I)
LOOP
For statements
For statements can have the following syntax:
FOR counter = initialValue TO finalValue STEP stepValue
statements
NEXT.
The for statement sets counter to initialValue, repeats execution of statements until "next" and then increments value of counter by stepValue, until counter reaches finalValue. The step part is optional, and if omitted stepValue is considered to be 1.
For example:
FOR c = 1 TO 10 STEP 2
a = a + c
NEXT
FOR I = a TO b
j = i ^ 2
sum = sum + j
NEXT
select case statements
Case statements have the following syntax:
SELECT CASE selectorExpression
CASE caseexpr1
statement1
…
CASE caseexprn
statementn
CASE ELSE
elsestatement
END SELECT
if selectorExpression matches the result of one of the caseexprn expressions, the respective statements will be executed. Otherwise, the elsestatement will be executed. The Else part of a case statement is optional. For example:
SELECT CASE uppercase(Fruit)
CASE "lime" ShowMessage("green")
CASE "orange"
ShowMessage("orange")
CASE "apple" ShowMessage("red")
CASE ELSE
ShowMessage("black")
END SELECT
function and sub declarations
The declaration of functions and subs is similar to Basic. Functions return values, which are returned using the implicitly declared variable (with the same name as the function) or via the Return statement. Parameters by reference can also be used, by using the BYREF directive. For example:
SUB HelloWorld
ShowMessage("Hello world!")
END SUB
SUB UpcaseMessage(Msg)
ShowMessage(Uppercase(Msg))
END SUB
FUNCTION TodayAsString
TodayAsString = DateToStr(Date)
END FUNCTION
FUNCTION Max(A,B)
IF A>B THEN
MAX = A
ELSE
MAX = B
END IF
END FUNCTION
SUB SwapValues(BYREF A, B)
DIM TEMP
TEMP = A
A = B
B = TEMP
END SUB
You can use Return statement to exit subs and functions. For functions, you can also return a valid value:
SUB UpcaseMessage(Msg)
ShowMessage(Uppercase(Msg))
Return
'This line will be never reached
ShowMessage("never displayed")
END SUB
FUNCTION TodayAsString
Return DateToStr(Date)
END FUNCTION
All Content: 2BrightSparks Pte Ltd © 2003-2024