過去の桐井戸端BBS (桐ver.9)
24346 レポートで文書を作成する際、1行の文字数を揃えたい。 脱初級! 2004/01/21-11:20
こんにちわ。いつもここで勉強させていただいております。
さて、本題ですが、現在、桐のレポートで、ワープロ的な文書を作成しています。
例えば、案内状などです。
案内状を作成する場合、どうしても文中に表ファイルから表引きしたり、
項目を表示したりする必要があります。
ここで表示させる項目が全て同じ文字数であれば、都合がいいのですが、
実際には、例えば、Aさん向けには、項目[住所]から、「東京都文京区」(6文字)という値を、
Bさん向け案内状には「神奈川県小田原市」(8文字)のように、文字数が異なってきます。
案内状の文中で、#cat関数を用いて項目[住所]を引用しているような場合、
例えば、

#cat([住所],"にお住まいの方は",[会場],にお越し下さい。そしてその際には、")

と計算式で文を記入している場合、文字数の違いによって改行する必要があります。
これについては、一番簡単なのは、文字数が何文字になるかによって、
レポートを分けて作成する方法ですが、これは正直、大変に面倒です。
また、印刷属性でフォントを自動縮小すると文書中のフォントの大きさがバラバラになってしまい、
大変見栄えが悪くなります。

こちらで考えているのは、上記のテキストオブジェクトで20文字までならば、

#cat([住所],"にお住まいの方は",[会場],にお越し下さい。そしてその際には、")

と表示し、そして、1文字多い21文字ならば、
#cat([住所],"にお住まいの方は",[会場],にお越し下さい。そしてその際には")

→末尾の句読点(、)が取れていることに注目下さい。
と表示し、22文字ならば、
#cat([住所],"にお住まいの方は",[会場],にお越し下さい。そしてその際に")
というように文字数に応じて変えるようにしたい、と考えています。
こういう場合、どう計算式を記入すればよいでしょうか?
なにかいい知惠がありましたら、ご教授よろしくお願い申し上げます。

24347 Re:レポートで1行の総文字数を揃えたい。 悲しげ 2004/01/21-12:26
記事番号24346へのコメント
どもっ、脱初級!さん
全角半角混在ならば判断の関数として#桁数を使いますが、とりあえず
全て全角であると仮定して、ここでは#文字数関数を使ってみます。
(#catを使うと見にくくなるので、以下では"+"で連結しています)

[住所]+"にお住まいの方は"+[会場]+"にお越し下さい。そしてその際に"+#条件選択(#文字数([住所])=22,""
     ,#文字数([住所])=21,"は"
     ,#文字数([住所])<21,"は、")

例えば22文字が何の数なのか実は不明ですが(^^;)、もし[住所]と[会場]の合算であるならば、文字数の判断は
  #文字数([住所]+[会場])
のように行います。

ついでに云えば、#文字数関数を何回も使いたくなければ

#計算(#代入(&秒,#文字数([住所])
,[住所]+"にお住まいの方は"+[会場]+"にお越し下さい。そしてその際に"+#条件選択(&秒=22,""
     ,&秒=21,"は"
     ,&秒<21,"は、"))

とか。

24348 訂正 悲しげ 2004/01/21-12:33
記事番号24347へのコメント
>#計算(#代入(&秒,#文字数([住所])
>,[住所]+"にお住まいの方は"+[会場]+"にお越し下さい。そしてその際に"
>+#条件選択(&秒=22,""
>     ,&秒=21,"は"
>     ,&秒<21,"は、"))

閉じカッコがひとつ足りなかった。(^^;)

#計算(#代入(&秒,#文字数([住所]))

他にも文法ミスがあるかもしれませんが、すいません、未検証。<(_ _)>

24352 Re:訂正 脱初級! 2004/01/21-15:11
記事番号24348へのコメント
悲しげ様、いつもコメントを拝見させて頂いております。
早速のご回答、ありがとうございました。
でも、これできるんですね。半分、諦めておりました。
大変参考になりました。アドバイスを参考に計算を書いてみます。ありがとうございました。m(_ _)m

24358 文字数可変の時のレポート印刷での割付け 佐田 守弘 2004/01/21-21:45
記事番号24346へのコメント
脱初級!さんは
ひとまずは目的を達したようですが、別の観点からコメントさせて頂きます。
質問の主旨は、住所ないし名前など表から参照した値を折り込んで印刷する時に
参照値の文字数が変わっても、文章としてきれいな割付けをしたいという意味かと思います。

参照する値に応じて、「他の文字数や句読点の有無で調整し、全体として同じ文字数とするには?」が質問の主旨でした。
しかし、この方法では限度があろうかと思います。
そこで一般論として、参照する値の文字数が変わった場合を考慮して、
見やすい割付けをするにはどうするかを考えてみます。

●考慮すべき点
考慮すべき点としては
・総文字数は、必ず一定とする必要があるのか。
・印刷する領域の大きさが決まっていて、きちんとその中を埋めつくす様に割付ける必要があるのか。
・行数が多少変化しても構わないのか。行数は固定でなければならないのか。
・参照する項目値の文字数の範囲はどの程度変化するのか
・特定の文字数の途中での改行を避ける必要があるのか
などです。

一般的に言えば、総文字数を調整する事は得策ではなく、参照する値によって文字数が
変わっても、見栄えが悪くならないような割付けをするのが良いだろうと思います。
この場合、総文字数に対して、何文字の範囲で変動があるかによって、
やりやすさが多少変わります。
数十文字の文章に対して、数文字の範囲であれば、
これから述べる方法でうまくできるのではないかと思います。

・改行させたくない言葉の前で強制改行しておく
場所の名前など大切な言葉の途中で改行させない様にするには、その直前で改行をしておきます。
改行には強制改行文字を挿入します。
・あふれ改行文字で改行場所を指定する言葉の途中で改行が起きない様にするには、あふれ改行文字を使います。
通常は句読点や括弧などを指定しますが、「てにをは」の様な助詞の仮名文字を指定すると、
文節で改行させる事も可能です。
・均等割付けを使う
あふれ改行などを行うと、1行の文字数が変わりますから、下段が揃いません。
その様な場合には、均等割付けを使うのも1つの方法です。
・上下均等を使う
行数が1行程度変わる場合には、上下均等割付けを使って、印刷領域を合わせる方法もあります。

佐田守弘(KS-00119)

戻る