Предположим, у меня есть переменная PIC X(20)
.Узнать длину строки
Переменная содержит некоторое значение, например. ABC WXYZ
.
Как узнать длину строки, исключая промежуток между ними?
Предположим, у меня есть переменная PIC X(20)
.Узнать длину строки
Переменная содержит некоторое значение, например. ABC WXYZ
.
Как узнать длину строки, исключая промежуток между ними?
Если вы действительно уверены, что вы не хотите, чтобы пространство между вы можете определить тест-валин и использовать это в PERFORM
:
77 some-len PIC 9(02). *> make sure to use appropriate length, if "big" use COMP-5
77 string-ptr PIC 9(02). *> make sure to use appropriate length
77 some-var PIC X(20) VALUE ' ABC WXYZ'.
77 var-len PIC 9(02) VALUE LENGTH OF some-var.
01 test-char PIC X.
88 no-spaces values 'A' THROUGH 'Z'
'a' THROUGH 'z'
'0' THROUGH '9'
'-', '.'.
PROCEDURE DIVISION.
MOVE 0 TO some-len
PERFORM VARYING string-ptr FROM 1 BY 1
UNTIL string-ptr > var-len
MOVE some-var (string-ptr) TO test-char
IF no-spaces ADD 1 TO some-len END-IF
END-PERFORM
Как Билл указал, если вы хотите знать «не пространства» символов есть более быстрый вариант, который требует меньше ВАР (убедитесь, что вы прокомментируете это позволяет вам и другим, что это делает:
*> set numbers of all non-spaces in some-len
MOVE 0 TO some-len
INSPECT some-var TALLYING some-len FOR ALL SPACES
*> add more counts here if you want to remove more chars like x'0D'/x'0A'/x'00', ...
*> INSPECT some-var TALLYING some-len FOR ALL x'00'
*> INSPECT some-var TALLYING some-len FOR ALL x'0D'
*> INSPECT some-var TALLYING some-len FOR ALL x'0A'
*> and finally subtract it from the fields length
SUBTRACT some-len FROM LENGTH OF some-var GIVING some-len
*>
Для информации, имя пользователя Maxcc0 и Mainframe, а также быстрый просмотр их профиля показывает тег Mainframe. И, конечно, вспоминая их предыдущий вопрос. Так что 78 не будет работать. COMP-5 был бы плохим, если не нужен (его здесь нет). Почему бы просто не подсчитать пробелы? INSPECT ... TALLYING, например. –
@BillWoodger: Информация о профиле пользователя Maxcc0 не является частью вопроса :-) Я изменил исходный код, чтобы использовать специальный регистр «LENGTH OF» вместо расширения уровня 78 и добавил параметр INSPECT. –
Спасибо за предложения. INSPECT будет работать нормально :). – Maxcc0
что вы пробовали до сих пор Если ничего, вы не должны, по крайней мере, искать этот сайт, поскольку обработка строк возникла несколько раз, и есть идеи, которые помогут вам arted. Тогда, если вы застряли, вы можете задать более конкретный и более конкретный вопрос. – lurker
@ Maxcc0 Предоставляет ли предоставленный ответ вам? Если да: отметьте это как ответ, если нет: прокомментируйте ответ, что вы пропустите. –