COBOLの文法でたぶんシフトコードの一種だと思うのですが、
Nタイプの項目に付く'29'や'38'といった数字には
どういう意味があるのでしょうか?
'28''29'の組み合わせは解るのですが・・・。
よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

COBOL の文法というよりも、使っている計算機(多分、大型汎用機ですよね)の


漢字コードの扱いで決ります。COBOL に限らず、Fortran で漢字を扱うときも
意識することがあります。

'28'~'29'で括った範囲が漢字コード扱いになります。OS 次第ですが、IBM漢字
コードや JEF漢字コードなど。

こっちのほうはうろ覚えなんですが、'38'~'39'で括った範囲も漢字コード扱い
です。そのままページプリンターに印字すると、(28の場合と比べて)文字のポイ
ント数が違って印字された記憶があります。

# きっと、ちゃんとした区別(意味)があるんでしょうけど。
    • good
    • 0

N項目に関しては汎用機、オフコンともに前の方の回答どおり漢字コードが前後につきます。

ただ、メーカーや機種やバージョンによりコード体系が違います。また、プログラム作成上でとしてそれを意識しなくてはならない汎用機も有ります。帳票などは機種によっては帳票レコードで漢字コードを定義しなければいけない場合もありますので、お使いの機種のマニュアルを参照してみることが必要になる場合もあると思います。
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QCOBOL85からCOBOL2002移行

HPのOSバージョンアップして、COBOL85からCOBOL2002移行の作業をしました。再コンパイルして、生成されたモジュール(又はオブジェクトファイル.o)のサイズは元の2、3倍になってしまいましたが、どういうことですか?ご教示お願いします。

Aベストアンサー

>なぜバイナリ構造が変更したら、実行モジュール大きくなるのは
>少し、詳しく教えていただけませんか。
ちゃんと書くと長いので掻い摘んで描くと
RISCではコンパイル時点で命令を細かく分け、実行時に並列計算できるもの探して実行していましたが、
Itaniumで採用したEPICではコンパイル時点で並列部分を抽出し実行モジュールに並列情報を持たせています。
アーキテクチャが変わると実行モジュールの構成(サイズ)が変わるのは仕方がないことです。

QCOBOL97,Power-COBOLでの効率の良い書き方

汎用機のCOBOLでは添字にはCOMP-1を使うと効率が良いとか、ベースレジスタ削減のために 01レベルのワーク領域の数を減らす(少数の01レベルの配下にワーク領域を定義する)などがマニュアルに記載されていました。
ところがパソコン/サーバ上で動くCOBOLの場合は、計算用にCOMP-3を使うと処理効率が悪い、計算用ではCOMP-3よりはDISPLAY項目、さらに良いのはCOMP-5である、などと言う記事もあり汎用機COBOLとはずいぶん違うようです。実際のところ、パソコン/サーバ上で動くCOBOLで実行時の効率が良いプログラムを書くためには、どのような事に注意すれば良いのでしょうか?

Aベストアンサー

以下が参考になるのでは?

http://q.hatena.ne.jp/1171405263

>>実際のところ、パソコン/サーバ上で動くCOBOLで実行時の効率が良いプログラムを書くためには、どのような事に注意すれば良いのでしょうか?

昔は、汎用機やオフコン、パソコンでCOBOLのアプリを書いていました。ハードレベルのことは、よくわかりませんが、記載されていたとおりだという気がしますね。でも、メモリーや処理効率が悪とはいっても、人間のレベルからしたら、気にしないでもいい程度だと思いますよ。

個人的には、メモリ効率等よりも汎用機・オフコンなどとソースの共用ができるほうが良いと思うので、汎用機に合わせたいところですが、汎用機で使う予定が無いならパソコン・サーバ上でベストな指定でもいいかもしれませんね。

そして、数値計算(特にお金の計算)では、10進で行われるCOMP-3が計算誤差やデバッグの容易さで有利だと思えます。

