アプリ版:「スタンプのみでお礼する」機能のリリースについて

8年程前に組まれた、COBOLベースのシステムからデータを抽出したくて困っています。

データの実体は、見つけておりそれがバイナリデータである事までは確認出来ています。
そのデータを変換して、データの中身を確認したいのです。

バイナリデータ⇒16進数データ(.hex)にまでは変換出来たのですが、
それ以降、どうすれば良いのかがわかりません。

別途、COBOLプログラムを組んでデータを抽出する事も考えましたが、
COBOLの知識が皆無で、それをやるのは最終手段だと考えています。

仮に上記のような要件を満たす為に他にどのような情報が必要かもよく分かりませんので、
その辺も含めて教えて頂ければと思います。

A 回答 (13件中1~10件)

フォーマットがわからないバイナリデータということでしたら、何とかそのフォーマットを調べる事が先決かと。


それがわからないことには最終手段としているCOBOLのプログラムを組んでデータを抽出するということもできませんよ。

この回答への補足

フォーマットと言うのは、やはりコンパイラによる変換方式の違いみたいなものなのでしょうか?

汎用機は経験がなく、アプリケーションもC#でwindowsアプリケーション組んだぐらいしか経験ないので、いまいちわからないんです(汗)

補足日時:2013/03/10 12:03
    • good
    • 0

そのデータを入出力しているプログラムのロジックをみて


データ定義に、そのフォーマット形式が記述されていると思います。
COPY句で、別ファイルになってるかもしれません。

もし詳細設計書などにデータ定義書のようなものがなければ、
COBOL自体を解析するしかないでしょう。
COBOLの構文はそんなに難しいものではないですよ。

どうしてもご自身で分からなければ、分かる人間に頼むしかないでしょう。

この回答への補足

COPYディレクトリが確かにあります。
ソースを見てみたのですが、データ構造みたいなのとかが書いてあるのはわかるんですが、
その何処を見れば、

>データ定義に、そのフォーマット形式が記述されていると思います。

これがわかりますか?また、フォーマットが分かった場合それ以降どういった手順を踏めばよいでしょうか?

補足日時:2013/03/10 12:01
    • good
    • 0

まずは、↓辺りを明確にされた方が良いでしょう。



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 …

上記のソフトを使用しました。

補足日時:2013/03/10 11:55
    • good
    • 0

お疲れ様です。


COBOLですか・・・
自分の知ってる範囲でも現役で動いてますね。

COBOLではバイナリ・データに当たるのはパックドデシマルですが
コンパイラーによっては純粋なバイナリを扱える物も有ります。

COBOLを使わない方向で言うと
次の点を確認し補足してください。

1.動作環境は?
  ホスト系/オフコン系/UNIX系/Windows系/その他
2.COBOLコンパイラーは何?
  文字コードやシフトイン/シフトアウトの扱いが変わります。
  例えば同じEBCDICでもNEC,富士通,IBMで拡張文字のマッピングが異なる
  数値データのサインの扱いも変わります。
  インデック/リラティブ・ファイルの構造が違います。
  レコードの削除方法も違います(削除フラグなど)
3.ファイル(レコード)定義書の有り/無し?
  公開して頂ければ変換方法などの参考にできます。


稼動中のCOBOLコンパイル環境が有れば
COBOLの出来る人を頼んでファイルを
変換してもらった法が一番良いと思います。
データDUMPを解析するより間違いが有りません。

この回答への補足

ご質問頂いた内容を分かる範囲で補足します。

>1.動作環境は?
Windows 系です。現在は、XPで動作しています。

>2.COBOLコンパイラーは何?
これがわかりません。ネットで調べてみても情報がないのですが、
コンパイル済み。もしくは、システム内の『source』ディレクトリのファイルを参照して
わかるもんなのでしょうか?

>3.ファイル(レコード)定義書の有り/無し?
無いです。とにかく仕様書と呼べるものはまったくありません。
システムの『copy』ディレクトリにそれらしいファイルはあるのですが・・。

補足日時:2013/03/10 11:45
    • good
    • 0

COBOLかどうかはあまり関係なくて、そのファイルのレイアウトドキュメントが必要です。


無いと無理です。あれば簡単です。

この回答への補足

そうですか。回答ありがとうございます。

補足日時:2013/03/10 20:58
    • good
    • 0

#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 バイト数
といった感じですかね?読み方は調べれば分かることなので、少し調べて解析してみようと
思います。


確認に時間を取ってしまい、補足が遅くなり申し訳御座いません。

補足日時:2013/03/11 16:37
    • good
    • 0

 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年で運用している可能性も有りませんか。?

ちょっとご質問の意図がわからないのですが、運用上西暦扱いで特にそのような問題はなさそうです。

補足日時:2013/03/10 21:13
    • good
    • 0

>フォーマットと言うのは、やはりコンパイラによる変換方式の違いみたいなものなのでしょうか?



バイナリデータの
何バイト~何バイトが文字列
何バイト~何バイトが整数値
何バイト~何バイトが実数値
などバイナリデータの構造の事です。
他の回答者がいわれてるファイルレイアウトやデータ定義書と同じ事です。

>汎用機は経験がなく、アプリケーションもC#でwindowsアプリケーション組んだぐらいしか経験ないので、いまいちわからないんです(汗)

汎用機の経験は関係ないです。
最悪、COBOLのソースからフォーマットを調べる事になりますが
もしそれもないとなると調べるのは困難です(暗号を解くようなもんです)。

>>2.COBOLコンパイラーは何?
>これがわかりません。ネットで調べてみても情報がないのですが、

あなたの会社で開発したもしくはどこかの会社に開発を依頼した業務アプリケーションの実行ファイルがどのコンパイラでコンパイルされてるかどうかなんて情報がネットに転がってるわけないでしょ・・・

この回答への補足

>他の回答者がいわれてるファイルレイアウトやデータ定義書と同じ事です

RDBで言うところのテーブル定義書という事ですね。仕様書の類は一切存在しないようです。


>あなたの会社で開発したもしくはどこかの会社
>に開発を依頼した業務アプリケーションの実行ファイルがどのコンパイラで
>コンパイルされてるかどうかなんて情報がネットに転がってるわけないでしょ・・・

大丈夫です。そんな情報がネットに転がっていない事ぐらいわかっていますので。
コンパイラの種別を既存アプリケーションもしくは、ソースから調べる方法がないかどうか
ネットで探した結果そのような情報に行きつけていないということです。
誤解を招く記載で申し訳ありません。

補足日時:2013/03/10 21:06
    • good
    • 0

おそらくEBCDICのファイルだと思いますよ。

WindowsでEBCDICを格納するDBなんか使うとは思えないし、COBOLのプログラムを移植して、コストもかかるからEBCDIC形式はそのままのプログラムにしてファイルで書き込んでるだけでしょう。
でも変換ソフトだと読めるものと読めないものもありますので、一概にEBCDIC変換では読めないかもしれません。とりあえずASCII変換ソフトで試し読み。ダメならEBCDICコード表をつかって変換PGを自分で作成して見る事だと思います。
でも他の質問にもありますが、フォーマットも知らないのでは無理では?
もともとオフコンなどで動いていたのを移植したか?
    • good
    • 0

お疲れ様です。


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

以上、簡単に書いてみました。
参考にでもなれば幸いです。
オブザーバーの方々、突っ込みヨロシク!!
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!