Перевести первую букву каждого слова в верхний регистр
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 42 43 44 45 46 47 48 49 50 51 52 | * Encoding: UTF-8. * Изменить первую букву каждого слова в адресе на заглавную. * Версия 2, revision 14.09.2017 * Спасибо A. Paul Beaulne за этот код. * Также спасибо Joost Schouppe за предложение изменить немного код, чтобы обработать ситуации, когда в строке не находится пробел. DATA LIST FIXED /address 1-50 (A). BEGIN DATA. 248 n. delphia ave. 9273 Fairvew dr. apt 410 6324 Meadowview corner of south & maine oneWord --- END DATA. * Определим 5 новых строковых переменных чтобы размещать "куски" адреса. * Вам может потребоватья большее количество переменных, если известно, что * в адресах имеется большее количество отдельных слов. STRING a1 TO a5 (A50). * Используем цикл DO REPEAT для повтора вычислений для * каждого отдельной части адреса (слова, номера). * Сначал найдём положение первого пробела в адресе. * Затем извлечём подстроку из адреса слева вплоть до первого пробела. * Поместим результат в промежуточную переменную a (1, 2, ...). * Затем укоротим исходный адрес на только что извлечённую строку. * Используем функции CONCAT и UPCASE для того, чтобы преобразовать * первый символ нового куска адреса в верхний регистр и сохранить * результат в той же промежуточной переменной а (1, 2, ...). * Эта последовательность по вторяется 5 раз. Если известно, что "кусков" адреса * будет больше, определите больше промежуточных переменных: a1 to a8, например. DO REPEAT a=a1 TO a5. COMPUTE space=CHAR.INDEX(address," "). IF space=0 space=LENGTH(address)+1. /* это исключает проглатывание единственного/последнего слова в адресе */ /* из-за того, что очередной пробел не находится */ 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. |
Это исправленная версия, см. оригинал здесь: Convert first letter of each word to uppercase.
You may want also to check (more flexible) Python-based solution: Capitalize each word in a string variable