1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
*Изменить первую букву каждого слова в адресе на заглавную.

DATA LIST  FIXED /Address 1-25 (a).
BEGIN DATA.
248 n. delphia ave.
9273 Fairvew dr. apt 410
6324 Meadowview
corner of south & maine
END DATA.

* Определим 5 новых строковых переменных чтобы размещать "куски" адреса.
* Вам может потребоватья большее количество переменных, если известно, что
* в адресах имеется большее количество отдельных слов.

STRING a1 to a5 (a25).

* Используем цикл DO REPEAT для повтора вычислений для
* каждого отдельной части адреса (слова, номера).
* Сначал найдём положение первого пробела в адресе.
* Затем извлечём подстроку из адреса слева вплоть до первого пробела.
* Поместим результат в промежуточную переменную a (1, 2, ...). 
* Затем укоротим исходный адрес на только что извлечённую строку.
* Используем функции CONCAT и UPCASE для того, чтобы преобразовать 
* первый символ нового куска адреса в верхний регистр и сохранить
* результат в той же промежуточной переменной а (1, 2, ...).
* Эта последовательность по вторяется 5 раз. Если известно, что "кусков" адреса 
* будет больше, определите больше промежуточных переменных:  a1 to a8, например.

DO REPEAT a=a1 to a5.
COMPUTE space=index(address," ").
COMPUTE a=substr(address,1,space-1).
COMPUTE address=substr(address,space+1).
COMPUTE a=concat(upcase(substr(a,1,1)),substr(a,2)).
END REPEAT PRINT.

* Теперь собираем части адреса в новый адрес. Используем функцию  RTRIM
* для отсечения замыкающих пробелов в частях адреса и вставляем
* пробелы там, где это надо.

COMPUTE address=concat(rtrim(a1)," ", rtrim(a2)," ",rtrim(a3)," ", rtrim(a4)," ",rtrim(a5)).
LIST variables=address.