バッチ フローの重要なバッチを計算する小さなアプリケーションを構築したいと考えています。入力として、メインフレーム データセットを使用する必要があります。可能であれば、動的であること、つまり、その時点で適用されるフィールドを選択できることです。
私はそれについてインターネットを検索しましたが、私がやりたいことに合ったものは何も見つかりませんでした. それを行う方法はありますか?
メインフレーム ライブラリにデータセットがあり、そのファイルを ftp で Excel に転送したいと考えています。
メインフレームでファイルを CSV に変換し (たとえば、REXX exec、z/OS UNIX シェル スクリプト、またはLua4zプログラムを使用)、その CSV ファイルを FTP 経由で Excel に挿入します。
CSV ファイルを PC のファイル システムに転送してから、別の手順として Excel で開く必要はありません。
代わりに、CSV の FTP (または HTTP) URL を Excel のデータ ソースとして定義します。この手法の利点の 1 つは、Excel で書式設定を再適用することなく、その URL からデータを更新できることです。
これを行うためのさまざまなチュートリアルが Web 上にあります。
簡単に言えば:
[テキスト ファイルのインポート] ダイアログの[ファイル名]テキスト ボックスに、CSV ファイルの FTP URL を入力します。例えば:
(これは、メインフレームがこのパスを使用して FTP を許可するように構成されていることを前提としています。)
ホスト名 (zos1) に続く 2 つの連続するスラッシュ (/) 文字は、パスが z/OS UNIX ファイル (/u/me/data.csv) を参照していることを示します。
CSV ファイルは z/OS UNIX パスにある必要があります。FTP クライアントは、「me.csv(data)」などの MVS スタイル (dsname) パスを受け入れません (URL エンコードされている場合でも、つまり、一重引用符が %27 としてエスケープされている場合でも)。対照的に、cURL はそのようなパスを問題なく受け入れます。
メインフレーム上の CSV ファイルは、EBCDIC ではなく、ASCII でエンコードされている必要があります。(ここでは、ASCII という用語を不正確に使用しています。必要な正確な文字エンコーディングは、PC の設定によって異なります。おそらく Windows-1252 が必要です。) これは、FTP クライアントがデフォルトの転送タイプをバイナリに設定しているためです。
現在のデータを新しい FTP 要求の結果に置き換えてデータを更新するには、[データ] タブで [すべて更新] をクリックします。データが置き換えられます。セルの書式はそのまま残ります。
(厳密に言えば、ASCII ではなく ISO-8859 を意味します。)
EBCDIC でエンコードされた CSV ファイルを生成する JCL があるとします。その CSV ファイルを、ASCII エンコードされた z/OS UNIX (zFS) ファイルとして FTP 経由で 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 を実際の ddname に置き換え、OUTCSV
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
介してシェルコマンドとして呼び出しているのか疑問に思っている場合BPXBATCH
は、次のようにします。
//ICONV EXEC PGM=EDCICONV
// PARM=('FROMCODE(IBM-037),TOCODE(iso8859-1)')
うまくいきませんでした: X'15' バイトはそのまま残されましたがiconv
、シェル コマンドとして実行すると X'0A' に正しく変換されました。(z/OS 2.2)
コメントにいくつかの良い情報があります。コンセンサスは、CSV (またはデータに埋め込まれたコンマを避けるための TSV) への変換であると思われます。これが最も簡単な方法です。これは、別の回答からコピーされたもう少しの情報です...
ファイルを別のコード ページの別のボックスに転送する前に、ファイルをテキスト形式にすることを強くお勧めします。混合テキスト (コード ページを変換する必要があります) とバイナリ (コード ページを変換してはいけませんが、ビッグ エンディアンからリトルエンディアンに変換する必要がある可能性が高い) を処理しようとするのは、事前に変換を行うよりも困難です。
変換は、メインフレームの SORT ユーティリティを介して行うことができます。メインフレームの SORT ユーティリティには、広範なデータ操作機能が備わっている傾向があります。使用できるメカニズムは他にもあります (他のユーティリティ、選択した言語で記述されたカスタム コード、購入したパッケージ) が、これらの状況で私たちが行う傾向があるのはこれです。
すべてのデータがテキストになるようにフラット ファイルを変換したら、FTP、SFTP、または FTPS 経由で転送できます。
...戻ってきて、さらに情報を追加してくれてありがとう。問題を解決するのに十分な情報がここにある人たちから提供されていることを願っています。