94 lines
2.8 KiB
Plaintext
94 lines
2.8 KiB
Plaintext
# String creation #
|
|
STRING a,b,c,d,e,f,g,h,i,j,l,r;
|
|
a := "hello world";
|
|
print((a, new line));
|
|
|
|
# String destruction (for garbage collection) #
|
|
b := ();
|
|
BEGIN
|
|
LOC STRING lb := "hello earth"; # allocate off the LOC stack #
|
|
HEAP STRING hb := "hello moon"; # allocate out of the HEAP space #
|
|
~
|
|
END; # local variable "lb" has LOC stack space recovered at END #
|
|
|
|
# String assignment #
|
|
c := "a"+REPR 0+"b";
|
|
print (("string length c:", UPB c, new line));# ==> 3 #
|
|
|
|
# String comparison #
|
|
l := "ab"; r := "CD";
|
|
|
|
BOOL result;
|
|
FORMAT summary = $""""g""" is "b("","NOT ")"lexicographically "g" """g""""l$ ;
|
|
|
|
result := l < r OR l LT r; printf((summary, l, result, "less than", r));
|
|
result := l <= r OR l LE r # OR l ≤ r #; printf((summary, l, result, "less than or equal to", r));
|
|
result := l = r OR l EQ r; printf((summary, l, result, "equal to", r));
|
|
result := l /= r OR l NE r # OR l ≠ r #; printf((summary, l, result, "not equal to", r));
|
|
result := l >= r OR l GE r # OR l ≥ r #; printf((summary, l, result, "greater than or equal to", r));
|
|
result := l > r OR l GT r; printf((summary, l, result, "greater than", r));
|
|
|
|
# String cloning and copying #
|
|
e := f;
|
|
|
|
# Check if a string is empty #
|
|
IF g = "" THEN print(("g is empty", new line)) FI;
|
|
IF UPB g = 0 THEN print(("g is empty", new line)) FI;
|
|
|
|
# Append a byte to a string #
|
|
h +:= "A";
|
|
|
|
# Append a string to a string #
|
|
h +:= "BCD";
|
|
h PLUSAB "EFG";
|
|
|
|
# Prepend a string to a string - because STRING addition isn't communitive #
|
|
"789" +=: h;
|
|
"456" PLUSTO h;
|
|
print(("The result of prepends and appends: ", h, new line));
|
|
|
|
# Extract a substring from a string #
|
|
i := h[2:3];
|
|
print(("Substring 2:3 of ",h," is ",i, new line));
|
|
|
|
# Replace every occurrences of a byte (or a string) in a string with another string #
|
|
PROC replace = (STRING string, old, new, INT count)STRING: (
|
|
INT pos;
|
|
STRING tail := string, out;
|
|
TO count WHILE string in string(old, pos, tail) DO
|
|
out +:= tail[:pos-1]+new;
|
|
tail := tail[pos+UPB old:]
|
|
OD;
|
|
out+tail
|
|
);
|
|
|
|
j := replace("hello world", "world", "planet", max int);
|
|
print(("After replace string: ", j, new line));
|
|
|
|
INT offset = 7;
|
|
# Replace a character at an offset in the string #
|
|
j[offset] := "P";
|
|
print(("After replace 7th character: ", j, new line));
|
|
|
|
# Replace a substring at an offset in the string #
|
|
j[offset:offset+3] := "PlAN";
|
|
print(("After replace 7:10th characters: ", j, new line));
|
|
|
|
# Insert a string before an offset in the string #
|
|
j := j[:offset-1]+"INSERTED "+j[offset:];
|
|
print(("Insert string before 7th character: ", j, new line));
|
|
|
|
# Join strings #
|
|
a := "hel";
|
|
b := "lo w";
|
|
c := "orld";
|
|
d := a+b+c;
|
|
|
|
print(("a+b+c is ",d, new line));
|
|
|
|
# Pack a string into the target CPU's word #
|
|
BYTES word := bytes pack(d);
|
|
|
|
# Extract a CHAR from a CPU word #
|
|
print(("7th byte in CPU word is: ", offset ELEM word, new line))
|