gpt4 book ai didi

ibm-midrange - 如何以编程方式确定 IFS 中文件的 CCSID?

转载 作者:行者123 更新时间:2023-12-04 04:54:42 25 4
gpt4 key购买 nike

我在 IFS 中有许多文件,其中包含各种 CCSID(0、37、819、1200、1252 等),我的任务是编写一个简单的 RPGLE [1] 程序,允许用户查看任何这些文件的内容。

我们的系统 (V6R1) CCSID (DSPSYSVAL QCCSID) 是 65535 [2],我们的作业的默认 CCSID 是 37,这意味着当我尝试显示 CCSID 819 (ASCII) 时,我看到乱码——符号、随机颜色等

我熟悉通过 QtqIconvOpen 将数据从一个 CCSID 转换为另一个 CCSID API,所以如果我知道文件的 CCSID 不同于我们默认的 CCSID,我可以转换它。几年前我写了代码来做到这一点,它运行良好。

我的问题是以编程方式找出 IFS 文件的 CCSID。在谷歌搜索之后,我在 Stackoverflow 上发现的唯一相关信息来自 JamesA (How to determine the CCSID used in CPYFRMIMPF command?),他指出您可以在 QSHELL 中执行“ls -S”以获得显示其 CCSID 和文件名的文件列表。

因此理论上我可以执行 ls -S filename,解析输出以获取 CCSID,然后在必要时使用该 CCSID 执行数据转换。不过,这是一个丑陋的 hack,如果可能的话,我更愿意使用 IBM API。

有谁知道这样的 API 或比从 ls -S filename 解析列表更优雅的 hack?

[1] 我使用 C API 的 open()read()close() 来实际读取数据.

[2] 我知道 65535 是一个糟糕的选择,但我对此无能为力。

最佳答案

它看起来像 Qp0lGetAttr() "Get Attributes" API将让您指定一组属性来检索特定文件,包括一个名为 QP0L_ATTR_CCSID 的属性。

Here's an example of this API in use from RPG.包含 GetAttr 调用的示例位于 ZIP file linked from that page 中.

关于ibm-midrange - 如何以编程方式确定 IFS 中文件的 CCSID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16064817/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com