RMVD()

RMVD()

Top  Previous  Next

 

The RMVD() function extracts characters from a dynamic array up to the next delimiter character. It is closely related to REMOVE().

 

 

Format

 

RMVD(dyn.array, var)

 

where

 

dyn.arrayis the dynamic array from which string is to be extracted.

 

varis the variable to be set according to the delimiter that terminates the extracted substring.

 

 

The RMVD() function is similar to the REMOVE() function but recognises only the field, value and subvalue marks as delimiters. Text marks and item marks are treated as part of the data. The function

associates a remove pointer with the dyn.array from which data is extracted. Whenever a string is assigned to a variable the remove pointer is set to point one character before the start of the string. Subsequent RMVD() operations advance the pointer by one character and then extract characters from the position of the remove pointer up to the next delimiter character or the end of the string. Because the remove pointer gives immediate access to the position at which the data extraction should commence, this operation can be much faster than field, value or subvalue extraction.

 

The value returned in var indicates the delimiter that terminated the removal. The delimiter character is not stored as part of the extracted substring. Values of var are

 

0        End of string

2        Field mark

3        Value mark

4        Subvalue mark

 

The mark character itself can be reconstructed as CHAR(256 - var) for a non-zero value of var.

 

Once the end of the dyn.array has been reached, the remove pointer remains positioned one character beyond the end of the string and further RMVD() operations would return a null string.

 

The remove pointer may be reset to the start of the string by assigning a new value to string. Where it is required to reset the remove pointer without changing the string, the SETREM statement can be used. Alternatively, applications frequently use a statement such as

S = S

which will assign S to itself thus resetting the remove pointer.

 

 

Note that the RMVD() function performs a type conversion on dyn.array if it is not already a string. Thus the program

 

S = 99

X = RMVD(S, DELIM)

 

would convert S to be a string "99". Although this is unlikely to have any undesirable effects, it is a side effect to be aware of.

 

 

Examples

 

LOOP

  BOOK.NO = RMVD(BOOK.LIST, DELIM)

  PRINT "Book number is " : BOOK.NO

WHILE DELIM

REPEAT

 

This program fragment extracts entries from the BOOK.LIST dynamic array and prints them. There is an assumption that BOOK.LIST is not a null string (in which case a single null BOOK.NO would be printed).

 

 

S = ""

LOOP

  FLD = RMVD(REC, DELIM)

  S := FLD

  IF DELIM = 2 OR DELIM = 0 THEN

     PRINT S

     S = ""

  END ELSE

     S := CHAR(256 - DELIM)

  END

WHILE DELIM

REPEAT

 

This program prints fields from REC. Note the use of the ELSE clause to append the delimiter that terminated the substring if it was not a field mark or the end of the string.

 

This is equivalent to

 

N = DCOUNT(REC, @FM)

FOR I = 1 TO N

  PRINT REC<I>

NEXT I

 

but may be much faster where REC is large and has a very large number of fields.

 

 

See also:

GETREM(), REMOVE, REMOVEF(), SETREM