Qオフコン(富士通Kシリーズ)COBOLと汎用機COBOLの違い

 私、富士通オフコン(KやPRIMERGY6000)でのシステム開発を10年以上やっています。当然COBOL言語での開発です。オフコン市場が縮小傾向(AS400は別のようですが)にあるなか、汎用機の開発やリプレースは盛んに行われていると認識しています。

 私の勘ではデータベースのREAD/WRITEのあたりや画面プログラムの表示のさせ方などが違うのでは、と思うのですが、実際に富士通オフコンのCOBOL-Gと汎用機(富士通でもIBMでもなんでも構いません)COBOLを経験された方に、その相違点をお聞きしたく存じます。

 宜しくお願いします。

Aベストアンサー

COBOLというより、DBMSやDCモニタ(富士通ならAIM,IBMならCICSやIMS等)による違いですね。
DBについてはSQLをサポートするRDBMSなら、アプリケーションのコーディングレベルは大きな違いは無いでしょうけど、階層型やネットワーク型DBだとそれぞれ独自の特色があるので使うDBMSによって大きく異なるでしょう。
画面は最近はメインフレームでもWWWを使ったりもするようですが、そうでもない限り、これもDCモニタによってやり方は全然違います。
従って、メインフレームの勉強をしたいのなら、まずターゲットとするDB/DCを決めないといけません。

QCOBOL、項目末尾に空白がある場合削除の方法その他

汎用でCOBOL85で開発しています。

入力Fは固定長、
出力Fは可変長のCSV形式ファイルです。

質問なのは、
値と値の間にカンマを入れる(値がなくても必ず固定数入れる)にはどうすればいいか。
項目の末尾に半角空白が入っていた場合削除するにはどうすればよいか。
項目ごとにMOVE文を書くのではなく、LOOPさせるようにする(項目が多いので)

の書き方です。
半角空白は確か、項目の後ろから1バイトずつ数えて値があった時点で編集するというような
プログラムを見た記憶があるのですが、詳しい書き方がわかりません。
どなたか少しでもお分かりになりましたら教えてもらえないでしょうか。

Aベストアンサー

コンパイル結果のリストで、コンパイラオプションの「STANDARD=(-A)」を確認してください。「-A」が、「アドレス操作を抑止しない」という意味です。

入力ファイルの項目数が四個の場合で、例題を作ってみました。

