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

COBOL初心者です。
プログラミング自体初めて1か月です。

いかんせん本当に初心者なので
どう質問したらイイのか分からないんですがヨロシクです。

実行したらなんか固まってしまう?んです。
記述がおかしいんでしょうけど、何がおかしいのか分からなくて…
どう書けばイイのか分からないのでソースをそのまま貼り付けます。




IDENTIFICATION DIVISION.
PROGRAM-ID. 000.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT IN-FILE ASSIGN TO "x.txt".
DATA DIVISION.
FILE SECTION.
FD IN-FILE.
01 IN-REC.
03 X PIC X(10).
WORKING STORAGE SECTION.
01 WORK.
03 WK-X PIC X(10).
01 END-FLAG PIC 9 VALUE 0.
PROCEDURE DIVISION.
MAIN-SEC SECTION.
MAIN-010.
OPEN INPUT IN-FILE.
PERFORM UNTIL END-FLAG = 1
READ IN-FILE
AT END
MOVE 1 TO END-FLAG
NOT AT END
MOVE X TO WK-X
DISPLAY WK-X
END-PERFORM.
CLOSE IN-FILE.
STOP RUN.
MAIN-SEC-END.
EXIT.


なんしか、"x.txt"を読み込みたいんです。
勉強中なのでとりあえず読み込みたいデータはちっちゃくしました。

うーんどう伝えたらイイんでしょう~
よろしくお願いします。

A 回答 (4件)

COBOLでは、OSのファイルシステムによる格納・検索効率などを意識して、{固定長|可変長}レコードで{非ブロック形式|ブロック形式 }などといった宣言を、COBOLソース中で行ったりします。

メインフレームなどでは、こういった指定の一部分を、COBOLソース中でなく、JCLで指定できるような拡張仕様を持っていたりします。
また、それを実現するためのOSのファイルシステムもDAM、ISAMといった場合もあれば、より高機能なVSAMであったりします。

さらに、そういったものをアプリ側で意識させないようにしたものが、DBMSであり、階層型、ネットワーク型、リレーショナル型などが次々と実装されてきました。

OpenCOBOLで「INPUT-OUTPUT SECTION」や「FILE SECTION」のFD句などでファイル編成やレコード形式などの細かなオプションを何も指定しなかった場合、どのように扱われるかは細かくは確認していませんが、レコードの先頭の4バイト(?)がデータとして扱われないなら、その部分がブロック長やレコード長などとして認識されているのでしょう。
恐らく、固定長非ブロック形式といった宣言をCOBOL側で行えば、先頭からデータとして扱ってくれると思います。

それ以外に、端末へのLINE入出力、テキストファイルの入出力などの指定として、
「 ORGANIZATION LINE SEQUENTIAL」といった指定があります。

SELECT IN-FILE ASSIGN TO "x.txt".



SELECT IN-FILE ASSIGN TO "x.txt"
ORGANIZATION LINE SEQUENTIAL.

としてみてください。

この回答への補足

なんだか知らない言語まで出てきちゃいました(汗

なんだかCOBOLでテキストファイルを使うのはめんどうみたいですねぇ…
固定長非ブロック形式ってゆうのはソース内で指定する仕方gあるんですかねぇ?

あと、ORGANIZATION LINE SEQUENTIAL.
コンパイルエラーになっちゃいました(*_*)
:syntax error, unexpected ORGANIZATION, expecting $end

読み込み悪くてすみません。
少しずつ勉強シテイキマス(汗

補足日時:2010/05/10 14:39
    • good
    • 0
この回答へのお礼

ありがとうございます。
とても難しい~
この先もっと勉強できるのか不安になってきました(*_*)
月曜日会社のPCで実行してみます!!

お礼日時:2010/05/09 03:57

#2です。


つまり、テキスト形式は改行位置が自由ですので、1行の桁数が可変ですよね。これは可変長レコードと言います。
可変長の場合は先頭の2バイト(半角文字4文字分)はレコード長格納エリアとしてデータ部分ではないと認識しているのだと思います。
ですから「△△△△ABCDEF」にすると実行したときに「ABCDEF」って読み込みまれるのだと思います。

この回答への補足

あぁ、お恥ずかしい…
#2 ってゆうのはお名前のことを言ってくれてはったんですね;

可変長レコード=ネットなどで調べてみてなんとなう分かってきました!
テキスト形式は改行位置が自由  だからしょうがない  
って考えないといけないんですかね?

今は勉強のみだからこのままでイイのかな?

補足日時:2010/05/10 14:27
    • good
    • 0
この回答へのお礼

#2 = 可変長レコード ってことですかねぇ?

なんかせっかく教えていただいてもうまく飲み込めない自分が悔しいです(*_*)

お返事ありがとうございます。
もっと勉強しなきゃですねぇー

お礼日時:2010/05/09 04:00

私は大元のCOBOL(メインフレーム用)しか知りませんが、FILE SECTIONで、FDと定義しているのですから入力は固定長ファ

イルなんじゃないですか?なのにテキストファイルをそのまま読み込むのは間違いだと思いますが・・・

この回答への補足

固定長ファイル…?

なんかこのコンパイル?
改行も文字数として処理するのかな?
っとか感覚的に思ってるんですけど、、、
x.txtの方の中身を 「△△△△ABCDEF」にすると
実行したときに「ABCDEF」って読み込みましたーー

関係ないこと言ってたらゴメンナサイ

補足日時:2010/05/07 17:41
    • good
    • 0

> 実行したらなんか固まってしまう?んです。



何COBOL?
コンパイラが動かない?それとも実行ファイルが動かない?

この回答への補足

オープンCOBOLです

今ファイル名を「read.cob」から「read1.cob」 にしてみました。
そしたらコンパイルも実行も出来ました☆

e.txtに入ってる情報が「ABCDEF」なんですけど、
なぜか「 EFD」ってDISPLY されます
なんででしょう~?

早速お返事ありがとうございます。

補足日時:2010/05/07 16:32
    • good
    • 0

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