Стандартный способ удалить пробелы из входа в Коболе?

Я просто изучаю КОБОЛ; я пишу программу что просто echos назад ввод данных пользователем. Я определил переменную как:

User-Input PIC X(30).

Позже, когда я ПРИНИМАЮ Ввод данных пользователем, затем ОТОБРАЖАЮ Ввод данных пользователем "плюс некоторый дополнительный текст", он имеет набор пробелов для заполнения этих 30 символов. Есть ли стандартный путь (как str.strip Ruby!) для удаления дополнительных пространств?

6
задан Shawn J. Goff 12 January 2010 в 16:05
поделиться

3 ответа

Один надеясь на более элегантный способ просто обрезки текстовых струн Но это в значительной степени стандартное решение ... часть обрезки сделано в параметре шоу-текста.


      *************************************                    
      * TRIM A STRING... THE HARD WAY...                       
      *************************************                    
       IDENTIFICATION DIVISION.                                
       PROGRAM-ID. TESTX.                                      
       DATA DIVISION.                                          
       WORKING-STORAGE SECTION.                                
       01  USER-INPUT         PIC X(30).                       
       01  I                  PIC S9(4) BINARY.                
       PROCEDURE DIVISION.                                     
           MOVE SPACES TO USER-INPUT                           
           PERFORM SHOW-TEXT                                   

           MOVE '  A B C' TO USER-INPUT                        
           PERFORM SHOW-TEXT                                   

           MOVE 'USE ALL 30 CHARACTERS -------X' TO USER-INPUT 
           PERFORM SHOW-TEXT                                 
           GOBACK                                            
           .                                                 
       SHOW-TEXT.                                            
           PERFORM VARYING I FROM LENGTH OF USER-INPUT BY -1 
                     UNTIL I LESS THAN 1 OR USER-INPUT(I:1) NOT = ' '
           END-PERFORM                                       
           IF I > ZERO                                       
              DISPLAY USER-INPUT(1:I) '@ OTHER STUFF'        
           ELSE                                              
              DISPLAY '@ OTHER STUFF'                        
           END-IF                                            
           .                                                 

производит следующий вывод:


@ OTHER STUFF                              
  A B C@ OTHER STUFF                       
USE ALL 30 CHARACTERS -------X@ OTHER STUFF

Обратите внимание, что выполнение разных операторов зависит слева от правильная оценка до пункта, чтобы избежать вне оценки Подскабоваться на пользовательский ввод в случае, когда он содержит только Пустые места.

6
ответ дан 10 December 2019 в 00:38
поделиться

Более общее решение:

01 length pic 99.

perform varying length from 1 by 1 
  until length > 30 or user-input[length] = space
end-perform.
if length > 30
  display user-input 'plus some extra text'
else
  display user-input[1:length] 'plus some extra text'
end-if.

непроверенные, у меня нет компилятора под рукой в ​​данный момент

0
ответ дан 10 December 2019 в 00:38
поделиться

Вот решение, если вы работаете с OpenVMS:

   01 WS-STRING-LENGTH                 PIC S9(04) COMP.

   CALL "STR$TRIM" USING BY DESCRIPTOR user_output,
                                       user_input,
                                       BY REFERENCE WS-STRING-LENGTH.
1
ответ дан 10 December 2019 в 00:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: