Удаление пробела в строке

Автор themax, Березень 10, 2015, 06:03:26 ДП

Попередня тема - Наступна тема

0 Користувачі і 1 Гість дивляться цю тему.

themax

Всем добрый день! Мне опять понадобилась помощь знающих Абаперов. Пытаюсь написать программу пакетного ввода материалов. Столкнулся с такой проблеммкой, значение одного из полей (название класса вкладки классификация материала) из файла откуда подтягиваются данные содержит в конце значение пробел, совсем не нужный мне пробел. Т.е. значение из файла передаётся типа 27.11.62.700 B или 26.11.30.300 A. Вот этот пробел между цифрами и буквой передаваемый из файла в программу нужно как то убрать. Пытался сделать это
replace space with '' into wa-skp.

но не получается. Пробел не убирается. Есть ещё команда translate, но там нужно указывать какие символы заменяются, а тут пробел. Может кто подскажет? Буду весьма признательным за помощь.


themax

Вроде бы понял как сделать. С помощью команды split сначала разделил поле на пробеле
SPLIT wa-skp at ' ' INTO TABLE tab2.
  CLEAR wa-skp.
  loop at tab2.
    CONCATENATE wa-skp tab2-name into wa-skp.

и вроде соединилось без пробела.

Uukrul

Цитата: themax від Березень 10, 2015, 07:47:47 ДП
Вроде бы понял как сделать. С помощью команды split сначала разделил поле на пробеле
Да вроде как нет, а будет у вас там два пробела или больше, что делать будем? Все можно немного проще сделать:

CONSTANTS: con_str(14) TYPE c VALUE '26.11.30.300 A'.

DATA: l_str(14) TYPE c.

l_str = con_str.

REPLACE ALL OCCURRENCES OF REGEX ' *' IN l_str WITH space.   "<- Типа так все проблемы убрать

WRITE: / l_str.


themax

Ну на данный момент у меня в шаблоне заполняемым пользователями всегда стоит один пробел,  но Ваша задумка действительно по лучше будет. Её тоже попробую, спасибо Uukrul.

themax

Я попробывал Вашу команду REPLACE ALL OCCURRENCES OF REGEX на примере того что вы написали, уважаемый Uukrul, убирает так же как и моём случае только один пробел. Если пробую добавить запись с одним пробелом, то его убирает нормально. Может надо как то иначе?

Uukrul

Цитата: themax від Березень 11, 2015, 12:45:04 ПП
Может надо как то иначе?
Вот такой вот пример

CONSTANTS: con_str(50) TYPE c VALUE '26. 11.   30. 300 A'.

DATA: l_str(50) TYPE c.

l_str = con_str.
REPLACE ALL OCCURRENCES OF REGEX ' *' IN l_str WITH space.
WRITE: / 'Исходная строка:', 30 con_str, / 'Обработанная строка:', 30 l_str.

На выходе получаем вот как на экране. Все убирает и обрабатывает все пробелы, которых там как видим изначально много было.

Uukrul

Что-то я совсем плохой стал, забыл про команду CONDENSE, которая как раз пробелы из строки удаляет.

l_str = con_str.
CONDENSE l_str NO-GAPS.

WRITE: / 'Исходная строка:', 30 con_str, / 'Обработанная строка:', 30 l_str.


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

themax

Вот с командой CONDENSE как Вы описали действительно убирает все пробелы. Спасибо!

SCORPION_Z

К сожалению CONDENSE  NO-GAPS не убирает так называемый "неразрывный пробел", который может быть в текстах, пришедших из внешних систем, например

Uukrul

Цитата: SCORPION_Z від Грудень 09, 2019, 11:45:14 ДП
К сожалению CONDENSE  NO-GAPS не убирает так называемый "неразрывный пробел", который может быть в текстах, пришедших из внешних систем, например
Ну это уже не пробел к сожалению, а спецсимвол форматирования текста, так что правильно его не удаляет. Мало ли у кого какие символы форматирования могут быть. Но никто вам не мешает использовать REPLACE  который может заменить/убрать данный символ из текста.