NECのオフコン情報掲示板(ノウハウ系)
NECのオフコンを活用するためのノウハウを話し合うための掲示板です。 |
新規投稿 | スレッド表示 | ツリー表示 | 投稿順表示 | i-mode | トップ |
COBOL74とCOBOL85の違い | |
640Xi 2010-3-26 10:18:00
[返信] [編集] こんにちは。 先日、温泉好きのうさぎさんから、COBOL74とCOBOL85の 違いを、次のように教えていただきました。 「COBOL85になってからは、64KBを越えたらコンパイラが自動的に 区分化してしまうので、明示的にSECTIONで分ける必要は無い」 私は、「SKIP」キーと「ENTER」キーの使い分けが可能になっただけと 誤解して、これまで運用してきました。 今更ながら、これ以外にも魅力的な違いがあるのかが知りたいので、 ご存知の方は教えてください。 | |
Re:データ部1単位領域の大きさ | |
640Xi 2010-3-26 10:03:00
[返信] [編集] 温泉好きのうさぎさん、おはようございます。 本プログラムは、COBOL74で作成されております。 本来であれば、COBOL85へ組み替えしなければいけませんが、 私の怠慢でできておりません。 実は、温泉好きのうさぎさんのご回答の下記仕様を知りませんでした。 とても魅力的ですので、本プログラムと、他にCOBOL74で構築している プログラムをCOBOL85へ組み替えていきます。 >「COBOL85になってからは、64KBを越えたらコンパイラが自動的に区 > 分化してしまうので、明示的にSECTIONで分ける必要は無い」 有益な情報をありがとうございました。 | |
Re:データ部1単位領域の大きさ | |
640Xi 2010-3-26 9:58:00
[返信] [編集] 桃太郎さん、おはようございます。 区分化を再度見直し、細分化しましたところ、 エラーがなくなりました。 ありがとうございました。 | |
Re:データ部1単位領域の大きさ | |
温泉好きのうさぎ 2010-3-26 0:53:00
[返信] [編集] COBOLの時代なら手続き部での区分化は必要でしたが、COBOL85になってからは、64KBを越えたらコンパイラが自動的に区分化してしまうので、明示的にSECTIONで分ける必要は無いはずです。 従って、#LINKでオーバレイなど特殊なリンク方法をとらないのであれば、手続き部のSECTIONは全て取り払って、区分化をコンパイラにまかせてしまったほうが良いと思います。 | |
Re:データ部1単位領域の大きさ | |
640Xi 2010-3-25 21:31:00
[返信] [編集] 桃太郎さん、ご回答ありがとうございます。 ご指摘の通り、入力系で、ステップ数が多いものです。 区分化機能は設定していたのですが、もっと細かく区分してみます。 後程、結果を報告します。ありがとうございました。 | |
Re:データ部1単位領域の大きさ | |
桃太郎 2010-3-25 11:59:00
[返信] [編集] こんにちは、桃太郎と申します。 もしかしたら、そのプログラムは入力系とかでPROCEDUREのステップ数の 多いものではないですか? そうだとしたら、PROCEDUREの中で64Kバイトを超えている可能性が考えられます もしそうだとしたら区分化機能で回避することが出来ます。 PROCEDUREの中をSECTION文で区切るだけです、 詳しくはCOBOL85プログラミング手引書の区分化機能の項をご覧下さい。 参考になれば良いのですけど? | |
Re:COBOL85のSELECT命令について(再度質問) | |
温泉好きのうさぎ 2010-3-25 0:45:00
[返信] [編集] 回答できる保証はありませんが、差し支えなければ、もう少し詳しく具体的な内容を教えていただけませんか。 ・表定義情報・RDBQでの検索条件 ・COBOL(CBL85)のコーディング ・返ってきたエラーコードの値 ・その他... 同じ環境を構築して試してみます。 | |
Re:データ部1単位領域の大きさ | |
640Xi 2010-3-24 20:05:00
[返信] [編集] 富山さん、早速のレスありがとうございます。 私も、富山さんと同様に、01レベル1ヶのバイト数が 64Kを超えた場合は、作業領域を分割しています。 (コンパイルエラーが出てから対応していますが。。) その際のエラーメッセージは、 「F F0041 単位領域の大きさが 64K バイトを超えている」 です。 このエラーメッセージの場合は、どの作業領域がサイズオーバー かを、コンパイラが行潤・ナ教えてくれます。 しかし、今回のエラーメッセージ、 「F N0004 データ部の1単位領域の大きさが 64K バイトを超えた」 は様子が違い、どの作業領域がサイズオーバーなのか教えてくれません。 もしかしたら、確認漏れで01レベル1ヶのバイト数が64Kを超えている のかも、と、見直してみましたが、制限を超えてはいませんでした。 DATA部全体で 64K を超えるとNGなのか?とも思いましたが、 それでは、他のプログラムも余裕で制限を超えてしまいます。 同じようなエラーメッセージですが、2種類あるところから、 意味合いが違うような気もします。 勉強不足ですみませんがヒントでも構いませんので お気づきの点を教えていただければと思います。 | |
Re:データ部1単位領域の大きさ | |
富山清風 2010-3-24 19:21:00
[返信] [編集] 苦労していますね。 小生は下記の方法により対応していますが、 640Xiさんの場合の当てはまるかどうかは、わかりませんが・・・ 内容: もともと、「TBL-AREA」だったのですが「TBL-AREA-1」、「TBL-AREA-2」、・・・「TBL-AREA-6」と分けて対応しています。 01レベル1ヶのバイト数が64Kを超えないように分割しています 参考になれば幸いですが・・・ 以上
| |
データ部1単位領域の大きさ | |
640Xi 2010-3-24 18:14:00
[返信] [編集] いつもありがとうございます。 1点教えて下さい。 COBOLプログラムをコンパイルすると、 「F N0004 データ部の1単位領域の大きさが 64K バイトを超えた」というFATALエラーが発生しました。 本メッセージの通り、データ部は非常に大きいのですが、 どの項目も外すに外せない項目なので苦慮しています。 何とかコンパイルを通したいのですが、裏技などありましたら 教えて下さい。 | |
COBOL85のSELECT命令について(再度質問) | |
EXCHANGE 2010-3-18 20:01:00
[返信] [編集] * どなたかご存じないでしょうか、以前にも質問させて頂いたのですが、再度質問させて頂きます。 * 以前は出来ませんでしたが現在のAVXRDBにおいては、結合表のセカンダリテーブル上の項目での検索条件指定はRDBQ2等では可能です。動作を見ているとワークエリアへ一旦出力するするなどの中間処理を経て検索可能です。 * またAVXRDBのマニュアルなどにもセカンダリテーブルの項目を検索条件にしたSELECT命令について言及されています。 * しかし実際にはCOBOLにてSELECT命令の条件指定にてセカンダリテーブルの項目を含めるとデータ数がごく少数の時以外、実行結果が正しくなく、またFILE STATUSを定義しておくとエラーコードが返されてきます。 * RDBQ,RDBQ2で出来るのに。。という思いがどうしても残ります。 * どなたかこの件についてご存じの方はおられないでしょうか? NEC側にてバグ有りのまま放置されているのか、それとも何か可能になるような記述指定の仕方があるのか? * COBOL上でこれが可能になればデータベースの正規化がぐっとやりやすくなります。 | |
:(FDの変換について) | |
EXCHANGE 2010-3-18 19:43:00
[返信] [編集] * ほいほいさんのFD受渡の前提環境は存じませんが IBMフォーマットFD、DOSフォーマットFD間の媒体での変換は、NECが提供するユーティリティ、IOデータ社のUSB版3モードFD装置などを組み合わせてPC上で可能だと聞いています。 * 他にもシステムポート社の「仮想FDファイル変換」というシェアウエアがあります。使ったことがないので仕様内容は分かりませんが、なんでもIBMFDの内容を圧縮してメールなどで添付送信できるなどと聞いております。なにか使えるかも。。 * 600シリーズ<−−>600シリーズ間でしたら最近リリースされた#BKUPディスクバージョンを双方で使って受渡が可能でしょうね。 やったことありませんので実際の事はよくわかりませんが。。 | |
Re:#NFLNKについて | |
ほいほい 2010-3-18 9:50:00
[返信] [編集] 皆様ありがとうございました。 結論から言うと、システム構築のときにカンパニなし/セキュリティコードなしで設定がされているようです。 カンパニなし/セキュリティコードありであれば #OCFMから設定ができ#NFLNKも使用できると いう結論に自分の中で到りました。 現在は#OCFMにて登録するときにセキュリティコードがまず 飛ばされます。BKSPでカーソル戻して英字1桁+数字1桁を 入力しても入力エラーとなります。 今回ハードをリプレイスするに当たりIBMフォーマットのFDが使えなくなるため、PGでダイレクトにFD読み書きしている 場合、今回#NFLNKで対応しようと思いましたが 仕方がないのでPGでディスクに出力し#NFCNVで対応する方向で考えます。 | |
Re:RDBQ2について | |
富山清風 2010-3-18 1:06:00
[返信] [編集] ご苦労様です。 投稿番号346「RDBQでのデータデータディクショナリの分け方」 http://otd10.jbbs.livedoor.jp/286441/bbs_reply?reply=346 回答番号352「Re:RDBQでのデータデータディクショナリの分け方」 http://otd10.jbbs.livedoor.jp/286441/bbs_reply?reply=352 が参考になるものと思いますが・・・ 概要は以下のとおりです /ASSIGN EFN=EIGYOU@DDF,OEFN=SYS@DDF; /RUN RDBQ,DEV=MSD; /> ; | |
RDBQ2について | |
ぅな 2010-3-17 14:24:00
[返信] [編集] RDBQ2でDDFの定義が1000を超えている場合に数字で表の指定が出来なくなりました。 表名(漢字)で指定しても選択されません。 #DDMでは表の番号が「000」と表示されております。 表定義を1000未満になるように定義を削除すれば良いのですが、平行でプロジェクトが動いているため容易に削除ができません。 お助けくださいれば幸いです。 | |
Re:#NFLNKについて | |
温泉好きのうさぎ 2010-3-16 0:16:00
[返信] [編集] セキュリティコードが未設定ということですから、ローカルのオペレータコードからであっても #OCFM により新しくグローバルのオペレータコードを作成することができます。 グローバルのオペレータコードが未設定あるいは不明なのでしたら、新規にグローバルのオペレータコードを作成し、それで #NFLNK の設定をされてはいかがでしょうか。 #NFLNK 設定後、不要であればそのグローバルのオペレータコードを削除しておけばよいでしょう。 | |
Re:#NFLNKについて | |
ほいほい 2010-3-15 11:45:00
[返信] [編集] グローバルオペレータについて詳細な説明 ありがとうございました。 当社ではカンパニIDは設定していません。 #OCFMでオペレータを見たところ4つオペレータIDが 存在していますがすべてセキュリティコードは未設定でした。 当然Z9に設定することは出来ませんでした。 最後にもう1つ質問ですがグローバルオペレータは #OCFMでは見ることが出来ないものであり、 絶対に存在するものなのでしょうか? 単に当社の場合グローバルオペレータが未設定(ありえるのか どうか分りませんが・・・)ということも考えられます。 最終的にはSEに聞く方向しか解決策はなさそうなのは 分りました。 | |
Re:#NFLNKについて | |
EXCHANGE 2010-3-13 15:56:00
[返信] [編集] * グローバルという用語について私のほうで少し認識違いしていたようですので訂正しておきたいと思います。 説明は単純化していますので、細かい点は省かれています。 * まずカンパニIDですが、これはファイルやライブラリのグルーピングに使うものなので カンパニIDなし(=カンパニIDがスペース2桁、CID=^^)が、カンパニありの上位にあるわけではありません。 A−VXの論理ボリューム(MSDXXX)の直下には 例えば、カンパニコードAAのファイル群と、カンパニコードBBを持つファイル群と、それからカンパニコードなしのファイル群がある、といった具合です。 * それから、ファイル、ライブラリ、ライブラリのメンバはそれぞれ(英字1桁+数字1桁)からなる権限(セキュリティコード)を定義できます。(例:A3) * A−VXにおけるオペレータとはWindowsで言うところの「ユーザ」、AS/400のユーザプロフィールです。 オペレータにはそれぞれ、カンパニID、セキュリティコード、を付与できます。 * 例えば、U01というオペレータがカンパニID=CC、セキュリティコード=S3である場合を考えると、 U01は、 カンパニーコードCCのグループに属するファイルと カンパニーコードなしのグループに属するファイルが見えている状態になります(つまり、この範囲のファイルを探索できる) また、U01が探索して見つけたファイル、メンバ(実行プログラムも含む)を使用できるかどうかはS3というセキュリティコードと照合して判定されることになります。ここでは照合の規則についてはこれ以上立ち入りません。 * U01は libpath=msd , libpath=msdcc の状態です。 MSDはMSD000を含むすべての論理ボリュームです * もし、U01に付与されたカンパニIDがなし(空白)の場は、カンパニIDなしのファイルのみが探索の対象となります。 * 以上の説明の中で出てきたカンパニIDなしのファイルというのがA−VXで言うところのグローバルファイル(こちらはファイル!!)と呼んでいる物かと思います。 * グローバルオペレータというのは、また別の概念で、 カンパニIDがなし(=空白)で、かつセキュリティコードがZ9(管理権限)をもつオペレータのことです。 このオペレータはユーティリティなどを使った場合、カンパニIDを指定することによって(その都度、絶対パスを指定することによって)あらゆるファイルにアクセス出来ます。 しかしグローバルオペレータにカンパニー配下のディレクトリにたいしてライブラリパスが追加されているわけではありませんので、 (1)ユーティリティに於いては常にカンパニIDの入力が求められる(絶対パスの指定が必要) (2)RUN=^^^^(コマンドプロンプト?)においてはカンパニIDなしの領域のメンバしか起動できない。(注1) (3)カンパニIDありの領域の実行形式メンバ(=プログラム)をカンパニなしの領域へ移動してきても、プログラムの内部で使われているデータファイルの定義が相対パスなのでデータもカンパニなし領域へ移動し、プログラムでのファイル定義、またはデータベースでの表定義を変更(主にカンパニIDというパスを変更)しなければ「ファイルが見つからない」というエラーになるでしょう。 * 以上まとめですが、 グローバルファイル(カンパニIDなし)のファイルは、カンパニをまたいでのファイルの受渡などに使うケースが多いようです。 これは別々のカンパニIDをもつオペレータが起動したプログラムから共通でアクセスできる領域だからです。 個々のカンパニコードを持ってA−VXにログインしているユーザからは空白以外の別のカンパニ配下にある領域のファイルは見えませんし、絶対パスを指定してアクセスすることも出来ません。 * それからだいぶほいほいさんの質問から遠ざかってしまいましたが、#NFLNKは前述グローバルオペレータ(オペレータのほうです)でないと起動できないみたいなので、カンパニIDが空白でかつ、Z9(管理権限)をもつユーザを捜す(もしくはシステムを構築したベンダに問い合わせる)ことが必要でしょうね。 (追記) (注1)の部分は例外というか指定方法があって起動が可能かもしれません。自信がありません。だれか確実な方がおられましたらお教え下さい。 (さらに追記) カンパニと言う用語はちょっと不適切な用語かな、と思います。リコーのRICOMのOS「COMPOSS」で使っていたGID(グループID)のほうが適切な用語でしょうね。(最もこの考え方はNECからのパクリですけどね) リコーの場合は、オペレータという考え方がなく、セキュリティの考え方はありませんでした。単にPASSの設定です。メニューの定義の中にGIDが記述できて、操作員がジョブメニューから、起動したいプログラムまたは子メニューを番号で選んだ時点で呼び出し側のメニューに定義されたGID(グループID)が付与される、つまりファイルの探索範囲が付与される=PASSが設定される、というやり方でした。 従って子メニュー、孫メニューと伝っていく毎にGIDを変更することも出来ました。 その点NECのは堅い(融通がきかない)なあ。。と思います。 なお、カンパニという用語はNECも後日不適切と思ったのでしょうね。いつの間にかログイン画面では「部門コード」という名称に変わっています。 | |
Re:#NFLNKについて | |
ターラヤン 2010-3-12 0:17:00
[返信] [編集] ほいほいさん、こんにちは。 グローバルオペレータは、A−VXの管理者権限を持つユーザのことです。 WindowsやUNIXやOracleデータベースでも何でも、 管理者用のユーザーアカウントと一般ユーザ用に使うアカウント がありますよね。 アドミニストレーターとかrootとか言われているものと同じ意味です。 グローバルオペレータなら、一応A−VXのシステム設定をいろいろ 変更するなどいろいろなことができます。 一般ユーザは、いろいろと権限を制限しているので、できることとできない ことがあります。。 (もちろん設定次第では、グローバルオペレータ並みの権限を持たせる ことも可能。これは他のソフトやOSのユーザアカウントも設定次第で 管理者権限を持たせたり制限したりすることもできるので、同じですよね。) メッセージの内容から考えて、機能が制限されているアカウント(A−VXだと オペレータと言う)でA−VXに入っているのではないでしょうか。 たぶんほいほいさんのところのサーバーに入っているA−VXにも グローバルオペレータが登録されているはずです。 (無いと管理できませんから。) カンパニについても、たぶんグローバルオペレータでは、#NFLNK が使えるような状態に設定されているはずです。 (そうでないとグローバルオペレータを使ってサーバーの管理が できませんから。) したがって、まずグローバルオペレータのアカウントを探して、そのアカウント でA−VXに入って#NFLNKを動かしてみることを試みてみるのが よいのではないでしょうか。 | |
Re:#NFLNKについて | |
EXCHANGE 2010-3-11 13:14:00
[返信] [編集] * カンパニについての説明は ターラヤンTOP −−> A−VXの説明書 −−> 理論編 −−> セキュリティとOCF −−> 3.OCF機能 −−> 4.カンパニ を参考になさって下さい。 |
新規投稿 | スレッド表示 | ツリー表示 | 投稿順表示 | i-mode | トップ |
BluesBB ©Sting_Band