問題タブ [comp-3]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 大きなファイルの場合、comp3 および Java での ASCII への ebcidic 変換の処理
Javaコードでcomp3およびEBCIDIC文字を変換しようとしていますが、処理されるデータ量が約5 GBであるため、メモリ不足の例外が発生します。私のコードは現在次のとおりです。
これにより、メモリ不足の例外が発生しますが、これは理解できますが、ファイル内のデータが行に分割されないため、ファイル スキャナーも使用できません。
これを処理する方法について誰かが正しい方向に私を向けることができますか
注: ファイルには異なる長さのレコードが含まれている可能性があるため、レコード長の継ぎ目に基づいてファイルを分割することはできません。
.net - .NET で "COMP-3" データを解凍できません
ベンダから提供されたファイルから、数値データと日付データの両方を含む COMP-3 フィールドをアンパックする際に問題が発生しています。
ファイル仕様は、次の情報を提供します。
仕様は、日付が MMDDYYYY 形式に展開されることを示しています。
このデータ ブロックをファイルから取得すると、それをメモリに読み込むことができ、5 バイトのデータを取得できることがわかります。(ファイルには、1 文字につき 1 バイトが含まれます。)取得されるバイトは次のとおりです。
最下位桁 (常に表示される場所) に過度に押し込まれた符号はないため、ここでは問題になりません。ビットは次のニブルに展開されます。
ここにはいくつかの問題があります:
01001200 が MMDDYYYY 形式の有効な日付を表す可能性はほとんどありませんが、データがフィールドにパックされた方法のようです。
COMP-3 フィールドがアンパックされると、テンプレートは 9 文字に拡張する必要があることを指定しますが、COMP-3 が拡張されると、そのサイズは常に2 倍になります (文字数が偶数の文字列が生成されます)。その結果、予想されるサイズと展開されたサイズの間に不一致が生じます。
Web 上で見つけられるアルゴリズムは、このデータのアンパックには機能しないようです。ソース ファイル内の (おそらく) BCD 値のいずれについても、認識可能な日付を特定できるものはないようです。
現時点では、真の BCD フォーマットを扱っていないのではないかと思います。ただし、ツールではなく常に自分自身を疑うべきであることを念頭に置いて、COMP-3 形式の理解と見ているデータの性質の両方で何が間違っている可能性があるかについての提案を求めています。
形式についての私の理解は、次のソースから取得されます。
- http://www.3480-3590-data-conversion.com/article-reading-cobol-layouts-4.html
- http://www.3480-3590-data-conversion.com/article-packed-fields.html
- http://www.3480-3590-data-conversion.com/article-bcd-binary.html
- http://www.3480-3590-data-conversion.com/article-signed-fields.html
データを解凍する前に、データを EBCDIC から ASCII に、またはその逆に変換しようとしたことは注目に値します。どちらもわかりやすい結果は得られませんでした。インターネットで見つけられるすべてのアルゴリズムを試しましたが、どれも有用な結果を生成していないようです。
結局のところ、私の質問は次のとおりだと思います。ここで実際にBCDまたはCOMP-3データを扱っているのでしょうか?
アップデート
いくつかの質問への回答:
- 値に符号ニブルが含まれていると判断したら、そのニブルをクリアします。
- 私がやっていることを正確に見ることができるように、できる限りすべてのコードを含めました。このクラスは、多くの診断情報 (Bytes プロパティや Nibbles プロパティなど) を提供するように設計されているため、値を解析した後に結果を確認できます。
参考資料として使用するために、元のファイルと解析されていないファイルの両方を手元に用意しています。私が戻ってくると期待している日付は、06152008 のようなものです (これは私の頭から離れていますが、要点はわかります)。私が計算している値は、そのようなものではありません。
リクエストごとに、個々のニブル:
0 1 0 0 1 2 0 0 0 2
そして、私がどのようにそれを行っているかに興味がある人のために、解凍しているクラス:
そして、それをサポートする拡張メソッド:
java - Java での COMP-3 データのアンパック (Pentaho に組み込み)
Pentaho ETL 内に埋め込まれた Java で COMP-3 データを読み取る際に、課題に直面しています。他のプレーン テキストと共にフラット ファイルにパック 10 進数として格納されている Float 値はほとんどありません。プレーンテキストが適切に読み取られている間に、 を使用してみCharset.forName("CP500");
ましたが、うまくいきませんでした。私たちはまだジャンクキャラクターを手に入れています。
Pentaho スクリプトは COMP-3 をサポートしていないため、フォーラムで を使用することを提案しましたUser Defined Java class
。あなたが遭遇して解決した場合、誰かが私たちを助けることができますか?
cobol - PIC X フィールドを COBOL の PIC S9 COMP-3 フィールドに移動するにはどうすればよいですか?
私の状況は次のとおりです。
ファイルから次の作業領域フィールドに入力を読み込んでいます:
WORKING-STORAGE SECTION.
01 WORK-FIELDS.
05 W1-INPUT.
10 TESTCASE-NUMBER PIC X(02).
10 PIC X(01).
10 TESTCASE-ID PIC X(18).
10 PIC X(01).
10 TESTCASE-CONTENT PIC X(20).
TESTCASE-ID の内容に応じて、最終的に TESTCASE-CONTENT フィールドの内容を、次のコピーブックの AMOUNT-DECIMAL-FORMAT または AMOUNT-DECIMAL-NUMBER フィールドに移動する必要があります。
05 (*)AMOUNT.
10 AMOUNT-DECIMAL-FORMAT PIC S9(18) COMP-3.
10 AMOUNT-DECIMAL-NUMBER PIC S9(01) COMP-3.
10 AMOUNT-IN-XML-FORMAT PIC N(20).
次に、これらのパラメーターを処理して AMOUNT-IN-XML-FORMAT フィールドに入力する別のプログラムを呼び出す必要があります。
とにかく、私の質問は次のとおりです。PIC X フィールドの内容を S9 COMP-3 フィールドに移動する最良の方法は何ですか?
お時間をいただきありがとうございます。
binary - comp -3 フィールド Cobol に入れられたバイナリーの変換
バイナリで格納されている pic S9 (9)V99 comp-3 フィールドを変換しようとしています。6/PS X'000000002000' のような表示です。
この金額は 20.00 のように表示されます。それを pic -9 (9)V99 フィールドに変換する適切な方法を見つけようとしています。
ありがとう
c# - comp-3 を人間が読める形式に戻す
PIC S9(4)
フィールドがcomp-3でエンコードされているという情報があります。また、データ (私の場合は顧客に関するもの) を含むデータ ファイルもあります。notepad++ を使用してデータ ファイルを開くと、「DLE」、「BEL」、「NUL」などの文字が表示され、この表に移動します。まず、「comp-3」が何をするのか説明してもらえますか? そして、たとえばc#を使用して(両方のファイルを入力として)人間が読める形式/データに変換するにはどうすればよいですか?