●STR関数に付いて

文法

STR( <数値式1>[,<数値式2>[,<数値式3>[,<文字式>]]])

<数値式1>  文字列を返す元となる値を指定します。文字列の長さは<数値式2>で制限されます
          (デフォルトは10であり、また指定できる範囲は1から20です)。

<数値式2>   <数値式1>中の整数の桁数よりも小さい場合には、STR( )はアスタリスク(*)を並べた
          文字列を返します。<数値式2>で指定する長さは、小数点や負の値の場合のマイナス記号のための桁含まれます

<数値式3>  小数点以下の数のために桁を確保します。デフォルトは0です。

<文字式>   1個の文字であり、<数値式1>の桁数が<数値式2>桁よりも少ない場合にこの関数から
          返ってくる文字列の先頭部分の余白を埋めるために使う文字を表わします。

文法は以上になっています。用意されたオプションは全て使うのが良いのか、それとも他の言語を考慮した方が
良いのか・・・これは個人の自由ですが。
4つ目のパラメータは、dBASE3などでは用意されていませんでした
このパラメータを使用しないで、プログラミングして行くヒントをあげてみます。


例)I=12のとき、”0012”という文字列をえたい
本来なら : ? STR(I,4,0,”0”)
        ・・・これで簡単に”0012”が作れます

パラメータを3つだけ使用すると
   :MC1=STR(I,4,0)
    MC1=LTRIM(MC1)
    MC1=RIGHT(”0000”+MC1,4)

変数を使用しないで1行で:? RIGHT(”0000”+LTRIM(STR(I,4,0)),4)

一見無駄に見えますが、4つ目のパラメータを使用しない記述は他社のXbaseで動作します
Windowsになり、互換性のあるコードを書く事は無意味になりつつありますが
考えてみるのも意味があると思います


補足
TRIM()という関数は、BASIC系統と本来の動作が異なります。

Xbaseでは:TRIM(” 12 ”) => ” 12”
  となり、RTRIM()と同じです

BASICでは:TRIM(” 12 ”) => ”12”
  となり、LTRIM(RTRIM())の機能と同等となります

 間違えやすい関数ですので、気にしておくと問題解決に役立ちます