- ベストアンサー
COBOLを記述する際の注意点は?
- COBOLを学習中のプログラマーが、Tabや全角空白の使用に関して悩んでいます。半角空白以外の空白文字が使用できるのか疑問です。
- COBOLの記述時には半角空白以外の空白文字は使用できないとされています。先輩技術者の指摘は正しいです。
- COBOLのプログラム中には、半角空白以外の空白文字は使用できません。先輩技術者のアドバイスに従うべきです。
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
>なぜいけないのでしょうか? 単純にそれだとエラーが出るからでしょう。 仮に今使っている環境でエラーが出なくても、 古いコンパイラでコンパイルする(流用する)場合に、 動かなくなる可能性もあり、其の場合に原因を突き止めるのが ものすごく大変になります。 > どうもわずらわしくて困っております。 1.エディタの設定で全角空白、タブを表示するようにする。 2.保存するときに置換でタブをスペースn個に置き換える。 まあ其のあたりは自己責任で。 #たいがいのコンパイラは全角空白でエラーだすと思う。
その他の回答 (8)
- ultraCS
- ベストアンサー率44% (3956/8947)
元々、CODASYLの決めた言語仕様で禁止されている。 といってしまえばそれまででしょうね、言語記述に使って良い文字集合として許容されていませんから(リテラルは別)。トークンの区切りは、半角空白と一部の文字(半角ピリオドなど)だけです。 COBOLには旧いアーキテクチャを引きずっている部分が多々あります。言語記述欄が決められていることもその一つだし、TABが記述文字として許されていないこともその一つです。TABでインデントすると、72桁しか使えない一行をすぐにはみ出してしまいますから。 まあ、最近は、TABくらいは許容する処理系も出ていると思います。 下にも指摘がありますが、汎用機の端末(IBMの3270やFACOMの6680など)では、そもそも、TABの入力が出来ないです、TABキーは画面上のHTの位置にカーソルを移動するだけですね。 不思議なのは、プログラム入力時にはAlpha-nemeric大文字状態ですよね、それで、全角空白を入力するより、半角空白のほうが簡単だと思うのですが
- 530529
- ベストアンサー率16% (86/521)
10年くらい前までは、windowsのコンパイラでも全角の空白が有るとコンパイルのエラーが出て探すのが大変でした。
- bardfish
- ベストアンサー率28% (5029/17766)
COBOLのコーディング用紙を見たことありませんか? COBOLはカラム位置に意味があります。 ※更に言うと、COBOLは1行半角80文字という制約もあります。 7カラム目に*を記述するとコメントとか、@で継続行とか。 74カラム目から80カラムは注釈とか。 そもそもCOBOLが使用され始めた頃の開発言語ではTOKENの区切りにスペース以外の文字を使用することは御法度でした。TABキーを押してもスペース8個しかは入らないエディタばかりでしたし。 使用するコンピュータが何か分かりませんが、汎用機だとエディタでTAB入力ができない(カラムを移動するだけのキー)モノもあります。 最低でも自分が使用する言語やコンピュータのマニュアルを読みましょう。 Windowsでの常識が通用しないコンピュータは沢山あります。 自分の常識が全てだという怠慢なことはせず勉強に励みましょう:-) 思いこみはバグ・失敗の元。もっと本質的なところを勉強してください。
- chukenkenkou
- ベストアンサー率43% (833/1926)
COBOLは、1~6桁目にシースケンス番号、7桁目でコメントや継続等の指定、8~72桁目にソースコード、73~80桁目にシーケンス番号やコメントを書くことが規則になっています。 これは、メインフレームでは、80文字を1行として扱うことが基本になっていたことと関連するのでしょう。 >PROCEDURE (Tab) DIVISION. >PROGRAM.ID(Tab)PRO111. >などと記述してはいけないのでしょうか? >また仮にその場合、なぜいけないのか、よろしければお答えいただけないでしょうか? これは、各コンパイラの仕様についての質問であり、COBOL一般ついての質問になっていません。 例えば、「IDENTIFICATION DIVISION」を「ID」といった省略形で書けるコンパイラも存在します。 これらは、COBOL自体ではなく、コンパイラの仕様に依存した話になります。
- don_go
- ベストアンサー率31% (336/1059)
>自分の中で納得できない気持ちがありまして 納得できないのであれば、本番環境でやってみれば、なぜ そうする必要があるか身に浸みて判るとおもいますが...
- bardfish
- ベストアンサー率28% (5029/17766)
COBOLとはそういうモノです。 全角スペースが使えるのはNタイプの変数だけです。 例) DATA DIVISION. 02 STRING1 PIC N(2) VALUE "□□". PROCEDURE DIVISION. MAIN. MOVE "□□" TO STRING1. ※COBOLを使わなくなって10年以上経つので細部は間違っているかも… Nタイプというのは方言かもしれませんが:-)
お礼
bardfishさん、tiitii1965さん、Qoo1985さん、早い回答どうもありがとうございます。そしてお礼が大変遅れてしまい、失礼いたしました。 bardfishさんの回答を拝見させていただきましたところ、自分の言葉足らずのせいか、質問内容がよく伝わっていなかったように思えるので、確認させていただけないでしょうか?お手数をおかけします。 変数に格納するときに空白を入れたいのではなくて、プログラムを整形するときにTabを使用したいのですが。 すなわち、 PROCEDURE (Tab) DIVISION. PROGRAM.ID(Tab)PRO111. などと記述してはいけないのでしょうか? また仮にその場合、なぜいけないのか、よろしければお答えいただけないでしょうか? それから、皆さんはどのようにプログラムを整形していらっしゃるのでしょうか?参考にしたいので、ぜひお聞かせください。ちなみに、エディタは秀丸です。 tiitii1965さんのおっしゃるとおり、先輩を疑うのはよくないとは思うのですが、理由を説明してくれないので、自分の中で納得できない気持ちがありまして、ここでおききしてしまいました。これからは気をつけます。
>本当に半角空白以外の空白文字を使用してはいけないのでしょうか? 機械を動かすための「規則」なので、先輩を疑ってもしょうがないです…
- Qoo1985
- ベストアンサー率22% (131/570)
マシンによります。 って言うか、おそらく全角のスペースを入れるとコンパイルエラーが でますね。 出なくても、ワーニングが出てまともに動きません。 ご自分で試されるのが一番だと思います。 本番環境でやったら殺されますのでご注意ください(笑) って言うか、エラーがでたらわかりにくいんですよね… 止めていただきたいです。
お礼
返事が遅れてしまい、失礼いたしました。 回答して下さったみなさま、どうもありがとうございました。 khazad-leftyさんのおっしゃるとおり、置換を利用することで対処していくことにしました」。Tabが単純な移動の機能しか果たさないこともあることなどは、留意しておきます。 まだ、実際に仕事をする環境についてよく知らなかったものでして、今回のような稚拙な質問をしてしまったことをお許しください。これからは、もう少しマニュアルなどに眼を通していくように、気をつけていきたいと思っております。 本当にありがとうございました。