• 締切済み

COBOLでの可変長定義について

terra5の回答

  • terra5
  • ベストアンサー率34% (574/1662)
回答No.2

>プログラマーとしての仕事範囲しか受けてないので、マシン名称はわかりません。 それは発注側の問題なのでなんとしても必要な情報をもらわないとだめでしょうね。 うちの会社で仕事を受ける場合は、その辺は必要な情報として必ず請求しますし, なければその範囲でしかできませんと確認して作業してます。 必要な情報があるかどうかもわからない状態で来ることも多いし、実際不足している場合が多いので(^^;; 少なくてもターゲットマシンのコンパイラのマニュアルは必ず要求します。 ほとんどCですが、OSや実行環境依存の物が必ずありますし、 特殊な環境(Lynx,aix,pSOS+等)の場合も多々ありますので。 だいたい、unix環境といったって、いろいろありますし。 なんとかユーザーさんからターゲット環境のマニュアルを奪い取ってください。 「ヘッダ情報はCOBOLが勝手につけるから、 コンパイラのマニュアルを見ないと対応できん!」と。

moisabc
質問者

お礼

SELECT~ASSIGN句の定義変更でなんとかヘッダー情報を外す事ができました。

関連するQ&A

  • COBOLを最近はじめたのですが

    COBOLを最近はじめたのですが データの定義のところで A PIC 9(10)S. B PIC S9(10). とあったのですがSの意味がわかりません。 左にあったり右にあったりします。 どちらも同じ意味なのでしょうか

  • COBOLの文字列検索を教えて下さい。

    cobol初心者です。 「100バイトのレコードを複数件読み込み、決まった文字列を検索する」というPGMを作ろうとしています。 03 REC-1 PIC X(100) 03 REC-2 PIC X(05) という定義があるとき REC-1 = "abcdefghijklmnopqrstu…"       というデータに対して、 REC2 = "hijkl"                    の検索をしたい場合 どのようなコーディングで調べることができるのでしょうか? 何レコード目の何バイトでヒットしたかを表示したいので、 INSPECT命令は使用せず、REC-1を1バイト単位で取り出して、 1文字ずつ判定しようと思っています。 レコードを越えてのヒットは行いません。 この場合配列を使うという考え方は正しいですか? 読み込んだ100バイトのレコードを1バイト単位で取り出して比較するには、 REDEFINEを用いて再定義すると考えています。 その場合のREADでの読み込み方がよくわかりません。 コーディング例等を載せてもらえると助かります。 cobolをはじめたばかりで、基本的な知識が抜けているかもしれません・・・ よろしくお願い致します。

  • COBOLで入力レコードフォーマットが可変の場合

    COBOLのプログラミングの質問です。 基本的な質問かもしれませんが。。。 入力となるレコードのフォーマットが可変である場合、 DATA DIVISIONをどのように定義をすれば必要な項目を得られるでしょうか? たとえば以下の場合です。  入力レコード:1024バイト  レコード内容:開始4バイトは固定。          以降は、A(10バイト)、B(20バイト)、C(30バイト)のいずれかのパターンが来る。          ※AからCの先頭1バイトのフラグでA,B,Cのどれかがわかる          Aのフォーマット            1バイト目:フラグ、2~4バイト目:レコード長、5~10バイト目:会社名          Bのフォーマット            1バイト目:フラグ、2~4バイト目:レコード長、5~10バイト目:会社名、            11~20バイト目:会社の従業員数          Cのフォーマット            1バイト目:フラグ、2~4バイト目:レコード長、5~10バイト目:会社名、            11~20バイト目:会社の従業員数、21~30バイト目:会社の売上金額      [レコードの例]      1レコード目:固定部,C,B,A,B,B・・・B,B      2レコード目:固定部,A,C,C,A,B・・・B,C      上記のレコードから、会社名や会社の売上金額を取り出すようにしたいです。  入力レコードのフォーマットが決まっていれば、その項目にそって定義すればよいと思いますが  決まっていない場合の方法がわかりません。  また、読み込んでから判断する必要があるため、どうしてよいかわかりません。  質問内容がわかりにくくてすみませんが、わかる方がいましたらよろしくおねがいします。

  • COBOL数値転記の仕様

    このたび、まったくの未経験のCOBOLをやることになりました。 で、数値データの表し方になんやかやとやたら方法があるようなのですが、それらを互いに「転記」したときに、どういう結果になるものか、皆目わからないんです(環境はCOBOL85でWindows上での開発です)。 テクニックとしては基本だと思うのですが、それでいてどこにも説明されていな~い!フリーのCOBOLツールは見つけてきましたが、使い方が???なもので…。  たとえば、  01 X1 PIC XX (数値が入ってるとします)  01 N1 PIC 99  01 D1 PIC 99 COMP  01 B1 PIC 1(16) BIT な場合、X1とN1は直接  MOVE N1 TO X1 などとやってもデータは失われないと思うんですが、他の形式での操作は(桁あふれとか無視して)ちゃんと転記できるのでしょうか。 いま特に、D1からX1へというパターンが多いです。1バイトの2進データを、数値の文字列として使おう、というんです。いわば、1バイトを3バイトに展開してやるんです。何も考えずに書けば、  01 D2 PIC 9(4) COMP VALUE 97  01 X2 PIC X(3)  MOVE D2 TO X2 でしょうけど、たぶん'a△△'になるだけのような気がします…。  それとも、  01 N2 PIC 9(4)  MOVE D2 TO N2  MOVE N2 TO X2 などとやっていけたりするのでしょうか。 いったいどうなるのでしょう、いろいろ書いちゃいましたけど、各々の転記の仕組みを教えてください。 また、COBOLの(お堅い規格を書き写しただけでない)解説のサイトなどあれば、ご紹介いただけますでしょうか。

  • COBOLから呼ばれる時

    COBOLプログラムから呼び出され、ファイルのレコードを一行読んでレコードの内容を返すというcサブルーチンを作っているのですが、COBOL←→c間でのインタフェースの扱いかたがよくわからなくて困っています。(ちなみにこのモジュールはcからも呼ばれる事がある) COBOLはコピー句(test001.cbl, test002.cbl)に値を入れて、cサブルーチンにそれを渡しています。 テストはCOBOL85を使用してるので、cサブルーチンの中のデータを見ることができません。なので、返ってくるコピー句の中身を見るのですが、とにかく値が設定されてかえってこないのです。ただ単にロジックのバグと言う可能性もあるけど(^^; 私はインタフェース環境の事がまだ良く解っていないので、今回こちらに質問した次第です。経験者の方がいましたら、どうかおしえてください。 あ、それからCOBOLから渡される値は、c側では全てchar型で受け取らなければいけないような話しを聞いたのですが、本当でしょうか? もう一つ。 コピー句の中で「F-CODE PIC X(2)」のようにハイフンがあるのですが、cではハイフンが使えないからダメなんでしょうか? たくさん質問してしまいましたが、どうかよろしく。 /COBOL側/ -------------------------------------------------- CALL 'TEST1' USING BY VALUE TEST001 TEST002. -------------------------------------------------- /cサブルーチン側/ -------------------------------------------------- int TEST1(test001, test002) char *test001; char *test002; {     ・     ・     ・ return (0); } --------------------------------------------------

  • pro*cobol ⇔ oracle のデータ型の扱い

    お世話になります。 pro*cobolで、テーブルの作業領域を定義し、 データの編集後、oracleのテーブルへ出力している のですが、cobol側の定義はpic9タイプで oracleの項目定義ではCHAR型になっております。 この状態で、cobol側のpic9タイプの項目に "A00001"等文字を含む値を設定した所、 ABENDせずにoracleテーブルに"A00001"の 項目値を出力しています。 cobolだけに限れば、属性エラーなのですが、 この場合、oracleの項目定義が優先されるのでしょうか? よろしくご教授の程、お願い申し上げます。

  • COBOLのデータ型

    こんばんわ。 現在研修をしており、COBOLの勉強をしております。 COBOLを他言語に置き換える作業を後に担当することになるようです。何の言語かは聞いておりません。勉強している中いくつかわからない点がでました。ご教授いただければと思います。 S9(6)というデータ型は符号ありの整数ということは調べました。 ファイルレコード内に上記のデータ型が存在し、出力ファイルを調べると「00000A」 という値が出力されていました。 ここでふと思ったのがAって何だ?と思いました。そもそも10進数なのか?という疑問が出て 調べるとゾーン10進数という特殊な数値のようです。 ゾーン10進数を調べても全然意味がわかりません。ゾーン部を○○とする!とかゾーン10進数の説明している記載がありますがCOBOLにはそんな記述ないし・・・ とまぁ私が知りたいのはS9(6)というデータ型をどう他言語(C言語)でどう実現しようかという内容がしりたいです。また「00000A」は実際の10進数ではどういう数値かというのも知りたいです。 以上、お手数ですがどうかよろしくお願い致します。

  • COBOLでのチェックデジット算出

    COBOL初心者です。 01 印刷領域. 03 Aコード PIC X(03). 03 Bコード PIC X(04). 03 Cコード PIC X(02). 03 チェックデジット PIC X(01). と定義した変数のA,B,Cコードだけをサブルーチンに渡して、チェックデジットを受け取りたいと思います。 このときチェックデジットを抜いた"印刷領域"を渡すことは可能でしょうか? 例) Aコード 102 Bコード 2001 Cコード 03 渡すデータ102200103 受け取るチェックデジット7 印刷領域 1022001037 という具合にしたいんですが… あと、A,B,Cコードは数字に変換しなければなりません。 すみませんがおしえてください(ToT)/~~~

  • 変数の一括代入

    VBをはじめたばかりなんですが、COBOLだと例えば、 01 DATA-AREA.   03 DATA-1     PIC 9(02).   03 DATA-2     PIC X(02).   03 DATA-3     PIC 9(02). 01 WORK-AREA.   03 WORK-DATA   PIC X(06). ..... というレコードがあるとすると   MOVE WORK-DATA  TO DATA-AREA. で、DATA-1からDATA-3まで代入できると思いますが、VBではこういうことはできるのでしょうか?

  • 何度もすみません(COBOLプログラミング)

    何度もすみません。 下記のようにプログラムを変更して実行しました。 IDENTIFICATION DIVISION. PROGRAM-ID. REI-01. ENVIRONMENT DIVISION. CONFIGURATION SECTION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT INFILE ASSIGN TO "C:\COBOL\kamokuUT.txt" ORGANIZATION LINE SEQUENTIAL. SELECT OUTFILE ASSIGN TO "C:\COBOL\UT3.csv" ORGANIZATION LINE SEQUENTIAL. DATA DIVISION. FILE SECTION. FD INFILE. 01 INREC. 02 I-NUMBER PIC 9(2). 02 I-NAME PIC X(20). 02 I-KAMOKU-SYURUI PIC 9(3). 02 I-KAMOKU-TEN PIC X(3). FD OUTFILE. 01 OUTREC. 02 O-NUMBER PIC 9(2). 02 O-COMMA PIC X(1) VALUE ",". 02 O-NAME PIC X(20). 02 O-COMMA PIC X(1) VALUE ",". 02 O-KAMOKU-SYURUI PIC 9(3). 02 O-COMMA PIC X(1) VALUE ",". 02 O-KAMOKU-TEN PIC X(3). WORKING-STORAGE SECTION. 77 W-FLAG PIC X(1). 01 W-MIDASHI. 02 W-ID PIC X(8) VALUE "社員番号". 02 W-COMMA PIC X(1) VALUE ",". 02 W-NAME PIC X(4) VALUE "名前". 02 W-COMMA PIC X(1) VALUE ",". 02 W-KAMOKU PIC X(4) VALUE "科目". 02 W-COMMA PIC X(1) VALUE ",". 02 W-TEN PIC X(4) VALUE "点数". PROCEDURE DIVISION. PERFORM MAE-SHORI THRU MAE-SHORI-EXIT PERFORM SHU-SHORI THRU SHU-SHORI-EXIT UNTIL W-FLAG = "1" PERFORM ATO-SHORI THRU ATO-SHORI-EXIT STOP RUN. MAE-SHORI. OPEN INPUT INFILE OUTPUT OUTFILE MOVE "0" TO W-FLAG READ INFILE AT END MOVE "1" TO W-FLAG END-READ. MAE-SHORI-EXIT. EXIT. SHU-SHORI. WRITE OUTREC FROM W-MIDASHI. IF I-KAMOKU-TEN >= 70 THEN MOVE I-NUMBER TO O-NUMBER MOVE I-NAME TO O-NAME MOVE I-KAMOKU-SYURUI TO O-KAMOKU-SYURUI MOVE I-KAMOKU-TEN TO O-KAMOKU-TEN WRITE OUTREC FROM INREC ELSE CONTINUE END-IF. READ INFILE AT END MOVE "1" TO W-FLAG END-READ. SHU-SHORI-EXIT. EXIT. ATO-SHORI. CLOSE INFILE OUTFILE. ATO-SHORI-EXIT. EXIT. そして、CSVファイルを開くと、 ____________ 社員番号 名前 科目 点数 社員番号 名前 科目 点数 社員番号 名前 科目 点数 ____________ としか表示されませんでした。 入力ファイルは前回のものと同様です・・・ 参考書を基に色々調べてみたのですが、解決できませんでした。。 回答いただけると幸いです。 宜しくお願い致します。