Char

This keyword declares a character string with a size limited to a value that cannot exceed 255 characters.

Syntax

Local    Char NAME(LENGTH)
Local    Char NAME(LENGTH)(DIMENSIONS)
Variable Char NAME(LENGTH)(DIMENSIONS)
Value    Char NAME(LENGTH)(DIMENSIONS)
Const    Char NAME(LENGTH)(DIMENSIONS)
  • NAME is the name of the variable declared.
  • LENGTH is an integer value between 1 and 255 that defines the maximum length of the string.
  • DIMENSIONS can be:
    • A single numeric value DIM (meaning that we have an array with an index range from 0 to DIM-1).
    • A range of numeric values INDEX1..INDEX2 (the index varies between INDEX1 and INDEX2).
    • Several indexes or index ranges separated by a comma . For multiple dimension arrays, up to four dimensions are possible.

Several variable declarations can be done on the same line, separated by a comma.

Local declarations create the variables in the current local variable class that is not seen by nested or calling sub-programs. The Call / Subprog and func / Funprog insulate the local variables, as well as the calls of method by fmet.

Const, Variable, and Value declarations declare the arguments sent by a Call, func, or fmet. With these syntaxes, the dimensions and the index ranges can be omitted when the parenthesis are present (the dimension and index ranges are defined by the calling program).

Example

# Direct declarations
Local Char MYTEXT(250), KEYWORDS(30)(1..100) : # 250 max character string, and an array of 30 char keywords
Local Char KEY_ARRAY(20)(1..10) : # An array of 10 character keys of 20 characters maximum.
# A sub-program sending a text and returning a result
Funprog SEND_TEXT(TEXT)
Variable Char TEXT()(,) : # A 2 dimensions matrix of character strings is sent as references
...
End SEND_STATUS
# A sub-program storing texts
Subprog STORE_TEXTS(TEXT)
Value Char TEXT()(1..3) : # An array of 3 elements is sent (a copy is done when passing the arguments)
...
End

Comments

The dimension is the limit of the length allowed for the variable. Any attempt to assign a longer string or append characters over the limit defined by the length) will truncate the variable to the dimension.

The characters stored are double-byte characters. A Schar declaration exists for single-byte characters, but its use is strongly discouraged.

There is still a Global declaration variable that exists for variables that have to be seen in the scope of a process execution, but its use is strongly discouraged.

Implicit data type conversion

The Char data type will implicitly convert [Date](../4gl/date.md) and [Clbfile](../4gl/clbfile.md) to a Char
Local Char MY_CHAR(30)                 # Declare Char
Local Date MY_DATE
MY_DATE=[31/12/2099]
MY_CHAR = MY_DATE                      # MY_CHAR = "20991231"
...
Local Clbfile MY_CLOB
MY_CLOB=string$(3,"AB")                # MY_CLOB = "ABABAB"
MY_CHAR=CLOB                           # MY_CHAR = "ABABAB"

See also

Global, Local, Variable, Value, Const, Tinyint, Shortint, Date, Integer, Float, Double, Decimal, Clbfile, Blbfile, Uuident, Datetime, Instance.