過去の桐井戸端BBS (桐ver.9)
26630 桐のデータを固定長ファイルに出力したい 脱初級! 2004/06/08-11:19
桐データを固定長のファイルに出力する方法について教えて下さい。
桐では、項目を選んでK3形式のファイルに出力し、可変長のファイルに出力するのは簡単なのですが、
固定長に出力する場合、項目によってゼロ埋めしたい場合と半角スペースを埋めたい場合があり、
うまく方法が思いつきません。

例えば、下記のような表の場合、どうやって固定長ファイルを作成すればよいでしょうか?
ご教授よろしくお願い申し上げます。

桐表:
項目名  桁数  データ型  固定長での0の扱い
コード   9桁  文字列   0埋めする
枝番    1桁  文字列   半角空白
DBコード 12桁  文字列  0埋めする
価格    9桁  文字列   0埋めする
符合    1桁  文字列   半角空白

※レコード長は、9+1+12+9+1=32byte(半角英数字)で、テキストデータで出力します。
データの例
S100100011____________000050000_
→アンダースコアの部分は半角空白の意味です。

よろしくお願い申し上げます。


26631 Re:固定長ファイルに出力したい 宮城 2004/06/08-12:04
記事番号26630へのコメント
脱初級!さん、こんにちは。

「半角空白(埋め?)ってのがこの例では1桁ずつしか登場しない
のがなんか変ですが、要は32桁のテキストなり CSVを作ればいいだけのこと。

数値なら「#文字列」で事足りますが、たぶん英数まじりということでしょうから、
任意桁数の[コード]を0埋めした9桁にする関数書いときます。

#複写("0",9-#文字数([コード]))+[コード]

[コード]がもし数値なら#文字列で変換します。半角空白埋めは"0"を" "に変えるだけ。

26633 Re:固定長ファイルに出力したい 脱初級! 2004/06/08-12:27
記事番号26631へのコメント
早速のレス、ありがとうございます。

>数値なら「#文字列」で事足りますが、たぶん英数まじりというこ
>とでしょうから、任意桁数の[コード]を0埋めした9桁にする関数
>書いときます。
>
>#複写("0",9-#文字数([コード]))+[コード]
>
>[コード]がもし数値なら#文字列で変換します。半角空白埋めは
>"0"を" "に変えるだけ。

この場合、やはり別途項目を作成して、上記の計算式を入れて文字列データを作り、出力する、という流れになりますでしょうか?

26635 Re:固定長ファイルに出力したい ONnoji 2004/06/08-12:36
記事番号26630へのコメント
脱初級!さん、こんにちは。

印字コマンドで固定長ファイルは簡単に作れますよ。

一応変数に入れるとして、

&code = #右側文字列( #複写( "0", 9 ) + #trim( [コード], 3 ),-9 )
&db = #右側文字列( #複写( "_", 12 ) + #trim( [DBコード], 3 ),-12 )
&price = #右側文字列( #複写( "0", 9 ) + #trim( [価格], 3 ),-9 )

で、印字コマンドで

印字 &code," ",&db,&price," ",_13,_10,

という感じです。

もう少し具体的には…

*-------------------*
変数宣言 文字列{&code, &db, &price }

印字開始 "○×△.txt"

表 "○×△.tbl"
ジャンプ 行番号 = 先頭
繰り返し ( .not #終端行 )

 &code = #右側文字列( #複写( "0", 9 ) + #trim([コード], 3 ),-9 )
 &db = #右側文字列( #複写( "_", 12 ) + #trim( [DBコード], 3),-12 )
 &price = #右側文字列( #複写( "0", 9 ) + #trim([価格],3 ),-9 )

 印字 &code," ",&db,&price," ",_13,_10,

 ジャンプ 行番号 = 次行

繰り返し終了

印字終了
*-------------------*

こんな感じでしょうか。

外していたらすいません。


26636 Re:固定長ファイルに出力したい うにん 2004/06/08-12:36
記事番号26633へのコメント

>この場合、やはり別途項目を作成して、上記の計算式を入れて文字列データ
>を作り、出力する、という流れになりますでしょうか?

改行なしの固定長ならどっちみち加工が必要になるので、全部印字コマンドでやってしまう手もあります。それなら項目追加はいりません。


26637 Re:固定長ファイルに出力したい 脱初級! 2004/06/08-12:54
記事番号26635へのコメント
ONnoji様、大変丁寧に解説をいただき、ありがとうございました。
大変、参考になりました。

印字コマンドでやってみます。
ありがとうございました。

戻る