输入文件包含带增量编号的.SYNC:-.sync从位置1开始
----+----1----+----2----+----3---
.SYNC 175
UPDATE DB2DF36.RF_PROC_RATES
.SYNC 180
UPDATE DB2DF36.RF_PROC_RATES
.SYNC 185
UPDATE DB2DF36.RF_PROC_RATES
.SYNC 190
UPDATE DB2DF36.RF_PROC_RATES
.SYNC 195
UPDATE DB2DF36.RF_PROC_RATES
需要以这样的方式应用X all .sync或jcl sort,它用COMMIT替换整个.SYNC行;
输出:
COMMIT;
UPDATE DB2DF36.RF_PROC_RATES
COMMIT;
UPDATE DB2DF36.RF_PROC_RATES
COMMIT;
UPDATE DB2DF36.RF_PROC_RATES
COMMIT;
UPDATE DB2DF36.RF_PROC_RATES
COMMIT;
UPDATE DB2DF36.RF_PROC_RATES
答案 0 :(得分:4)
为什么不尝试一个简单的REXX程序。类似的东西:
/* REXX */
'EXECIO * DISKR INDD(FINIS' /* Input dataset */
DO QUEUED()
PARSE PULL TXT
IF WORD(TXT, 1) = 'UPDATE' THEN DO
QUEUE 'COMMIT;'
QUEUE TXT
END
END
'EXECIO' QUEUED() 'DISKW OUTDD(FINIS' /* Output dataset */
EXIT
将上述程序保存在PDS中(例如USERID.MYREXX.EXEC(MYPROC)),然后将其作为工作的一部分运行。 JCL来 运行REXX程序是:
//TSOBATCH EXEC PGM=IKJEFT01
//SYSEXEC DD DSN=USERID.MYREXX.EXEC,DISP=SHR
//INDD DD DSN=DATASET.TO.READ,DISP=SHR
//OUTDD DD DSN=DATASET.TO.WRITE,DISP=NEW...
//SYSTSPRT DD SYSOUT=A
//SYSTSIN DD *
%MYPROC
/*
//
上述过程将分配给INDD的数据集读入其内部数据队列。 然后它一次拉入一条记录(PARSE PULL TXT)。如果该行开头 “word”UPDATE然后推出两行,一个COMMIT;它紧随其后 读。最后,它将排队的记录写回新的输出数据集。
如果输入行上的第一个单词不是UPDATE,那么它只是忽略该行 并继续下一个。
答案 1 :(得分:3)
OPTION COPY
INREC IFTHEN=(WHEN=(1,5,CH,EQ,C'.SYNC'),
OVERLAY=(C'COMMIT;',10X))
测试值,使用OVERLAY覆盖值的顶部。
您可以修改10X,我不知道您的序列号有多长。
BUILD=(C'COMMIT;',80X))
可以替换OVERLAY,假设记录长度为80.使用CPU的时间稍微多一些,但是这是一种懒惰的方式来完成它。
从重新阅读你的问题看来,你可能也想用ISPF编辑器做这件事。
如果您的所有序列号都是三位数,则可以一次性完成:
c(hange) 1 p"$sync ###" "commit;"
这将更改的查找部分的位置限制为第1列,使用图片字符串,其中显示“特殊字符,字母”同步“(将遵循CAPS设置),一个空格和三个数字”将改为“提交”; (再次尊重CAPS的设定)。您必须注意;
不是您的命令分隔符,如果是,则在主面板上的选项0上更改它。
如果您的序列号也更长/更短,我认为不能一次性完成。
为了安全起见,当然,您可以排除所有行,f(查找).sync(从第1列开始),然后c(hange) p"#" " " all nx
然后将.sync更改为提交,记住all nx
如果使用命令分隔符(;
除外),则可以在一行中完成所有操作(如果有空格)。
如果你腌制它,有UNDO,如果你已经启用它。
在@ NealB的回答中有一个非常有用的东西。这是一个人们经常难以掌握的概念。
SOME STUFF
SOME OTHER STUFF
SOME STUFF
DIFFERENT STUFF
SOME STUFF
YET MORE DIFFERENT STUFF
要求是“所有出现的SOME STUFF应更改为BANANAS”。
有用的东西是“抛弃我们迄今为止但不想要的东西,并将新的东西放在原处”。
另一个例子是:https://stackoverflow.com/a/14607610/1927206
要求将空白行从文件开头移到文件末尾。
这可以通过“删除文件开头的空行并在文件末尾添加空行”来实现。 “噢。我做不到。我需要数据,我只是不想要那里......”。有些人很难理解记录在记录中的“STUFF”与程序中的字面“STUFF”完全相同。
所以,这是这种情况的实现:
OPTION COPY
OMIT COND=(1,5,CH,EQ,C'.SYNC') oh my goodness, there goes my data!
OUTFIL BUILD=(C'COMMIT;',80:X,
/,
1,80)
Slash运算符/
仅在OUTFIL中的BUILD上可用(请不要在OUTFIL中使用OUTREC,对所有新代码使用BUILD)并在每次使用时生成新记录
与NealB一样,这假定数据是成对的记录。它抛弃了对中的第一个,然后在输出第二个之前再创新一对。
这通常是简化处理的好方法。这里没有这样的好处,但是自从这项技术出现以后......