プロが教える店舗&オフィスのセキュリティ対策術

COBOLのUNSTRING文についての質問です。
CSVを読んで項目を分解するためにUNSTRING文を使用したんですが、
最後の項目だけ取得できないのです。
どうすれば取得できますか。教えてください。

例)
CSV
CSV-RECD
A001,B002,C003,D004

UNSTRING CSV-RECD DELIMITED BY ","
INTO WK-A WK-B WK-C WK-D.

この例の場合、
WK-A には A001
WK-B B002
WK-C C003
とちゃんとセットされるのですが、
WK-D には何もセットされずに初期値にままです。
期待するのは、D004 とセットしてほしいのです。

ちなみにCSV-RECDを以下のようにするとうまくWK-D にセットされます。
A001,B002,C003,D004,

最後尾に","をつけたら期待する結果になるのですが、
その最後尾につけるのは仕様上問題があるのです。

なにかいい方法があったら教えてください。

よろしくお願いします。

質問者からの補足コメント

  • つらい・・・

    artooさん
    プログラムには間違いないですか。
    確認方法にも間違いがあると思えません。

    こちらの環境ですが、NetExpress5.1です。

    最後尾に","を付加してなくても期待とおりでしたのですね。

    No.1の回答に寄せられた補足コメントです。 補足日時:2016/03/17 14:14

A 回答 (3件)

大昔のコボラーです。

UNSTRING命令などには疎いので、的はずれであれば、ごめんなさい。

CSV-RECDのデータって、D004の後ろに空白がありませんか?変数WK-Dが4文字分で定義されている場合、空白分が入りきらず、オーバーフロー扱いになり、WK-Dへの転記が中断された可能性はないでしょうか?
WK-Dを十分な大きさで定義すれば、いけるような気がします。

また、最終位置にカンマを付けることは仕様的に不可とのことですが、確かに、実際のデータ上にカンマを付けるのは、他のプログラムにも影響するので無理だと思います。しかし、このプログラムの内部的(変数上のみ)に付加することはできますよね?よって、事前にSTRING命令などを使って、カンマを付けることもできると思います。
    • good
    • 0
この回答へのお礼

ママチャリさん
貴重なヒントになりました。
後ろに空白が入ってたので、指定した桁数にセットできなかったのが判明しました。

なので、プログラムの内部的にカンマを付加することにしました。
それで解決しました。

ヒントをくださりありがとうございました。

お礼日時:2016/03/18 17:13

> 確認方法にも間違いがあると思えません。



コンパイラにバグがあるとも思えないので、確認方法が間違っているというケースしかあり得ないです。
プログラム全体と実行結果を書いてみてください。
    • good
    • 0

プログラムに間違いは無いです。


念のため、open cobolで実行してみましたが、期待通りの結果でした。

おそらく、確認方法に間違いがあるのだと思います。
この回答への補足あり
    • good
    • 0

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