0

バッチ フローの重要なバッチを計算する小さなアプリケーションを構築したいと考えています。入力として、メインフレーム データセットを使用する必要があります。可能であれば、動的であること、つまり、その時点で適用されるフィールドを選択できることです。

私はそれについてインターネットを検索しましたが、私がやりたいことに合ったものは何も見つかりませんでした. それを行う方法はありますか?

4

3 に答える 3

2

メインフレーム ライブラリにデータセットがあり、そのファイルを ftp で Excel に転送したいと考えています。

メインフレームでファイルを CSV に変換し (たとえば、REXX exec、z/OS UNIX シェル スクリプト、またはLua4zプログラムを使用)、その CSV ファイルを FTP 経由で Excel に挿入します。

CSV ファイルを PC のファイル システムに転送してから、別の手順として Excel で開く必要はありません。

代わりに、CSV の FTP (または HTTP) URL を Excel のデータ ソースとして定義します。この手法の利点の 1 つは、Excel で書式設定を再適用することなく、その URL からデータを更新できることです。

これを行うためのさまざまなチュートリアルが Web 上にあります。

簡単に言えば:

  1. 新しい空白のブックを作成します (私は Excel 2010 を使用しています)。
  2. 空のワークシートの最初のセルを選択します (ワークブックを作成したばかりの場合、この手順は不要です。セルは既に選択されています)。
  3. [データ] タブで、[テキストから]をクリックします。
  4. [テキスト ファイルのインポート] ダイアログの[ファイル名]テキスト ボックスに、CSV ファイルの FTP URL を入力します。例えば:

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

    (これは、メインフレームがこのパスを使用して 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 クライアントがデフォルトの転送タイプをバイナリに設定しているためです。

  5. ユーザー名とパスワード (z/OS TSO ユーザー ID とパスワード) を入力します。
  6. データが読み込まれるまで待ちます。
  7. セルをフォーマットします。たとえば、日付/時刻の値を含む列の形式を設定します。
  8. [データ] タブで、[接続] をクリックし、接続 (ファイル名の URL を指定したときに Excel が作成したもの) を選択し、[更新時にファイル名を要求する] チェック ボックスをオフにします。

現在のデータを新しい FTP 要求の結果に置き換えてデータを更新するには、[データ] タブで [すべて更新] をクリックします。データが置き換えられます。セルの書式はそのまま残ります。

EBCDIC でエンコードされた CSV ファイルを ASCII に変換する

(厳密に言えば、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 に置き換え、OUTCSVzFS ファイル パス/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)

于 2015-06-26T04:32:03.690 に答える
1

コメントにいくつかの良い情報があります。コンセンサスは、CSV (またはデータに埋め込まれたコンマを避けるための TSV) への変換であると思われます。これが最も簡単な方法です。これは、別の回答からコピーされたもう少しの情報です...

ファイルを別のコード ページの別のボックスに転送する前に、ファイルをテキスト形式にすることを強くお勧めします。混合テキスト (コード ページを変換する必要があります) とバイナリ (コード ページを変換してはいけませんが、ビッグ エンディアンからリトルエンディアンに変換する必要がある可能性が高い) を処理しようとするのは、事前に変換を行うよりも困難です。

変換は、メインフレームの SORT ユーティリティを介して行うことができます。メインフレームの SORT ユーティリティには、広範なデータ操作機能が備わっている傾向があります。使用できるメカニズムは他にもあります (他のユーティリティ、選択した言語で記述されたカスタム コード、購入したパッケージ) が、これらの状況で私たちが行う傾向があるのはこれです。

すべてのデータがテキストになるようにフラット ファイルを変換したら、FTP、SFTP、または FTPS 経由で転送できます。

...戻ってきて、さらに情報を追加してくれてありがとう。問題を解決するのに十分な情報がここにある人たちから提供されていることを願っています。

于 2013-03-08T12:47:59.750 に答える