Angenommen, ich habe eine Variable PIC X(20)
.Ermitteln Sie die Länge eines Strings
Die Variable enthält einen Wert, z. ABC WXYZ
.
Wie kann man die Länge des Strings ohne den Zwischenraum herausfinden?
Angenommen, ich habe eine Variable PIC X(20)
.Ermitteln Sie die Länge eines Strings
Die Variable enthält einen Wert, z. ABC WXYZ
.
Wie kann man die Länge des Strings ohne den Zwischenraum herausfinden?
Wenn Sie wirklich sicher sind, dass Sie in nicht den Raum wollen zwischen Ihnen Test-val definieren und verwenden diese in 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
Wie Bill wies darauf hin, wenn Sie wissen wollen, die „keine Leerzeichen“ Zeichen gibt es eine schnellere Möglichkeit, die weniger vars muss (stellen Sie sicher, dass Sie diese im Stich gelassen kommentieren Sie und andere wissen, was das bedeutet:
*> 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
*>
Zur Information, der Benutzername Maxcc0 Tipps und Mainframe, und in der Tat einen kurzen Blick auf ihr Profil enthüllt ein Mainframe-Tag. Und natürlich erinnere ich mich an ihre vorherige Frage. Also 78 wird nicht funktionieren. COMP-5 wäre schlecht, wenn es nicht gebraucht würde (es ist nicht hier). Warum nicht einfach die Räume zählen? INSPEKT ... TALLING zum Beispiel. –
@BillWoodger: Die Informationen des Maxcc0-Benutzerprofils sind nicht Teil der Frage :-) Ich habe die Quelle geändert, um das 'LENGTH OF'-Sonderregister anstelle der Erweiterung der Stufe 78 zu verwenden und die Option INSPECT hinzugefügt. –
Danke für die Vorschläge. INSPECT wird gut funktionieren :). – Maxcc0
Was haben Sie versucht, so weit Wenn nichts, man sollte dies zumindest suchen Website als String-Verarbeitung ist ein paar Mal gekommen, und es gibt Ideen, um Sie st zu bekommen artisiert. Wenn Sie dann stecken bleiben, können Sie eine bessere, spezifischere Frage stellen. – lurker
@ Maxcc0 Funktioniert die angegebene Antwort für Sie? Wenn ja: Bitte als Antwort markieren, falls nein: Bitte kommentieren Sie die Antwort, die Sie vermissen. –