标签: ibm-ifs

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

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

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

我熟悉通过QtqIconvOpen API 将数据从一个CCSID转换到另一个CCSID,所以如果我知道文件的CCSID与我们的默认CCSID不同,我可以转换它.我在几年前编写代码来做到这一点并且工作正常.

我的问题是以编程方式查找IFS文件的CCSID.在谷歌搜索之后,我发现的唯一相关信息来自JamesA的Stackoverflow(如何确定CPYFRMIMPF命令中使用的CCSID?)谁指出你可以在QSHELL中执行"ls -S"以获得显示其CCSID的文件列表和文件名.

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

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

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

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

rpgle ibm-midrange ibm-ifs

2
推荐指数
2
解决办法
2010
查看次数

在巨大的目录中查找文件 - 非常慢

我有一个包含文件的目录.存档非常大,里面有150万个pdf文件.
该目录存储在带有OS V7R1的IBM i服务器上,并且该机器是新的且速度非常快.
这些文件的名称如下:

invoice_[custno]_[year']_[invoice_number].pdf  
invoice_081500_2013_7534435564.pdf    
Run Code Online (Sandbox Code Playgroud)

不,我尝试使用命令行使用find命令查找文件.

find  . -name 'invoice_2013_*.pdf'  -type f | ls -l > log.dat
Run Code Online (Sandbox Code Playgroud)

命令花了很长时间,所以我中止了操作而没有结果.

如果我尝试使用较小的目录,一切正常.

后来我希望有一份工作能够在过去的24小时内运行,并且我发现这些文件运行速度太慢,我可以忘记这一点.

shell ibm-midrange ibm-ifs

0
推荐指数
1
解决办法
2634
查看次数

标签 统计

ibm-ifs ×2

ibm-midrange ×2

rpgle ×1

shell ×1