1

我在 unix 系统中有 VSAM 文件。我想在 python 中使用该文件的布局来读取该文件。在 .idx 和 .dta 中,我将 .dta 复制到本地计算机并尝试使用以下代码进行读取,

infile = open("myfile.dta","r",encoding="ansi")
for line in infile:
    print(line)

没有编码参数,它会给出错误..

"UnicodeDecodeError: 'charmap' codec can't decode byte 0x8d in position 1572"

所以为了解决这个错误,我在记事本++中打开了文件并检查了编码。现在我可以读取文件并显示数据(我仍然可以看到一些特殊字符)。

现在主要问题是如何根据提供的布局逐条读取此文件记录。

4

2 回答 2

3

有 Python 3 和 Python 2 到 z/OS 的端口。看起来 Python 3 端口目前不支持访问“本机”或“经典”z/OS 文件——那些驻留在 z/Unix 文件系统中的文件。

VSAM 不是一个小话题。如果您对历史和底层技术感兴趣,请随时在您喜欢的搜索引擎中搜索“什么是 VSAM”;TLDR 是 VSAM 文件类似于 ISAM,因为它们允许在给定密钥的情况下读取特定记录。VSAM 当然还有其他的能力,它强调的不是ISAM,这只是一个类比。

根据相关文件的使用模式,您可能会遇到一些访问阻力。如果生产 CICS 区域正在使用这些 VSAM 文件,那么大量使用您的代码可能会产生争用,从而导致性能下降。

需要考虑的事情:您实际上是在向正在运行的生产系统添加新需求,这样做需要进行一些分析以确定满足您需求的最佳机制,而不会对现有系统产生负面影响。该机制将考虑现有的车间标准、安全性、性能、员工时间等。也许已经进行了分析(我不知道是否有),但您的问题表明您的工作站上有单个 VSAM 文件的副本随后的评论似乎表明您希望在 z/OS 上访问“许多此类文件”。

当非大型机开发人员必须访问现有大型机系统中包含的部分或全部数据时,通常情况下,您必须讨论您和他们的需求,以提出双方都同意的解决方案。我试图在这个答案这个答案这个问题的这个答案中概述一些问题,其中提到了 Calcite(我没有经验)和 z/OS 的 NFS 服务器功能(我也没有经验)。很多功能,很多选项,我将在这里重申不止一个链接答案:

请理解两者之间存在很大差异...

  • 什么是技术上可能的
  • 你的商店允许什么
  • 考虑到您的要求,什么可能提供强大且可维护的解决方案

这是三个非常不同的东西。我们中的一些人的生活经历使我们不愿回答有关技术上可行的问题,而没有提及您的商店中允许的内容或正在解决的实际业务需求。

大型机已经存在了半个多世纪,许多商店都有针对技术问题的标准解决方案。有时解决方案是“不要那样做,这就是我们要做的”。违背技术人员的建议或车间标准工作是职业限制。

于 2019-02-28T15:55:40.447 回答
1

您将无法使用 Python 读取 VSAM 文件。也许如果您调用 C API 库,但这是值得怀疑的。您可以使用 Java JZOS api 并进入 MVS 方面。大多数 z/OS 系统都安装了 Java。如果您没有安装 Java... 去学习一些 COBOL。

于 2019-02-28T13:14:11.607 回答