- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
WORKING-STORAGE.
FIRST-STRING PIC X(15) VALUE SPACES.
SECOND-STRING PIC X(15) VALUE SPACES.
OUTPUT-STRING PIC X(31) VALUE SPACES.
FIRST-NAME = 'JON SNOW, ' and LAST-NAME = 'KNOWS NOTHING. '
,我如何获得:
OUTPUT-STRING = 'JON SNOW, KNOWS NOTHING. '
String FIRST-STRING DELIMITED BY SPACES
' ' DELIMITED BY SIZE
SECOND-STRING DELIMITED BY SIZE
INTO OUTPUT-STRING
'JON KNOWS NOTHING. '
String FIRST-STRING DELIMITED BY SIZE
SECOND-STRING DELIMITED BY SIZE
INTO OUTPUT-STRING
'JON SNOW, KNOWS NOTHING. '
String FIRST-STRING DELIMITED BY ' '
组成的调整(两个空格)
最佳答案
首先,赞誉,因为很多人会以两个空格分隔,所以完全不用担心可能的后果。请注意,如果数据仅跟随一个尾随空格,您还将获得“意外”输出。还要注意,由于要插入空格以分隔数据,因此OUTPUT-STRING的字段定义短了一个字节。在两个字段都完全充满数据的情况下,您将丢失SECOND-STRING的最后一个字节。
COBOL是定长字段的语言(除非它们是可变的)。这意味着没有“标准”定界符,因此任何字符或值都可以出现在字段中的任何位置。此外,默认填充字符(源比目标字段短)是空格,这是单词的完全正常分隔符。
在您以及许多类似的情况下,您需要知道字段的实际数据部分的长度(不包括尾随空白)。
@ user4341206在其答案https://stackoverflow.com/a/31938039/1927206中建议使用一种非常常见的方法。
根据1985年的COBOL标准,INSPECT可用于计算前导空格,但不能用于计算尾随空格。首先可以使用FUNCTION REVERSE
将尾随空格转换为前导空格,以便INSPECT可以对其进行计数。
一旦知道尾随空白的数量,就可以使用LENGTH OF
特殊寄存器或FUNCTION LENGTH
来确定固定长度字段的长度(在编译时都是(或者可以是,取决于编译器)) 。字段长度和尾随空白的数量之间的差异为您提供了数据的长度。
一旦有了数据的长度,请记住它可能是空白的(取决于数据的可能性),并且它的长度可能与字段相同
请注意,与从字段末尾开始的简单循环相比,如果您有大量数据,则可能不希望反转字段并使用INSPECT(可能是运行时例程)来计算尾随空白。
请注意,像AcuCOBOL这样的编译器(现在是Micro Focus的COBOL产品的一部分)具有语言扩展,该语言扩展提供了TRAILING作为INSPECT的选项。请注意,即使2014年COBOL标准也没有将TRAILING作为INSPECT的选项。
无论哪种方式,只要完成数据的长度即可。有点。
您可以在STRING语句中使用引用修改:
String FIRST-STRING ( 1 : length-field-you-define ) DELIMITED BY SIZE
' ' DELIMITED BY SIZE
SECOND-STRING DELIMITED BY SIZE
INTO OUTPUT-STRING
MOVE FIRST-STRING TO OUTPUT-STRING
( 1 : length-field-you-define )
MOVE SPACE TO OUTPUT-STRING
( length-field-you-define + 1 : 1 )
MOVE SECOND-STRING TO OUTPUT-STRING
( length-field-you-define + 2 : )
:
之后。在这种情况下,这意味着您定义的长度字段不能为零,如果FIRST-STRING完全是空格,则可以将其计算为零。
MOVE FIRST-STRING TO OUTPUT-STRING
( 1 : length-field-you-define )
IF FIRST-STRING EQUAL TO SPACE
PERFORM COPY-SECOND-STRING-ONLY
ELSE
PERFORM CONCATENATE-FIRST-AND-SECOND
END-IF
...
COPY-SECOND-STRING-ONLY.
MOVE SECOND-STRING TO OUTPUT-STRING
.
CONCATENATE-FIRST-AND-SECOND.
calculate length
MOVE FIRST-STRING TO OUTPUT-STRING
( 1 : length-field-you-define )
MOVE SPACE TO OUTPUT-STRING
( length-field-you-define + 1 : 1 )
MOVE SECOND-STRING TO OUTPUT-STRING
( length-field-you-define + 2 : )
.
LINKAGE SECTION.
01 L-MAPPING-OF-OUTPUT-STRING.
05 L-MOOS-FIRST-STRING.
10 FILLER OCCURS 0 TO 15 TIMES
DEPENDING ON length-field-you-define.
15 FILLER PIC X.
05 L-MOOS-SEPARATOR-SPACE PIC X.
05 L-MOOS-SECOND-STRING PIC X(15).
...
SET ADDRESS OF L-MAPPING-OF-OUTPUT-STRING
TO ADDRESS OF
OUTPUT-STRING
MOVE FIRST-STRING TO L-MOOS-FIRST-STRING
MOVE SPACE TO L-MOOS-SEPARATOR-SPACE
MOVE SECOND-STRING TO L-MOOS-SECOND-STRING
关于delimiter - Cobol字符串由尾部空格分隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31935955/
我想问你有关存储过程的问题。我曾在 MySQL version 5.5.16 中尝试过 Delimiter。我曾经 | DELIMITER // | CREATE PROCEDURE Name
我在 TStringList 类中的分隔符方面遇到问题。看看: var s: string; sl: TStringList; begin sl := TStringList.Create
使用“定界符”,“终止符”和“分隔符”背后的语义是什么?例如,我相信终止符会在每个 token 之后以及每个 token 之间的分隔符之后出现。分隔符是与这两个分隔符一样,还是仅仅是分隔符的形式? S
对于句子: "I am very hungry, so mum brings me a cake! 我希望它被分隔符分割,我希望除了空格之外的所有分隔符也被保存。所以预期的输出是: "I" "
test_str = '**Amount** : $25k **Name** : James' 预期输出: output: Amount: $25k, Name: James 我只能使用re.sub
在下面的程序中,strtok() 在主要部分按预期工作,但我无法理解一个发现背后的原因。我读过有关 strtok() 的内容: To determine the beginning and the e
我正在尝试使用“COPY INTO”命令将数据从 s3 加载到雪花 以下是我创建舞台并将文件从舞台加载到 Snowflake 所遵循的步骤 JSON 文件 { "Name":"Umesh",
WORKING-STORAGE. FIRST-STRING PIC X(15) VALUE SPACES. SECOND-STRING PIC X(15) VALUE S
我在 macOS Sierra 软件上使用 Excel for Mac 2016。尽管我已经成功地将 CSV 文件复制并粘贴到 Excel 中一段时间了,但最近,它们的行为开始变得奇怪。当我粘贴数
我是java新手,我正在尝试创建一个简单的程序,它可以使用分隔符解析字符串。但是,每当我尝试这样做而不是打印这样的行时: Hello World I am Bob how are you 它在自己的行
我在创建存储过程时遇到错误,它说我有语法错误,但我找不到它在哪里... MySql 错误: "You have an error in your SQL syntax; check the manua
DELIMITER // 它有什么用? 最佳答案 它将语句分隔符从 ; 更改为 //。这样您就可以在触发器定义中编写 ; 而不会被 MySQL 客户端误解为意味着您已经完成了它。 请注意,当改回来时,
所以我将字符串值发送到数据库 @string = 'Value1|Value2|Value3|Value4, OtherVal1|OtherVal2|OtherVal3|OtherVal4' 还有一些
我正在从 SAP Hybris 导出数据。 我正在导入的数据也有分号 (;)。 在导出的数据中,我看到分隔符是 ;这阻止了我拆分数据并完成我的工作。有没有办法将此分隔符更改为其他内容? 我知道这可以通
TStringList.Delimiter 是一个 TChar。这使得 Delimitertext 成为可能 Test,Test,Test,Test 但我想用 ' 和 ' 作为结果的分隔符 Test
我正在尝试解析一个字符串,例如:&1 first &2 second &4 fourth \\ ,并从中建立一个表 t = {1=first, 2=second, 4=fourth} 我一般对正则表达
我正在尝试使用我发现的 mysql 函数,但我似乎遇到了一些错误。这是函数: SET GLOBAL log_bin_trust_function_creators=1; DROP FUNCTION I
分隔符$$ ALTER ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v_t_buku_bank`
在网上阅读了很多关于存储过程和触发器等使用分隔符的内容后,我有点困惑。 根据我的理解,对于分隔符,触发器 block 应该这样编写: DROP TRIGGER IF EXISTS innovation
这个问题在这里已经有了答案: Java Regex Capturing Groups (4 个答案) 关闭 7 年前。 我需要获取 by_ 和 _on 之间的字符串。 到目前为止我有这个,但不明白如
我是一名优秀的程序员,十分优秀!