Ibm midrange 当从我的程序中使用时,CPYTOPCD只复制一小部分信息,但当从命令行使用时,它复制所有信息

Ibm midrange 当从我的程序中使用时,CPYTOPCD只复制一小部分信息,但当从命令行使用时,它复制所有信息,ibm-midrange,rpgle,control-language,Ibm Midrange,Rpgle,Control Language,我对整个ibmi(as400)rpgle场景还比较陌生 我的任务是将一些信息导出为XML格式 我能够正确地输出信息,当我使用CPYTOPCD将信息复制到XML文件时,问题就出现了 由于某些原因,我还没有理解甚至找到关于CPYTOPCD的信息,当我从程序中使用时,CPYTOPCD只复制了一小部分数据。当我转到as400命令行时,它会毫无问题地复制整个数据 当我这样做时,我能看到的唯一区别是,在命令行中,CPYTOPCD命令都在一行中,而在程序中,我必须使用“+”并移动到下一行来完成命令 我看过很多

我对整个ibmi(as400)rpgle场景还比较陌生

我的任务是将一些信息导出为XML格式

我能够正确地输出信息,当我使用CPYTOPCD将信息复制到XML文件时,问题就出现了

由于某些原因,我还没有理解甚至找到关于CPYTOPCD的信息,当我从程序中使用时,CPYTOPCD只复制了一小部分数据。当我转到as400命令行时,它会毫无问题地复制整个数据

当我这样做时,我能看到的唯一区别是,在命令行中,CPYTOPCD命令都在一行中,而在程序中,我必须使用“+”并移动到下一行来完成命令

我看过很多不同的网站,但我找不到类似的问题。也许我没有正确地表达这个问题,这一直是我最大的问题

我很抱歉,如果我可能没有解释好的情况,所以请让我知道什么其他信息,我可以提供,使它更容易

非常感谢您能提供的任何帮助

编辑:我不知道这是否是问题的一部分,但我想我还是把它加进去以防万一。当我检查输出的XML时,它在哪里结束,这是通过它以前毫无问题地编写的某个标记的一半,它会放入一个小框。根据我在网上找到的,我认为这是一个空白字符,但我不确定

edit2:CLP针对不同的文件多次执行此操作

CLRPFM文件(SDIXW4)

呼叫PGM(SDI812)

CPYTOPCD FROMFILE(SDIXW4)TOFLR('AUDIT')+
TODOC(RELLOC.XML)替换(*是)+ TRNFMT(*注xt)


编辑3:我要试试查尔斯提出的建议。希望这能绕过我在CPYTOPCD上遇到的问题。我将在测试新表单后更新此内容。再次感谢您的帮助。

我想您正在进行某种源代码编辑会话。既然如此,我建议与其键入加号,不如转到下一行并完成命令。。。您只需键入CPYTOPCD,然后按F4和F10,然后完成提示的命令。(使用页面键查看整个命令参数和选项列表。)也许您会看到以前错过的东西。这种方法的另一个优点是,您可以使用F1获取命令中任何参数的帮助。

CPYTOPCD非常不受欢迎。此外,它不会将DB2转换/导出为XML,因此您的DB2表似乎已经包含XML。cpytostf是一个更好的选择,可以简单地将已经存在的XML表移动到集成文件系统(IFS)


编辑:检查作业日志。像CPYTOPCD这样的ibmi命令在遇到错误时几乎总是发出某种消息。一个人在没有任何消息的情况下失败是很不寻常的。调用QCMD进入裸命令行并按F10查看所有消息

您使用的是什么版本和发行版

正如巴克所提到的,CPYTOPCD已经贬值很长时间了。cpytostf和CPYTOIMPF是更好的选择

由于您提到自己添加XML标记,因此比CPYxxx命令更好的选择是简单地使用C运行时库中可用的
write()
函数直接写入IFS流文件。您可以从ILE C或ILE RPG程序使用此函数。 (示例代码来自

fd=open('/home/scottk/xml/test.xml'
:O_WRONLY+O_create+O_TRUNC+O_CCSID
:M_RDWR
: 819);
xml=
''
+ ''
+ ' '
+''+%修剪(名称)+''

+“.

不久前我也遇到了同样的问题…CPYTOPCD没有从我的文件中导出所有记录…但我在RPG代码末尾通过QCMDEXEC调用了该命令,但在QCMDEXEC解决该问题之前,它已经足够“关闭我的文件”。
你是用“return”还是“seton LR”来结束你的rpg代码?

是的,我检查了整个参数列表,其中一个很大的不同是当我用*NOTEXT而不是*TEXT填写TRNFMT时。它复制了很多数据,但仍然不完整。您可以将整个命令粘贴到这里…和/或提供有关数据的更多详细信息吗?另外,您是否忽略了错误(让这么多人陷入麻烦…)比如MONMSG CPF0000,而忽略结果?如果是这样,请停止!让我们看看没有它会出现什么错误。CPYTOPCD FROMFILE(SDIXW4)TOFLR('AUDIT')+TODOC(RELLOC.XML)REPLACE(*YES)+TRNFMT(*NOTEXT)我不认为我忽略了错误,至少我可以搜索这些错误。我发现的唯一错误是XML文件中带有空格字符的框。我在该框中找到的信息是,进入文件并删除它,对如何避免它没有真正的帮助。顺便说一句,谢谢你的帮助。编辑:我得到的唯一信息是warning,CPD0792,这是因为该程序只是调用其他程序并使用CPDTOPCD。CPD0792是CL编译器诊断。您使用的是CL程序还是RPG程序?CLP调用的是RPGLE程序,但CPYTOPCD是从CLP调用的,很抱歉出现这种混淆,正如我所说的,我对所有这些都是新手。TOFLR()不是到IFS,而是到PC文件夹。我不确定文件夹是否有IFS路径(可能有,但如果没有系统,我无法检查)。谢谢,但该表不包含XML,因为我对它太陌生了,所以我手动让它写入标记。RPGLE程序读入数据,我手动写入标记。我也尝试使用CPYTOSTMF,因为我一直在读,它会更好,但我似乎无法让它工作。显然,我编写的命令不正确没错,但即使有所有的在线示例,我还是一直在写一些错误的东西。我相信这与STMF参数有关
fd = open('/home/scottk/xml/test.xml'
: O_WRONLY+O_CREAT+O_TRUNC+O_CCSID
: M_RDWR
: 819);
xml =
'<?xml version="1.0">'
+ '<CustFile>'
+ ' <CustRec custno="' + %trim(CustNo) + '">'
+ ' <Name>' + %trim(Name) + '</Name>'
+ ' <Address>'
... And so forth ...
callp write(fd: %addr(xml)+2: %len(xml));
callp close(fd);
/end-free