Ассоциация ЭБНИТ    ИРБИС-корпорация    Вики-Ирбис    Online/CHM справка Ирбис   
Задачки для любознательных :  ИРБИС Irbis
 
Удалить пробелы в начале и вконце строки
Пользователь: woodyfon (IP-адрес скрыт)
Дата: 27, February, 2014 11:44

Как на языке форматирования данных удалить пробелы в конце строки и в начале в повторяющемся поле?

Re: Удалить пробелы в начале и вконце строки
Пользователь: Gena (IP-адрес скрыт)
Дата: 27, February, 2014 19:18

Лучше всего воспользоваться дополнительной библиотекой функций для Ирбиса. Сслыка на тему с библиотекой:
[irbis.gpntb.ru]

Вариант решения задачи такой:

(if p(v1) then 
   &uf('+8ex64,trim,'v1)
fi/)

если хотите результат получить в виде другой повторяющейс переменной, то сразу же вместе с расформатированием пишите ее в переменную:

&uf('+7w1#'
   (if p(v1) then 
      &uf('+8ex64,trim,'v1)
   fi/)
)

Re: Удалить пробелы в начале и вконце строки
Пользователь: woodyfon (IP-адрес скрыт)
Дата: 27, February, 2014 21:03

Это решение требует использование пользовательской функции. Возможно ли обойтись существующими функциями из коробки?

Re: Удалить пробелы в начале и вконце строки
Пользователь: Gena (IP-адрес скрыт)
Дата: 28, February, 2014 07:38

Возможно, но это будет очень громоздко:
1. Делаете цикл по переменной
2. В цикле проверяете в начале первый символ: если там пробел, перезаписываете переменную с отступом 1, что бы первый символ ушел, если первый символ не пробле, делаете "break"
3. Повторяете тоже самое задом наперед
4. На выходе получаете переменную, в которой обрезаны начальные и конечные пробелы.


&uf('+7w1# sdssdsd '),
(if &uf('ag1.1#1')=' ' then
&uf('+7w1#'&uf('ag1*1#1')),'-'&uf('ag1#1'),'-'
else
break
fi/),

(if &uf('+961.1#'&uf('ag1#1'))=' ' then
&uf('+7w1#'&uf('+961*1#'&uf('ag1#1'))),'-'&uf('ag1#1'),'-'
else
break
fi/),

Вот пример. Вот эти кусочки '-'&uf('ag1#1'),'-' вставлены для наглядности процесса урезания пробелов, в рабочем варианте их нужно убрать

Re: Удалить пробелы в начале и вконце строки
Пользователь: Дунаевская (IP-адрес скрыт)
Дата: 03, March, 2014 08:58

Удалить пробел(ы) в конце повторяющихся полей XXX можно глобальной корректурой (пробел обозначен здесь #)

REP xxx F (if Vxxx|!|:'#!' then Vxxx|!| else Vxxx fi/)
CHA xxx * '#!' ''

Оператором REP в конец поля, заканчивающегося пробелом, добавляется !
Оператором CHA #! удаляется

Предварительно можно включить несколько операторов CHA для сведЕния нескольких пробелов к одному
CHA ХХХ * '##' '#'

Отобрать для корректуры записи с конечным пробелом в поле XXX можно свободным поиском Vxxx|!|:'#!'



Редактировано 1 раз. Последний раз 03.03.2014 09:41 пользователем Дунаевская.

Re: Удалить пробелы в начале и вконце строки
Пользователь: Konstantinus (IP-адрес скрыт)
Дата: 03, March, 2014 11:22

А если по всем полям и всем повторениям? Незнаю почему, но пробелы сотрудники очень любят...

Re: Удалить пробелы в начале и вконце строки
Пользователь: Gena (IP-адрес скрыт)
Дата: 03, March, 2014 12:36

Сделать форматом можно, но это будет трехэтажная конструкция, которая не факт, что будет работать быстро. Это луче оформить в виде внешней законченной функции и выполнять ее в виде юнифора над всей записью.

Re: Удалить пробелы в начале и вконце строки
Пользователь: Дунаевская (IP-адрес скрыт)
Дата: 03, March, 2014 17:36

Konstantinus написал(а):
-------------------------------------------------------
> А если по всем полям и всем повторениям? Незнаю
> почему, но пробелы сотрудники очень любят...

Моим методом - введите в задание по две строки на каждое проблемное поле REP xxx F (if Vxxx|!|:'#!' then Vxxx|!| else Vxxx fi/)
CHA xxx * '#!' ''

Re: Удалить пробелы в начале и вконце строки
Пользователь: Novinka (IP-адрес скрыт)
Дата: 12, March, 2014 07:31

А что дает конструкция |!|?

Re: Удалить пробелы в начале и вконце строки
Пользователь: Дунаевская (IP-адрес скрыт)
Дата: 12, March, 2014 08:26

Novinka написал(а):
-------------------------------------------------------
> А что дает конструкция |!|?


Vxxx|!|:'#!'
Читается так
Спрашивается, содержит ли поле ХХХ с приписанным в его конец условным литералом (!) фрагмент #! (пробел и !)
Если поле ХХХ заканчивается пробелом, результат будет положительным

P.S. Вместо ! можно использовать любой символ, не встречающийся в данных



Редактировано 1 раз. Последний раз 12.03.2014 10:51 пользователем Дунаевская.



Извините, только зарегистрированные пользователи могут писать в этом форуме.
This forum powered by Phorum.