Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String Cobol子串;取一个4个字符的字符串,取里面的2个字符_String_Substring_Cobol - Fatal编程技术网

String Cobol子串;取一个4个字符的字符串,取里面的2个字符

String Cobol子串;取一个4个字符的字符串,取里面的2个字符,string,substring,cobol,String,Substring,Cobol,我已经在这个问题上纠缠了一段时间了。非常感谢您的帮助 我从文件中读取了一个4位数的数字,我需要取里面的2位数。 我认为将数字作为字符串读入是一个好主意,然后取子字符串中中间的两个数字,并使用numval函数将它们转换回来。不幸的是,我不知道如何获得内部两个字符 前。 我有数字5465,我想得到46。如果你把它作为一个数字而不是一个字符串,你可以用算术的方法来计算。假设I是5465,并且您希望将46存储在J中: DIVIDE I BY 10 GIVING J. DIVIDE J BY 100 GI

我已经在这个问题上纠缠了一段时间了。非常感谢您的帮助

我从文件中读取了一个4位数的数字,我需要取里面的2位数。 我认为将数字作为字符串读入是一个好主意,然后取子字符串中中间的两个数字,并使用numval函数将它们转换回来。不幸的是,我不知道如何获得内部两个字符

前。
我有数字5465,我想得到46。

如果你把它作为一个数字而不是一个字符串,你可以用算术的方法来计算。假设
I
5465
,并且您希望将
46
存储在
J
中:

DIVIDE I BY 10 GIVING J.
DIVIDE J BY 100 GIVING ignored REMAINDER J.

如果你把它作为一个数字而不是一个字符串,你可以用算术的方法。假设
I
5465
,并且您希望将
46
存储在
J
中:

DIVIDE I BY 10 GIVING J.
DIVIDE J BY 100 GIVING ignored REMAINDER J.

基思·汤普森的建议很管用。您可能需要检查I>0和J>0。如果你知道基思·汤普森的建议会奏效,那就不会有问题了。您可能需要检查I>0和J>0。如果您知道1000可以使用引用修改,那么这不会是一个问题。考虑以下事项:

1 WS-MY-FIELD Pic X(4).
1 WS-TGT-FIELD Pic X(2).
...
Move WS-MY-FIELD (2:2) to WS-TGT-FIELD

第一个数字表示起始位置(基于1),第二个数字表示长度。

您可以使用参考修改。考虑以下事项:

1 WS-MY-FIELD Pic X(4).
1 WS-TGT-FIELD Pic X(2).
...
Move WS-MY-FIELD (2:2) to WS-TGT-FIELD
01  a-long-piece-of-data.
    05  the-first-character pic x.
    05  the-two-characters-we-want pic xx.
    05  the-last-character pic x.

01  a-short-piece-of-data pic xx.
01  filler redefines a-short-piece-of-data.
    05  a-short-unsigned-number pic 99.

MOVE the-two-characters-we-want TO a-short-piece-of-data
MOVE/ADD/COMPUTE/whatever a-short-unsigned-number
第一个数字表示起始位置(基于1),第二个数字表示长度

01  a-long-piece-of-data.
    05  the-first-character pic x.
    05  the-two-characters-we-want pic xx.
    05  the-last-character pic x.

01  a-short-piece-of-data pic xx.
01  filler redefines a-short-piece-of-data.
    05  a-short-unsigned-number pic 99.

MOVE the-two-characters-we-want TO a-short-piece-of-data
MOVE/ADD/COMPUTE/whatever a-short-unsigned-number
或 将一小段数据移动到任何位置

是否有签名号码并希望保留签名

01  a-long-number PIC S9(4).
01  FILLER REDEFINES a-long-number.
    05  FILLER PIC X.
    05  an-integer-with-one-decimal-place PIC S99V9.

01  a-short-number-no-decimals PIC S99.

MOVE an-integer-with-one-decimal-place TO a-short-number-no-decimals
或 将一小段数据移动到任何位置

是否有签名号码并希望保留签名

01  a-long-number PIC S9(4).
01  FILLER REDEFINES a-long-number.
    05  FILLER PIC X.
    05  an-integer-with-one-decimal-place PIC S99V9.

01  a-short-number-no-decimals PIC S99.

MOVE an-integer-with-one-decimal-place TO a-short-number-no-decimals

这有用吗?我的COBOL已经生锈了,但是除了上面提到的之外,另一种方法是创建一个包含两种PIC9(2)数据类型的记录。这有帮助吗?我的COBOL已经生锈了,但除此之外,另一种方法是有一个包含两种PIC 9(2)数据类型的记录。我不敢相信我在回答COBOL问题。如果有更简洁的方法来计算余数(
mod
或其他语言中的
%
运算符),我很想看看。我不敢相信我在回答COBOL问题。如果有更简洁的方法来计算余数(
mod
或其他语言中的
%
运算符),我很想看看。为了清晰和正确,我将“picx”改为“FILLER picx”。否则,答案很好!自1985年以来,至少在大型机COBOL中,“FILLER”是不需要的。为了清晰和正确,我将“picx”改为“FILLER picx”。否则,答案很好!自1985年以来,至少在大型机COBOL中,不需要“FILLER”。