8年程前に組まれた、COBOLベースのシステムからデータを抽出したくて困っています。
データの実体は、見つけておりそれがバイナリデータである事までは確認出来ています。
そのデータを変換して、データの中身を確認したいのです。
バイナリデータ⇒16進数データ(.hex)にまでは変換出来たのですが、
それ以降、どうすれば良いのかがわかりません。
別途、COBOLプログラムを組んでデータを抽出する事も考えましたが、
COBOLの知識が皆無で、それをやるのは最終手段だと考えています。
仮に上記のような要件を満たす為に他にどのような情報が必要かもよく分かりませんので、
その辺も含めて教えて頂ければと思います。
A 回答 (13件中1~10件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
そのデータを入出力しているプログラムのロジックをみて
データ定義に、そのフォーマット形式が記述されていると思います。
COPY句で、別ファイルになってるかもしれません。
もし詳細設計書などにデータ定義書のようなものがなければ、
COBOL自体を解析するしかないでしょう。
COBOLの構文はそんなに難しいものではないですよ。
どうしてもご自身で分からなければ、分かる人間に頼むしかないでしょう。
この回答への補足
COPYディレクトリが確かにあります。
ソースを見てみたのですが、データ構造みたいなのとかが書いてあるのはわかるんですが、
その何処を見れば、
>データ定義に、そのフォーマット形式が記述されていると思います。
これがわかりますか?また、フォーマットが分かった場合それ以降どういった手順を踏めばよいでしょうか?
No.3
- 回答日時:
まずは、↓辺りを明確にされた方が良いでしょう。
1. 何のデータが格納されていると考えられるのか?
2. COBOLのプログラムはどんな環境で動かしていたのか?
3. COBOLのプログラムはどんな目的のシステムか?
また、何を持って、バイナリデータ、つまり、テキストデータではないと判断されたのでしょうか?
どんな形式のデータかも分からないのにバイナリーデータと判断するのは容易ではないと思います。例えば、COBOLのプログラムが汎用機やそれに準じる環境で動いていたのであれば、EBCDICコードとその日本語拡張コードに拠るテキストファイルを扱っていた可能性も有るとおもいますが、PCの環境で正常に表示できるエディタやビューワーは滅多にないでしょう。
http://ja.wikipedia.org/wiki/EBCDIC
また、日本語だけを見ても様々なエンコード方式が有りますからその全てに当てはまらない事を確認しなくてはなりません。
> バイナリデータ⇒16進数データ(.hex)にまでは変換出来た
ということですが、具体的にどの様な処理を行ったのでしょうか?
この回答への補足
分かる範囲で補足させて頂きます。
>1. 何のデータが格納されていると考えられるのか?
顧客管理システムのデータです。
2. COBOLのプログラムはどんな環境で動かしていたのか?
Windows ローカル環境で動作するアプリケーションとしてです。
現在は、XPで動いています。
3. COBOLのプログラムはどんな目的のシステムか?
顧客管理です。
>また、何を持って、バイナリデータ、つまり、テキストデータではないと判断されたのでしょうか?
テキストエディタで、閲覧した時の状態です。それぐらいは、一応分かるので。。。
バイナリエディタで内部を閲覧した際にデータの確認も出来ましたので。
>本語だけを見ても様々なエンコード方式が有りますからその全てに当てはまらない事を確認
文字コードは、shift_jisを一応あたっています。
>> バイナリデータ⇒16進数データ(.hex)にまでは変換出来た
>ということですが、具体的にどの様な処理を行ったのでしょうか?
http://www.vector.co.jp/soft/win95/util/se498419 …
上記のソフトを使用しました。
No.4
- 回答日時:
お疲れ様です。
COBOLですか・・・
自分の知ってる範囲でも現役で動いてますね。
COBOLではバイナリ・データに当たるのはパックドデシマルですが
コンパイラーによっては純粋なバイナリを扱える物も有ります。
COBOLを使わない方向で言うと
次の点を確認し補足してください。
1.動作環境は?
ホスト系/オフコン系/UNIX系/Windows系/その他
2.COBOLコンパイラーは何?
文字コードやシフトイン/シフトアウトの扱いが変わります。
例えば同じEBCDICでもNEC,富士通,IBMで拡張文字のマッピングが異なる
数値データのサインの扱いも変わります。
インデック/リラティブ・ファイルの構造が違います。
レコードの削除方法も違います(削除フラグなど)
3.ファイル(レコード)定義書の有り/無し?
公開して頂ければ変換方法などの参考にできます。
稼動中のCOBOLコンパイル環境が有れば
COBOLの出来る人を頼んでファイルを
変換してもらった法が一番良いと思います。
データDUMPを解析するより間違いが有りません。
この回答への補足
ご質問頂いた内容を分かる範囲で補足します。
>1.動作環境は?
Windows 系です。現在は、XPで動作しています。
>2.COBOLコンパイラーは何?
これがわかりません。ネットで調べてみても情報がないのですが、
コンパイル済み。もしくは、システム内の『source』ディレクトリのファイルを参照して
わかるもんなのでしょうか?
>3.ファイル(レコード)定義書の有り/無し?
無いです。とにかく仕様書と呼べるものはまったくありません。
システムの『copy』ディレクトリにそれらしいファイルはあるのですが・・。
No.5
- 回答日時:
COBOLかどうかはあまり関係なくて、そのファイルのレイアウトドキュメントが必要です。
無いと無理です。あれば簡単です。
No.6
- 回答日時:
#4です。
>XPで動作しています
そうなるとShift-JISの漢字コードですかね?
>COBOLコンパイラーは
COBOLで作成された「.EXE」をDUMPして見て下さい。
どこぞにメーカー名とかバージョンらしき物が混ざっていればラッキーです。
>仕様書と呼べるものはまったくありません
>システムの『copy』ディレクトリにそれらしいファイル
そのファイルがレコード定義のインクルード(COPY句)ファイルだと思います。
このような↓記述ファイルが有りませんか?
1.ファイル定義記述
SELECT SYA-MAST ASSIGN TO SYA-NAME
ORGANIZATION IS INDEXED
ACCESS MODE IS DYNAMIC
RECORD KEY IS SYA01000
ALTERNATE RECORD KEY IS
SYA-AK1 = SYA06000
SYA01000
FILE STATUS IS FST-SYA.
2.レコード定義記述
FD SYA-MAST
LABEL RECORD IS STANDARD.
01 SYA-REC.
03 SYA01000 PIC X(06).
* ~~~~~~~~社員番号
03 SYA02000 PIC N(07).
* ~~~~~~~~社員名
03 SYA03000.
* ~~~~~~~~各種 区分コード
05 SYA03010 PIC X(01).
* ~~~~~~~~稼働人時集計区分
05 SYA03020 PIC X(01).
* ~~~~~~~~身分区分
05 SYA03030 PIC X(01).
* ~~~~~~~~月給区分
05 SYA03040 PIC X(01).
* ~~~~~~~~月中途入社区分
03 SYA04000.
* ~~~~~~~~配属期間
05 SYA04010 PIC 9(08).
* ~~~~~~~~配属開始
05 SYA04020 PIC 9(08).
* ~~~~~~~~配属終了
03 SYA05000.
* ~~~~~~~~契約時間
05 SYA05010 PIC 9(01).
* ~~~~~~~~契約時間フラグ
05 SYA05020.
* ~~~~~~~~契約時間帯
07 SYA05021 PIC 9(04).
* ~~~~~~~~開始時間
07 SYA05022 PIC 9(04).
* ~~~~~~~~終了時間
05 SYA05030.
* ~~~~~~~~契約休憩時間帯
07 SYA05031 PIC 9(04).
* ~~~~~~~~開始時間
07 SYA05032 PIC 9(04).
* ~~~~~~~~終了時間
03 SYA06000 PIC 9(02).
* ~~~~~~~~社員表示順(グループ)コード
03 SYA07000 PIC X(01).
* ~~~~~~~~店長/担任フラグ
*----
03 FILLER PIC X(04).
上記、レイアウトが崩れるので全角スパースに変換してます。それでもズレてしまうけど・・・
このようなファイルが無いか確認してみて下さい。
この回答への補足
補足遅れて申し訳ないです。
まさに仰られているデータがあったので確認しておりました。
>そうなるとShift-JISの漢字コードですかね?
だと思います。バイナリエディタで確認するとShift_jisコードで内容が確認出来るので
そうだと予想しています。
>COBOLで作成された「.EXE」をDUMPして見て下さい。
>どこぞにメーカー名とかバージョンらしき物が混ざっていればラッキーです。
確認出来ませんでした。少し見ただけなのでもう少し時間を掛けて確認してみます。
>そのファイルがレコード定義のインクルード(COPY句)ファイルだと思います。
>このような↓記述ファイルが有りませんか?
まさに仰られるファイルがありました。
それぞれのファイルコメントに何のデータを保持しているのかのコメントはあるのですが、
それぞれの項目に関しては、明確な記述がありません。
> 07 SYA05032 PIC 9(04).
コード 識別ID バイト数
といった感じですかね?読み方は調べれば分かることなので、少し調べて解析してみようと
思います。
確認に時間を取ってしまい、補足が遅くなり申し訳御座いません。
No.7
- 回答日時:
8年前に組み込んだ会社にコンタクトを取って設計仕様書か何かを頂くのが良いかと思われます。
8年前というと2005年ですので、その時にメインフレームからWindowsへ移植されたと思います。又は昔一度DOSへ移植されて、2005年にWindowsへ移植されたと思います。
8年前に新規作成ならデータベースが発達していましたのでもうCOBOLは使いません。COBOLで作られたデータだからCOBOLで代々クロスコンパイルして移植してきたと考えるのが妥当です。
従って、8年前に移植した会社にコンタクトを取らないと何も分かりません。
ファイル設計書かCOBOLのソースプログラムが無いと無理ですね。
ファイルの構成仕様書もファイルアクセスの手順(ソース)もどちらも不明では難しいですね。
年号も今年が昭和88年で運用している可能性も有りませんか。?
この回答への補足
>8年前に組み込んだ会社にコンタクトを取って設計仕様書か何かを頂くのが良いかと思われます。
可能であればそのようにしたいのですが、クライアントの意向では難しそうです。
>8年前というと2005年ですので、
>その時にメインフレームからWindowsへ移植されたと思います。
>又は昔一度DOSへ移植されて、2005年にWindowsへ移植されたと思います。
クライアントが発注した先が、個人のプログラマ様で汎用機関連の仕事をされていたらしく、
細かな経緯はわかりませんが、その方の経験からCOBOLを選択されたらしいです。
>8年前に新規作成ならデータベースが発達していましたのでもうCOBOLは使いません。
>COBOLで作られたデータだからCOBOLで代々クロスコンパイルして移植してきたと
>考えるのが妥当です。
>従って、8年前に移植した会社にコンタクトを取らないと何も分かりません。
そうですね。自分も移植性等を考えると同じ選択をすると思いますが、
製作者とはコンタクトが取れず(クラインとの意向で)真相はわかりません。
>ファイルの構成仕様書もファイルアクセスの手順(ソース)もどちらも不明では難しいですね。
そうですか。回答ありがとうございます。
>年号も今年が昭和88年で運用している可能性も有りませんか。?
ちょっとご質問の意図がわからないのですが、運用上西暦扱いで特にそのような問題はなさそうです。
No.8
- 回答日時:
>フォーマットと言うのは、やはりコンパイラによる変換方式の違いみたいなものなのでしょうか?
バイナリデータの
何バイト~何バイトが文字列
何バイト~何バイトが整数値
何バイト~何バイトが実数値
などバイナリデータの構造の事です。
他の回答者がいわれてるファイルレイアウトやデータ定義書と同じ事です。
>汎用機は経験がなく、アプリケーションもC#でwindowsアプリケーション組んだぐらいしか経験ないので、いまいちわからないんです(汗)
汎用機の経験は関係ないです。
最悪、COBOLのソースからフォーマットを調べる事になりますが
もしそれもないとなると調べるのは困難です(暗号を解くようなもんです)。
>>2.COBOLコンパイラーは何?
>これがわかりません。ネットで調べてみても情報がないのですが、
あなたの会社で開発したもしくはどこかの会社に開発を依頼した業務アプリケーションの実行ファイルがどのコンパイラでコンパイルされてるかどうかなんて情報がネットに転がってるわけないでしょ・・・
この回答への補足
>他の回答者がいわれてるファイルレイアウトやデータ定義書と同じ事です
RDBで言うところのテーブル定義書という事ですね。仕様書の類は一切存在しないようです。
>あなたの会社で開発したもしくはどこかの会社
>に開発を依頼した業務アプリケーションの実行ファイルがどのコンパイラで
>コンパイルされてるかどうかなんて情報がネットに転がってるわけないでしょ・・・
大丈夫です。そんな情報がネットに転がっていない事ぐらいわかっていますので。
コンパイラの種別を既存アプリケーションもしくは、ソースから調べる方法がないかどうか
ネットで探した結果そのような情報に行きつけていないということです。
誤解を招く記載で申し訳ありません。
No.9
- 回答日時:
おそらくEBCDICのファイルだと思いますよ。
WindowsでEBCDICを格納するDBなんか使うとは思えないし、COBOLのプログラムを移植して、コストもかかるからEBCDIC形式はそのままのプログラムにしてファイルで書き込んでるだけでしょう。でも変換ソフトだと読めるものと読めないものもありますので、一概にEBCDIC変換では読めないかもしれません。とりあえずASCII変換ソフトで試し読み。ダメならEBCDICコード表をつかって変換PGを自分で作成して見る事だと思います。
でも他の質問にもありますが、フォーマットも知らないのでは無理では?
もともとオフコンなどで動いていたのを移植したか?
No.10
- 回答日時:
お疲れ様です。
Win系で稼動中の様ですので文字コードはEBCDICはマズ有りません。
以前PC用(DOS/Win)にEBCDICが扱えるCOBOLコンパイラーを探したのですが見つけられませんでした。
よっぽどのコンパイラーで無い限り有り得ません(有ってもIBM-EBCDIC漢字のみの対応でしょう)。
今回は、COBOLでの数値表現に付いて簡単に説明します。
元々のCOBOLが実装されたのはEBCDIC系だったので
EBCDICでの表現とそれをASCIIにした場合での表現を記載します。
ASCIIと言ってもPCなどで当たり前の8bit文字コード(半角カタカナ含む)と
読み替えて考えて下さい。
ここでEBCDICにおける次の30個の文字を頭に置いてください。
"0123456789"は0xF0~0xF9で表現します。
"{ABCDEFGHI"は0xC0~0xC9で表現します。
"}JKLMNOPQR"は0xD0~0xD9で表現します。
1番目の0xF0~0xF9はサイン無し又はプラスで使用
2番目の0xC0~0xC9はプラスでサインの桁に使用
3番目の0xD0~0xD9はマイナスでサインの桁に使用
サイン付きの場合は一番下の桁にサインをつける事が一般的ですが
たまに一番上に付けるコンパイラーも有ります。
サインの種類もASCIIの場合「SIGN-ASCII」と「SIGN-EBCDIC」が有ります。
「SIGN-ASCII」の場合は"{ABCDEFGHI"や"}JKLMNOPQR"を
EBCDIC→ASCIIに変換したASCIIコードが入ります。
"{ABCDEFGHI"は0x7B,0x41~0x49。
"}JKLMNOPQR"は0x7D,0x4A~0x52。
パックド10進数(後述)などを含まない場合EBCDIC→ASCII変換で
そのままデータが移せるのでコレが多いです。
また、データをtext-dumpして見た時にEBCDICもASCIIも同じに見えるので
ホスト系(EBCDIC)から移った人などはコレが多いです。
「SIGN-EBCDIC」の場合は"{ABCDEFGHI"や"}JKLMNOPQR"を
元のEBCDICのままで0xC0~0xC9や0xD0~0xD9のコードで使います。
データをホストから移すとき変換可能文字のみ変換して
それ以外をそのままで移行した場合などコレが多いです。
レコード記述の例。
03 ATAI1 PIC 9(5). (5)は桁数
03 ATAI2 PIC S9(5). Sはサイン付き
03 ATAI3 PIC 9(5) COMP-3. 単にCOMPと書く
03 ATAI4 PIC S9(5) COMP-3. コンパイラーも有る
上記4パターン(5桁)に値が格納されたと、想定します。
1.ATAI1はサイン無しの値。5BYTEで格納
EBCDICで12345は
格納文字 1,2,3,4,5
hex-code F1,F2,F3,F4,F5
ASCIIで12345は
格納文字 1,2,3,4,5
hex-code 31,32,33,34,35
2.ATAI2はサイン付きの値。5BYTEで格納
EBCDICで+12345は
格納文字 1,2,3,4,E
hex-code F1,F2,F3,F4,C5
又は
格納文字 1,2,3,4,5
hex-code F1,F2,F3,F4,F5
ASCIIでは+12345は
格納文字 1,2,3,4,E
hex-code 31,32,33,34,45 SIGN-ASCII
格納文字 1,2,3,4,ナ
hex-code 31,32,33,34,C5 SIGN-EBCDIC
又は
格納文字 1,2,3,4,5
hex-code 31,32,33,34,35
EBCDICで-12345は
格納文字 1,2,3,4,N
hex-code F1,F2,F3,F4,D5
ASCIIでは-12345は
格納文字 1,2,3,4,N
hex-code 31,32,33,34,4E SIGN-ASCII
格納文字 1,2,3,4,ユ
hex-code 31,32,33,34,D5 SIGN-EBCDIC
3.ATAI3はサイン無しの値。3BYTEで格納(パックド10進数)
EBCDICで12345は
hex-code 12,34,F5
ASCIIでは12345は
hex-code 12,34,35
(注)6桁の場合は4BYTEに格納されます
123456だったら
hex-code 01,23,45,F6
hex-code 01,23,45,36
の様に。
4.ATAI4はサイン付きの値。3BYTEで格納(パックド10進数)
(注)パックド10進数はSIGN-EBCDICが多い
EBCDICで+12345は
hex-code 12,34,C5
又は
hex-code 12,34,F5
ASCIIでは+12345は
hex-code 12,34,45 SIGN-ASCII
hex-code 12,34,C5 SIGN-EBCDIC
又は
hex-code 12,34,35
EBCDICで-12345は
hex-code 12,34,D5
ASCIIでは-12345は
hex-code 12,34,4E SIGN-ASCII
hex-code 12,34,D5 SIGN-EBCDIC
以上、簡単に書いてみました。
参考にでもなれば幸いです。
オブザーバーの方々、突っ込みヨロシク!!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) COBOL数値転記をCOPY句内での仕様 6 2022/06/15 18:48
- HTML・CSS WEBサイトの構築。表示データとWEBデザインを分離する考え方を専門用語・業界用語では何と言うか? 8 2022/09/27 09:16
- Excel(エクセル) excelの列幅高さが勝手に変わる(特定のPCだけ) 8 2022/07/14 16:51
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- Excel(エクセル) エクセルで沢山のレコードの最後に追記するには? 7 2023/04/10 13:27
- その他(お金・保険・資産運用) 事業復活支援金 帳簿書類について 1 2022/04/10 14:15
- IT・エンジニアリング FORTRAN、COBOL、C、Java、C++とか誰が作ったのですか?言語習い使いまた出て、キリが 4 2023/05/06 23:11
- Android(アンドロイド) Googleのファミリーリンクの危険性に気付いてしまったのですが、皆さんの感想を教えてください! 2 2023/05/09 10:01
- Excel(エクセル) Excelマクロの差分抽出のコードを教えていただきたいです。 2 2023/03/14 11:40
- Excel(エクセル) Excelの数式についての質問 1 2022/10/31 15:50
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッファとは何ですか
-
ページ読み込み時に自動的にsub...
-
DXFファイル用クラスライブラリ...
-
EXCEL VBAでテキストファイルの...
-
バイナリーデータの一部データ...
-
バイナリファイルの検索について
-
Microsoft VBAで2GBを超えるフ...
-
EOF
-
バイナリエディタのつかいかた
-
【python】Excelファイルを読み...
-
入力ファイルをバイナリにする利点
-
VBA バイナリ―から文字列にす...
-
C言語でBMPファイルの内容を表...
-
エラー:ストリームの終わりを...
-
ファイル読み込みエラーになる。
-
ROM書き込みデータのファイル形...
-
C言語
-
C言語の質問です。バイナリ形...
-
ファイルをセーブする時のfopen...
-
【C#かC++】SQLServerのテーブ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッファとは何ですか
-
Microsoft VBAで2GBを超えるフ...
-
EXCEL VBAでテキストファイルの...
-
ページ読み込み時に自動的にsub...
-
エクセルVBA 2千万行のCSVファ...
-
VBA バイナリ―から文字列にす...
-
エラー:ストリームの終わりを...
-
入力ファイルをバイナリにする利点
-
バイナリエディタのつかいかた
-
MacからWinにファイルを添付す...
-
EOF
-
【python】Excelファイルを読み...
-
C言語の質問です。バイナリ形...
-
画像の保存方法。
-
テキストデータをSQLServerに取...
-
バイナリファイルの比較につい...
-
bitmap画像の保存がうまくいき...
-
なぜデータの整合性を確認する...
-
C言語とシリアル通信の送受信...
-
【Teraterm】filewritelnについて
おすすめ情報