Я ищу альтернативу COBOL функции MID на Visual Basic. То, что мне нужно сделать, это взять из 8 строк первые 5 букв и объединить их.COBOL альтернатива MID BASIC и как выполнить строки?
Я использую Fujitsu COBOL.
Большое спасибо,
Yvan
Я ищу альтернативу COBOL функции MID на Visual Basic. То, что мне нужно сделать, это взять из 8 строк первые 5 букв и объединить их.COBOL альтернатива MID BASIC и как выполнить строки?
Я использую Fujitsu COBOL.
Большое спасибо,
Yvan
Paxdiablo предоставил пару действующих способов сделать это. Другим способом было бы использовать эталонную модификацию в дополнение к глаголу STRING
. Полный пример программы следующим образом:
IDENTIFICATION DIVISION.
PROGRAM-ID. EXAMPLE9.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 STRINGS.
05 STRING1 PIC X(10) VALUE 'AAAAAAAAAA'.
05 STRING2 PIC X(10) VALUE 'BBBBBBBBBB'.
05 STRING3 PIC X(10) VALUE 'CCCCCCCCCC'.
05 STRING4 PIC X(10) VALUE 'DDDDDDDDDD'.
05 STRING5 PIC X(10) VALUE 'EEEEEEEEEE'.
05 STRING6 PIC X(10) VALUE 'FFFFFFFFFF'.
05 STRING7 PIC X(10) VALUE 'GGGGGGGGGG'.
05 STRING8 PIC X(10) VALUE 'HHHHHHHHHH'.
05 STRING-OUT PIC X(40) VALUE SPACES.
PROCEDURE DIVISION.
STRING STRING1(1:5) STRING2(1:5) STRING3(1:5) STRING4(1:5)
STRING5(1:5) STRING6(1:5) STRING7(1:5) STRING8(1:5)
DELIMITED BY SIZE
INTO STRING-OUT
DISPLAY STRING-OUT
GOBACK.
Это сокращает многословие совсем немного, и захватывает конкатенацию в одном операторе. Лучший совет - прочитать в глаголе STRING
. Существует ряд инновационных способов его использования.
COBOL не обеспечивает точный аналог инструкции BASIC MID. Вы можете выполнить аналогичные операции, используя некоторую комбинацию STRING
, UNSTRING
, INSPECT
и эталонную модификацию. Примером эталонной модификации является: SOME-VARIABLE-NAME(1:5)
- бит 1: 5 определяет подстроку SOME-VARIABLE-NAME
, начиная с первого символа длиной 5 символов. Модификаторы сами могут быть числовыми переменными. Команды STRING
и UNSTRING
содержат ряд функций, которые могут быть достаточно мощными.
В общем, COBOL не особенно хорош в манипулировании строками (некоторые могут сказать, что это не особенно хорошо ни при чем, но я бы не согласился с этим утверждением).
Спасибо большое, thsis решить мою проблему :) – friedkiwi
Я думаю, что это звучит примерно так:
WORKING STORAGE SECTION.
01 NORMAL-STRING-A PIC X(80)
01 NORMAL-STRING-B PIC X(80)
01 NORMAL-STRING-C PIC X(80)
01 NORMAL-STRING-D PIC X(80)
01 NORMAL-STRING-E PIC X(80)
01 SUB-STRING.
05 FIVE PIC X(5)
05 REST PIC X(75)
01 TWENTY-FIVE-A.
05 FIVE-A PIC X(5).
05 FIVE-B PIC X(5).
05 FIVE-C PIC X(5).
05 FIVE-D PIC X(5).
05 FIVE-E PIC X(5).
01 TWENTY-FIVE-B PIC X(25).
PROCEDURE DIVISION.
MOVE NORMAL-STRING-A TO SUB-STRING.
MOVE FIVE TO FIVE-A.
MOVE NORMAL-STRING-B TO SUB-STRING.
MOVE FIVE TO FIVE-B.
MOVE NORMAL-STRING-C TO SUB-STRING.
MOVE FIVE TO FIVE-C.
MOVE NORMAL-STRING-D TO SUB-STRING.
MOVE FIVE TO FIVE-D.
MOVE NORMAL-STRING-E TO SUB-STRING.
MOVE FIVE TO FIVE-E.
MOVE TWENTY-FIVE-A TO TWENTY-FIVE-B.
Тогда ваша строка в TWENTY-FIVE-B
.
Вы знаете, я не могу понять, почему люди думали, что COBOL был многословным :-)
На более серьезной ноте, я думаю, что вы можете сделать что-то вдоль этих линий, чтобы достичь того же результата (вам возможно, придется возиться с началом и параметрами длиной, это было некоторое время, так как я сделал какую-либо серьезная COBOL):
WORKING STORAGE SECTION.
01 STRING-A PIC X(80)
01 STRING-B PIC X(80)
01 STRING-C PIC X(80)
01 STRING-D PIC X(80)
01 STRING-E PIC X(80)
01 TWENTY-FIVE PIC X(25).
PROCEDURE DIVISION.
MOVE STRING-A(1:5) TO TWENTY-FIVE(1:5).
MOVE STRING-B(1:5) TO TWENTY-FIVE(6:5).
MOVE STRING-C(1:5) TO TWENTY-FIVE(11:5).
MOVE STRING-D(1:5) TO TWENTY-FIVE(16:5).
MOVE STRING-E(1:5) TO TWENTY-FIVE(21:5).
этой substring examples страницы показывает несколько вариантов. Пример:
* Task3 suffix(xStr,Length)
* Extract the last Length number of chars from a string
* Solution - use reference modification with start of substring
* defined as the FullStringLength - SubStringLength + 1
* In this example we get the last 13 characters.
MOVE 13 TO StrLength
DISPLAY "Task3 = " xStr2((StrSize - StrLength) + 1:StrLength)
WORKING STORAGE SECTION.
01 NORMAL-STRING-A PIC X(80)
01 NORMAL-STRING-B PIC X(80)
01 NORMAL-STRING-C PIC X(80)
01 NORMAL-STRING-D PIC X(80)
01 NORMAL-STRING-E PIC X(80)
01 TWENTY-FIVE-A.
05 FIVE-A PIC X(5).
05 FIVE-B PIC X(5).
05 FIVE-C PIC X(5).
05 FIVE-D PIC X(5).
05 FIVE-E PIC X(5).
01 TWENTY-FIVE-B REDEFINES TWENTY-FIVE-A PIC X(25).
PROCEDURE DIVISION.
MOVE NORMAL-STRING-A TO FIVE-A
MOVE NORMAL-STRING-B TO FIVE-B
MOVE NORMAL-STRING-C TO FIVE-C
MOVE NORMAL-STRING-D TO FIVE-D
MOVE NORMAL-STRING-E TO FIVE-E
Посмотрите на подстроки синтаксис здесь: http://stackoverflow.com/questions/46863/concatenating-unknown-length-strings-in-cobol – gimel