【コーディング例】デバッグ用のDISPLAY文が入っています。
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE1.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT IN-FILE ASSIGN INFILE.
SELECT OUT-FILE ASSIGN OUTFILE.
DATA DIVISION.
FILE SECTION.
FD IN-FILE LABEL RECORD STANDARD.
01 IN-REC.
03 ITEM1 PIC X(10).
03 ITEM2 PIC X(1).
03 ITEM3 PIC X(5).
03 ITEM4 PIC X(15).
03 FILLER PIC X(41).
03 FILLER PIC X(8).
FD OUT-FILE LABEL RECORD STANDARD
RECORDING MODE V
RECORD VARYING
DEPENDING REC-LEN
BLOCK 10 RECORDS.
01 OUT-REC.
03 FILLER PIC X(500).
WORKING-STORAGE SECTION.
77 I PIC S9(4) COMP.
01 FILLER.
03 REC-LEN PIC S9(4) COMP.
03 DATA-LEN PIC S9(4) COMP.
03 DATA-POS PIC S9(4) COMP.
01 DATA-AREA ADDRESSED BY DATA-PTR.
03 FILLER PIC X
OCCURS 1 TO 500
DEPENDING DATA-LEN.
PROCEDURE DIVISION.
HAJIME.
OPEN INPUT IN-FILE.
OPEN OUTPUT OUT-FILE.
YOMIKOMI.
READ IN-FILE
AT END GO TO OWARI.
MOVE 500 TO REC-LEN.
MOVE 1 TO DATA-POS.
*
COMPUTE DATA-PTR = FUNCTION ADDR(ITEM1).
COMPUTE DATA-LEN = FUNCTION LENGTH(ITEM1).
PERFORM DATA-EXTRACT.
*
COMPUTE DATA-PTR = FUNCTION ADDR(ITEM2).
COMPUTE DATA-LEN = FUNCTION LENGTH(ITEM2).
PERFORM DATA-EXTRACT.
*
COMPUTE DATA-PTR = FUNCTION ADDR(ITEM3).
COMPUTE DATA-LEN = FUNCTION LENGTH(ITEM3).
PERFORM DATA-EXTRACT.
*
COMPUTE DATA-PTR = FUNCTION ADDR(ITEM4).
COMPUTE DATA-LEN = FUNCTION LENGTH(ITEM4).
PERFORM DATA-EXTRACT.
*
COMPUTE REC-LEN = DATA-POS - 2.
DISPLAY 'REC-LEN=' REC-LEN.
DISPLAY 'OUT-REC=(' OUT-REC(1:REC-LEN) ')'.
WRITE OUT-REC.
GO TO YOMIKOMI.
OWARI.
CLOSE IN-FILE OUT-FILE.
GOBACK.
DATA-EXTRACT.
DISPLAY 'EXTRACT STA'.
DISPLAY 'REC-LEN =' REC-LEN.
DISPLAY 'DATA-LEN=' DATA-LEN.
DISPLAY 'DATA-POS=' DATA-POS.
DISPLAY 'DATA-AREA=(' DATA-AREA ')'.
IF DATA-AREA NOT = ' '
PERFORM TEST BEFORE
VARYING I
FROM DATA-LEN BY -1
UNTIL (I < 1) OR (DATA-AREA(I:1) NOT = ' ')
CONTINUE
END-PERFORM
MOVE I TO DATA-LEN
STRING DATA-AREA ','
DELIMITED SIZE
INTO OUT-REC
WITH POINTER DATA-POS
END-STRING
ELSE
STRING ','
DELIMITED SIZE
INTO OUT-REC
WITH POINTER DATA-POS
END-STRING
END-IF.
DISPLAY 'EXTRACT END'.
DISPLAY 'REC-LEN =' REC-LEN.
DISPLAY 'DATA-LEN=' DATA-LEN.
DISPLAY 'DATA-POS=' DATA-POS.

コンパイル結果のリストで、コンパイラオプションの「STANDARD=(-A)」を確認してください。「-A」が、「アドレス操作を抑止しない」という意味です。

入力ファイルの項目数が四個の場合で、例題を作ってみました。

【コーディング例】デバッグ用のDISPLAY文が入っています。
IDENTIFICATION DIVISION.
PROGRAM-ID. SAMPLE1.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION. ...続きを読む

QAccessVBAで実行時エラー'429'が出ます

ACCESS2000,WindouwsME
ACCESSから既存のEXCELブックを呼び出そうとしていますが、
  
       略
EXCEL名 = S2 & "XXX.xls"
Set xls = GetObject(EXCEL名, "Excel.Sheet")
       略

の、2行目で以下のエラーが出てしまい困っています。

実行時エラー'429'
ActiveXコンポーネントはオブジェクトを作成できません。

動かすパソコンの環境で、出る時と出ない時があるようです。
VBEのツールメニューから参照設定を確認しているつもりですが、
ここの理解も含めて原因が良くつかめません。
解決策をコメントできる方がおられましたらお願いいたします。

Aベストアンサー

参考になるようなURLを見つけました。
http://moug.excite.co.jp/skillup/opm/opm05-05.htm
「すでにWordが起動しているときにはそのまま処理を続行しますが、未起動のときには番号429のエラーが発生します。」
ただし自作テストで
Sub test01()
Dim x As Object
Set x = GetObject("c:\My Documents\aa1.xls")
x.Activate
With activeworkbook
MsgBox x.worksheets("sheet1").range("a1").Value
End With
Set x = Nothing
End Subでテストすると、その時エクセルを起動していないがうまく行きました。
ただAccessのモジュールの画面でツール-参照設定-MicrosoftExcel9.0ObjectLibraryにチェックを入れて
いますが。


人気Q&Aランキング

おすすめ情報