過去の桐井戸端BBS (桐ver.9)
23945 固定長のデータを作るためデータが入っていない所にスペースを入れて桁を揃えたい おぎの 2003/12/18-11:36
こんにちは。
桁の揃え方について、教えて下さい。

桐で固定長のデータを作るために、桁を揃えています。
データが入っている所と入っていない所で桁を揃えるため、入っていない所にはスペースを入れています。
今は、先にデータのない所だけを絞り込んで、スペースを入れて、
その後データの入った所に(データの前に)スペースを入れて希望の桁(3桁または4桁)にしています。

データの入った状態で希望の桁にする式は、こちらの掲示板で見つけたのですが、
入っていない所にスペースを入れるやり方が見つかりませんでした。
 #条件選択(#桁数([項目A])=0," ")
とやってみたところ、データの入っていない所にはスペースが(半角3つ)入りましたが、
すでに入っていたデータが消えてしまいました。

データの桁を揃えるこの式
 #右側文字列(#文字列([項目A]),3)
と、データの入っていない所にスペースを入れる式とを
一つにまとめた(一度に出来る)式を教えて下さい。

よろしくお願いします。
23946 Re:データが入っていない所にスペースを入れたい 幅田 2003/12/18-11:52
記事番号23945へのコメント
おぎのさん
こんにちは。

>データの桁を揃えるこの式
> #右側文字列(#文字列([項目A]),3)
>と、データの入っていない所にスペースを入れる式とを
>一つにまとめた(一度に出来る)式を教えて下さい。


あらかじめ、[項目A]の頭にスペース3つをくっつけておいてから、
#右側文字列で右側から3つ取り出せばいいのではないでしょうか?


#右側文字列(#複写(" " ,3 )+[項目A],3)
23948 Re:データが入っていない所にスペースを入れたい うにん 2003/12/18-11:54
記事番号23945へのコメント

> #条件選択(#桁数([項目A])=0," ")
>とやってみたところ、データの入っていない所にはスペースが(半角3つ)入りま
>したが、すでに入っていたデータが消えてしまいました。

置換でなくて書き出し用に別の計算項目を作った方がいいですね。

#右側文字列(#未定義値変換([項目A]," "),-3)

23949 Re:データが入っていない所にスペースを入れたい おぎの 2003/12/18-13:12
記事番号23948へのコメント
うにんさん、いつもありがとうございます。

>置換でなくて書き出し用に別の計算項目を作った方がいいですね。
>
>#右側文字列(#未定義値変換([項目A]," "),-3)

そうですね、その方がいいかもしれません。
ただ、項目数が20〜30と多いため、見た目がごちゃごちゃしてしまうかな、という懸念があります。

23950 Re:データが入っていない所にスペースを入れたい Mao 2003/12/18-17:50
記事番号23949へのコメント
自分の勉強のために確認です。

#条件選択([]="" ," " , [] .not "" ,#右側文字列([],3))

って書いては、ダメなんですか?
はずしてたらごめんなさい。
23952 Re:データが入っていない所にスペースを入れたい MIT 2003/12/18-19:28
記事番号23945へのコメント
おぎのさん

こんな場合はうにんさんのおっしゃる通り
別に計算項目を必要数だけ作るか、本来の表とは別に
本来の表の項目+計算項目がある表を作ってそこにデータを読み込んで処理する方が
後々便利かと思います。

固定長データの場合は

項目Aが01バイト目より10バイトまで
項目Bが11バイト目より30バイトまで

などと決まっている訳ですから計算項目として

[項目A]+#複写("_",10-#桁数([項目A]))

(上記式の10は項目Aが10バイトだった場合です。
また"_"は半角スペースを表しています。
更にデータ+空白詰めの場合です。)

といった計算項目を固定長で吐き出したい分だけ作成します。
もし項目Aが全角指定だった場合は

#全角([項目A])+#複写("_",5-#文字数([項目A]))

("_"は全角スペースを表しています)

とすれば良いでしょう。
書き出す項目で数値のものは項目の最内側を#文字列()で括って下さい。

最後に計算項目を全て連結した固定長書き出し専用項目を作って
その項目をテキストなどで書き出せばよい訳ですが、
この項目の桁数を計算する計算項目を更に作っておいて、書き出す前に
固定長桁数のチェックもすれば、より確実な固定長出力が出来るかと思います。

以上ご参考まで。MIT
23959 Re:データが入っていない所にスペースを入れたい 佐田 守弘 2003/12/19-22:02
記事番号23950へのコメント
Maoさん
>#条件選択COND([]="" ," " , [] .not "" ,#右側文字列([],3))
>って書いては、ダメなんですか?

確認はしておりませんが、多分大丈夫でしょう。
しかし、御質問の目的を達成するには、単に左側に3桁以上の
半角スペースを付けてから右側3桁だけを取り出せばよいので、
わざわざ「#条件選択」関数を使って、値が未定義であるかどうかを
分ける必要はないと思います。

佐田守弘(KS-00119)
23960 結合表を使う方法もあります。 佐田 守弘 2003/12/19-22:14
記事番号23952へのコメント
おぎのさん
うにんさんが置換で行うのではなくて計算項目で行う方法を提唱され、
また、MITさんが書き出し処理用の計算項目を持った表は、別の表とする事を提案されております。
これはお二人の言われるとおりです。

そしてこれを更に一歩進めるなら、結合表で処理することも可能です。
具体的には元のデータの表1つを対象表とする結合表を定義します。
そして対象表から、こう低調データとして書き出す項目を結合表に持って来ます。
ここまでは結合表の作り方の一般的な手順です。

そして、それぞれの値に対して、書き出したい固定長型のデータを作る計算式を定義した計算項目を、
結合表の上に作ります。
次に、元のデータの項目は非表示としてしまいます。つまり結合表を開いて表示されるのは、
計算項目で定義した固定長型に変換した値だけになります。
更に、それらの固定長型とした項目をつなぎ合わせて1項目とする処理を結合表の上で行う事もできます。
後は、これをテキストデータとして書き出せば良いでしょう。

結合表は、開いたときにその表(結合表)が作られるので、それを表として保存しない限り、
ディスク容量の負担にはなりません。

佐田守弘(KS-00119)

23982 Re:データが入っていない所にスペースを入れたい おぎの 2003/12/22-14:05
記事番号23946へのコメント
幅田さん、いつもありがとうございます。

>あらかじめ、[項目A]の頭にスペース3つをくっつけておいてから、
>#右側文字列で右側から3つ取り出せばいいのではないでしょうか?
>
>↓
>#右側文字列(#複写(" " ,3 )+[項目A],3)

なるほどー、こうすれば、データの入った所、入っていない所、全てにスペースが3つ入りますね。
置換を使うなら、この方法が簡潔でとても便利です。
ありがとうございました。
23983 Re:結合表を使う方法もあります。 おぎの 2003/12/22-14:25
記事番号23960へのコメント
MITさん、佐田さん、ありがとうございます。

結合表は今まで一度も使ったことがありませんが、これを機に使ってみようかと思います。
とはいえ、取りあえず急ぎのものは計算項目を作る方法でやってみます。

元々データを集めておく表とは別に、編集用というか、納品用に加工する表は別に用意する方法を取っているので、
これに項目を増やしてやってみます。

別に計算項目だけを集めた項目を作り、そこだけをテキストなどで書き出すのは、
桁数のチェックもでき、あとのtabの取り除き作業も不要なので、とても便利だと思いました。

戻る