0

我想构建一个计算批处理流的关键批处理的小应用程序。作为输入,我需要使用大型机数据集。如果可能的话,是动态的,也就是我可以选择当时适用的字段。

我已经在互联网上搜索过,但没有找到适合我想做的事情。有没有办法做到这一点?

4

3 回答 3

2

我在大型机库中有一个数据集,我想将该文件 ftp 到 Excel。

在大型机上将文件转换为 CSV(例如,通过 REXX exec、z/OS UNIX shell 脚本或Lua4z程序),然后通过 FTP 将该 CSV 文件插入 Excel。

您无需将 CSV 文件传输到 PC 的文件系统,然后作为单独的步骤在 Excel 中打开它。

相反,您将 CSV 的 FTP(或 HTTP)URL 定义为 Excel 中的数据源。此技术的一个优点是您可以从该 URL 刷新数据,而无需在 Excel 中重新应用格式。

网上有各种各样的教程可以做到这一点。

简单来说:

  1. 创建一个新的空白工作簿(我使用的是 Excel 2010)。
  2. 选择空工作表中的第一个单元格(此步骤是不必要的 - 单元格已被选中 - 如果您刚刚创建了工作簿)。
  3. 数据选项卡上,单击从文本
  4. 在“导入文本文件”对话框的“文件名”文本框中,输入 CSV 文件的 FTP URL。例如:

    ftp://zos1//u/me/data.csv

    (这假设您的大型机配置为允许使用此路径的 FTP。)

    主机名 (zos1) 后面的两个连续斜杠 (/) 字符指示路径引用 z/OS UNIX 文件 (/u/me/data.csv)。

    CSV 文件必须位于 z/OS UNIX 路径中。FTP 客户端不接受诸如 'me.csv(data)' 之类的 MVS 样式 (dsname) 路径(即使是 URL 编码;也就是说,单引号转义为 %27);相比之下,cURL 接受这样的路径就好了。

    大型机上的 CSV 文件必须是 ASCII 编码,而不是 EBCDIC。(在这里,我使用的术语 ASCII 不准确:您想要的精确字符编码取决于您 PC 的设置。您可能需要 Windows-1252。)这是因为 FTP 客户端将默认传输类型设置为二进制。

  5. 输入您的用户名和密码(您的 z/OS TSO 用户 ID 和密码)。
  6. 等待数据加载。
  7. 格式化单元格。例如,设置包含日期/时间值的任何列的格式。
  8. 在“数据”选项卡上,单击“连接”,选择连接(在您为文件名指定 URL 时 Excel 创建的连接),并清除复选框“刷新时提示文件名”

要刷新数据,将当前数据替换为新 FTP 请求的结果:在数据选项卡上,单击全部刷新。数据被替换;单元格格式保持不变。

将 EBCDIC 编码的 CSV 文件转换为 ASCII

(严格来说,我的意思是 ISO-8859,而不是 ASCII。)

假设您有生成以 EBCDIC 编码的 CSV 文件的 JCL。您希望通过 FTP 将该 CSV 文件作为 ASCII 编码的 z/OS UNIX (zFS) 文件提供给 Excel。

将输出 CSV 文件的现有 DD 语句替换为以下 DD 语句:

//OUTCSV      DD PATH='/u/me/data-ebcdic.csv',       
//            PATHOPTS=(OWRONLY,OCREAT,OTRUNC),
//            PATHDISP=(KEEP,DELETE),          
//            PATHMODE=(SIRUSR,SIWUSR,SIRGRP), 
//            FILEDATA=TEXT                    

将 ddname 替换为OUTCSV您的 ddname,将 zFS 文件路径/u/me/data-ebcdic.csv替换为您要使用的路径。

由于该FILEDATA=TEXT参数,生成的 CSV 文件将在每行末尾有一个 X'15' 字节。

将以下步骤附加到您的 JCL:

//ICONV   EXEC PGM=IKJEFT01
//SYSTSIN DD *
BPXBATCH sh iconv -f IBM-037 -t iso8859-1 +
 /u/me/data-ebcdic.csv +
 > /u/me/data-ascii.csv
/*
//SYSPRINT DD  SYSOUT=*
//SYSTSPRT DD SYSOUT=*

如果您想知道为什么我iconv通过 调用 shell 命令BPXBATCH,请执行以下操作:

//ICONV    EXEC PGM=EDCICONV
//         PARM=('FROMCODE(IBM-037),TOCODE(iso8859-1)')

不太奏效:它保留了 X'15' 字节,而iconv作为 shell 命令运行时正确地将它们转换为 X'0A'。(z/OS 2.2。)

于 2015-06-26T04:32:03.690 回答
1

您在评论中有一些很好的信息,共识似乎是转换为 CSV(或 TSV 以避免在您的数据中嵌入逗号)是最简单的途径。这是从另一个答案复制的更多信息...

我强烈建议您将文件转换为文本格式,然后再将它们传输到具有不同代码页的另一个框中。尝试处理混合文本(必须翻译其代码页)和二进制(不得翻译其代码页但可能必须从大端转换为小端)比预先进行转换更难。

转换很可能通过大型机上的 SORT 实用程序完成。大型机 SORT 实用程序往往具有广泛的数据操作功能。您可以使用其他机制(其他实用程序、以您选择的语言编写的自定义代码、购买的软件包),但这是我们在这些情况下倾向于做的事情。

将平面文件转换为所有数据都是文本后,您可以通过 FTP 或 SFTP 或 FTPS 传输它们。

...感谢您回来并添加更多信息。希望这里的人提供了足够的信息来帮助您解决问题。

于 2013-03-08T12:47:59.750 回答
1

XML 将是另一种可能的面向文本的解决方案。创建会花费更多精力,但您可以在 Excel 中设计电子表格并保存为 XML 文档,然后编写程序以使用大型机数据集中的数据生成 xml 文本。虽然这比简单的 CSV 或 TSV 文件更难实现,但它具有实现 CSV 文件无法实现的电子表格公式和属性的优势。另一个优点是,您可以将 XML 文档附加到 SMTP 电子邮件注释中,然后以“电子表格格式”将文档交付给您的客户。

于 2013-05-13T13:56:57.363 回答