* Упражнение по преобразованию строк. * Замена / удаление определённых символов в строках, объединение строк. * Raynald Levesque. * Создадим фиктивный массив данных. DATA LIST FIXED /name 1-25 (A). BEGIN DATA 000John Doe /10.14.12 0Mary Poppins /17.21 Billy Joe /21.25 000000Peter Pan /10.35 END DATA. LIST. * Определим имена и метки переменных, которые будут содержать "исправленные" строки. STRING name1 TO name4 (A25). VARIABLE LABEL name 'Исходное значение' name1 'Без головных нулей' name2 'Замена . на ,' name3 'Удалено все до "/" включительно' name4 'Удалено все после "/" включительно'. * 1. Чтобы удалить головные нули. COMPUTE name1=LTRIM(name,"0"). LIST name name1. * 2. Чтобы заменить точки "." на запятые ",". COMPUTE name2=name1. * Цикл позволяет "пробежать" по всем символам строки. * Знак "+" обеспечивает работоспособность кода в случае использования команды INCLUDE. LOOP IF INDEX(name2,".")>0. + COMPUTE SUBSTR(name2,INDEX(name2,"."),1)=",". END LOOP. LIST name1 name2. * 3. Чтобы удалить "/" и всё, что левее. COMPUTE name3=SUBSTR(name1,INDEX(name1,"/")+1). LIST name1 name3. * 4. Чтобы удалить "/" и всё, что правее. COMPUTE name4=SUBSTR(name1,1,INDEX(name1,"/")-1). LIST name1 name4. * 5. Чтобы объединить строки str1 и str2. STRING str1 str2 str3 str4 (A2). COMPUTE str1="A". COMPUTE str2="B". *------- Обратите внимание, это бы НЕ сработало. COMPUTE str3=CONCAT(str1,str2). * Это бы не сработало, поскольку, фактически, str1 равно A с пробелом справа. Аналогично, str2 равна B с пробелом справа. * Поэтому CONCAT(str1, str2) даст строку из 4 символов "A B ", которая усечётся до 2 символов "A " чтобы "влезть" в двухсимвольный формат переменной str3, заданный выше. *------- Это БУДЕТ работать. COMPUTE str4=CONCAT(RTRIM(str1),str2). LIST str1 str2 str3 str4.