Мне нужно обрезать строку, скажем, abc + cd + ze ::: 123 ::: 12 + abcd, учитывая 123, мне нужно извлечь ze ::: 123 ::: 12.Как обрезать строку из самых левых ближайших + и ближайших ближайших + +? in progress 4gl
ответ
Как Баламута сказал, что это довольно легко сделать это с помощью ENTRY
.
Если вы по какой-либо причине хотите использовать INDEX
и найти позиции, вы можете сделать это. R-INDEX
поможет вам - поиск строки справа налево, а не слева направо.
Этот пример будет иметь проблемы, если вы, например, имеете несколько записей, которые соответствуют вашей строке поиска. В этом случае он вернет самую левую соответствующую запись.
DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
DEFINE VARIABLE cSearch AS CHARACTER NO-UNDO.
DEFINE VARIABLE cResult AS CHARACTER NO-UNDO.
DEFINE VARIABLE iPosition AS INTEGER NO-UNDO.
DEFINE VARIABLE iLeftPlus AS INTEGER NO-UNDO.
DEFINE VARIABLE iRightPlus AS INTEGER NO-UNDO.
DEFINE VARIABLE iLength AS INTEGER NO-UNDO.
/* This is the string we're searching in */
cString = "abc+cd+ze:::123:::12+abcd".
/* This is what we're searching for */
cSearch = "123".
/* Get a starting position */
iPosition = INDEX(cString, cSearch).
/* Start at starting position and look right-to-left for a plus sign */
/* Add 1 since we don't want the plus sign */
iLeftPlus = R-INDEX(cString, "+", iPosition) + 1.
/* Start at starting position and look left-to-right for a plus sign */
iRightPlus = INDEX(cString, "+", iPosition).
/* If there isn't a rightmost + */
IF iRightPlus = 0 THEN
iRightPlus = LENGTH(cString).
/* Calculate the length of the result string */
iLength = iRightPlus - iLeftPlus.
/* Use substring to create resulting string */
cResult = SUBSTRING(cString, iLeftPlus, iLength).
MESSAGE cResult VIEW-AS ALERT-BOX INFORMATION.
Хотя на поверхности, подстрока является очевидным способом, потому что вы ищете что-то между двумя разделителями, на самом деле ENTRY проще. Однако это работает только в том случае, если вы можете гарантировать, что строка, которую вы ищете, не содержит разделителя. Прогресс не может декодировать цитируемые или иным образом экранированные разделители.
Это, кажется, работает для меня:
DEF VAR testStr AS CHAR INITIAL "abc+cd+ze:::123:::12+abcd".
DEF VAR matchStr AS CHAR INITIAL "123".
DEF VAR outStr AS CHAR.
DEF VAR delim AS CHAR INITIAL "+".
DEF VAR i AS INT.
DO i = 1 TO NUM-ENTRIES(testStr, delim):
IF ENTRY(i, testStr, delim) MATCHES "*" + matchStr + "*" THEN DO:
outStr = ENTRY(i, testStr, delim).
LEAVE.
END.
END.
DISPLAY outStr.
Когда я увидел этот вопрос, я подумал о том, чтобы OpenEdge рассматривал его как список с разделителями (с + в качестве разделителя). Но у меня есть временная таблица с полем позиции и записью, а на каждой итерации DO i = 1 - NUM-ENTRIES ... Я создал запись, сделаю позицию и результат функции входа - значение записи. Таким образом, вы сохраните весь список в лучшем виде для поиска и использования. Только мои 2 цента – bupereira
- 1. Найдите лучшие 5 ближайших, а не ближайших?
- 2. Округление до ближайших пяти
- 3. Как найти два ближайших (ближайших) значения внутри вектора в MATLAB?
- 4. Выберите X «ближайших» идентификаторов?
- 5. Нахождение N ближайших номеров
- 6. найти все пары ближайших точек, если существует несколько ближайших пар
- 7. Объединение ближайших выпуклых полигонов
- 8. Поиск ближайших пользователей приложения
- 9. Получить список ближайших антенн
- 10. Не найти ближайших мест
- 11. PHP Сортировка ближайших координат
- 12. WebRTC: сопоставление ближайших сверстников
- 13. Вычисление ближайших чисел numpy
- 14. Поиск ближайших соседей K
- 15. Найти ближайших соседей - OpenCV
- 16. Solr Поиск ближайших совпадений
- 17. Площадь ближайших коробок
- 18. Запрос ближайших соседей PostGis
- 19. Найти K ближайших соседей
- 20. Просмотр ближайших устройств BLE
- 21. Поиск ближайших данных?
- 22. Как добраться до ближайших окрестностей
- 23. Как найти кучу ближайших строк?
- 24. Как добраться 10 ближайших мест из таблицы
- 25. Сопротивление звукозаписи - поиск ближайших совпадений
- 26. Найти все k-ближайших соседей
- 27. Поиск ближайших соседей радиальных сегментов
- 28. Regex идентификатор для ближайших элементов
- 29. Excel - выбор ближайших клеток & состояние
- 30. Поиск ближайших координат в массиве?
Привет! SUBSTRING - очевидная команда. Вам, вероятно, нужно найти 123, а затем определить, как далеко до и после того, как вам нужно. Вы не дали достаточной информации, чтобы иметь возможность помочь вам в этом - какие правила? Вы ищете все между двумя + s? – Screwtape
Да, все подстроки заданы и между ближайшими двумя + s – mac100