2013-10-02 1 views
1

Этот кодProgress 4GL как подсчитать количество разделителей в строке для использования с функцией индекса

disp entry(5,"1 2 3 4"," "). 

Возвращает ошибку, потому что запись 5 находится вне диапазона.

Как подсчитать количество разделителей в строке, чтобы я не пытался получить доступ к записи, которая не существует?

ответ

6

NUM-ЗАПИСЬ (строка, разделитель)

0

В качестве альтернативы, если вы хотите получить п-ю запись в строке или вообще ничего, если что запись не существует (без ошибок), то вы можете добавить " n "ограничивает строку перед тем, как вы ее проверите. Это обеспечит правильное выполнение инструкции - вам нужно будет решить, что делать, когда вы возвращаете пустую запись.

DEFINE VARIABLE cString AS CHARACTER NO-UNDO. 
DEFINE VARIABLE iEntry AS INTEGER NO-UNDO. 

cString = 'jim bob tom ed frank william'. 
iEntry = 23. 

DISPLAY ENTRY(iEntry,cString + FILL(' ',iEntry),' '). 

Конечно, вместо того, чтобы возвращать пустую запись, вы также можете возвратить известное значение ошибки, как показано в альтернативном коде ниже (который будет возвращать «INVALID» для всех записей, которые выходят за пределы первоначального списка) , Обратите внимание на главный разделитель (в данном случае пробел) на мое известное значение ошибки - это важно для обеспечения того, чтобы каждое известное значение ошибки добавлялось к строке как отдельный элемент списка.

DISPLAY ENTRY(iEntry,cString + FILL(' INVALID',iEntry),' '). 

Я хотел бы использовать этот подход при работе с введенным пользователем данными, а также данными, поступающих из внешних источников, которые должны быть отформатированы правильно ... но иногда могу не быть.