過去の桐井戸端BBS (桐ver.9) |
22489 | 「#未定義」関数の意味がよくわからないので教えてください | 桐本 | 2003/09/27-11:36 |
#未定義の意味がよくわかりません わかるような簡単な説明がほしいです | |||
22490 | Re:教えてください | 宮城 | 2003/09/27-12:08 |
記事番号22489へのコメント 桐本さん、こんにちは。 関数だから戸惑うんですかね。関数っぽくいうと、いわゆるヌル (文字で表現すれば"")を常に返します。 (ということだと思ってるんですが。はて?) | |||
22491 | Re:教えてください | 宮城 | 2003/09/27-12:17 |
記事番号22490へのコメント つまり、ヌルと同値。こういう使い方になります。 ケース([氏名]="") ・・・こうするとかの記述・・・ ケース([氏名]=#未定義) ・・・こうするとかの記述・・・ 同じ意味です。 | |||
22492 | Re:#未定義について教えてください | うにん | 2003/09/27-13:05 |
記事番号22491へのコメント 項目値でいえば、データが何も入っていないのが#未定義です。 数値の場合""だと ケース([数値]="") とやると数値と文字列を比較しているようで違和感があるので ケース([数値]=#未定義) と書けます。 | |||
22493 | お礼 | 桐本 | 2003/09/27-16:26 |
記事番号22489へのコメント 返信 うにんさん 宮城さん どうもありがとうございました。 よくわかりました! | |||
22494 | 【補足】未定義値について | 佐田 守弘 | 2003/09/27-22:52 |
記事番号22489へのコメント 桐本さん 宮城さんとうにんさんの説明で理解された様ですが、重要な問題なので少し補足します。 ●未定義値とは 既にコメントされている通り、未定義値は、値が定義されていないヌルの状態です。 文字列のヌルストリングは、分りやすいと思いますが、要するに文字列の長さがゼロの状態です。 空白は空白という文字なのですが、未定義値の文字列は、 空白文字も含めて、文字そのものがない(従って長さが0)の状態です。 一方、数値の場合ですが、数値(整数でも同じ0は、0の値を記述するバイナリコードで表されますが、 未定義値は文字列のヌルストリングと全く同じで、何も書かれていない状態です。 では表の上にはどう書かれているかですが、項目値が書き込まれる場所に、 項目値が未定義の場合には、全く何も書かれていません。 ちょうど、在籍者ではあるけど、座席が作られていない様な状態と考えて 貰うと分りやすいと思います。 ●「#未定義」関数と「#定義」関数の大きな違い 「#未定義」関数は、未定義値を返す関数です。値ですから、項目値や変数 に代入したり、比較式の比較値としても記述できます。 一方、「#定義」関数は、比較式の中で使用し、項目値ないしは変数値が 未定義でない事を判定しする関数です。その項目値や変数値が未定義でない時には真(1)、 未定義の時には、偽(0)が論理値として返されます。 つまり、未定義という値(つまり未定義値)は値としてありますが、定義というのは、 項目値や件数値の状態であって、値ではありません。 例として 1) 条件 ([名前]<>#未定義) 2) 条件 ([名前]=#定義) 上記の2つは、結果として同じ判定になります。しかし、この2つは判定の 仕組みが違います。仮に[名前]が"桐村"だとします。 1)では"桐村"と未定義値を比較して、値が異なるのでこの条件は成立すると判断します。 2)では、[名前]に"桐村"という値が入力されている(定義状態)から、この条件が成立すると判断されます。 佐田守弘(KS-00119) | |||
22495 | Re:【補足】未定義値について | hidetake | 2003/09/28-06:35 |
記事番号22494へのコメント あまり細かい事を書くと,かえって混乱させるかも知れないですけど 他の BD を扱ったり,他の DB との連携の場合で,桐だけの認識では困る場合もあるので・・・ (^^; >文字列のヌルストリングは、分りやすいと思いますが、要するに文字列の長さ >がゼロの状態です。空白は空白という文字なのですが、未定義値の文字列は、 >空白文字も含めて、文字そのものがない(従って長さが0)の状態です。 これは「桐」の場合は!と言う前提がつきますね。 他の DB の場合は「NULL」(#未定義)と「長さ 0 の文字列」("")を 区別するのが普通です。桐の場合は #未定義 と "" が同一であるのですが,そう行かない場合もあります。 例えば,桐でも「外部DB」を扱う場合は,この問題が生じますが, 桐は #未定義 と "" を区別しませんし,外部DB ではどちらも NULL としか扱ってくれません。 ですので,相手の DB (テーブル)の定義で,長さ 0 の文字列の入力は許可されているけど, NULL値は許可されていないと桐からはデータの更新ができなくなってしまいます。 桐でも特に外部DB では #未定義 と "" を区別してくれないと困ってしまいます! (;_;) | |||
22496 | Re:【補足】未定義値について | hidetake | 2003/09/28-08:03 |
記事番号22495へのコメント 桐における「#未定義」の更なる神秘を求めて? 数値型に対する「#未定義」編 >一方、数値の場合ですが、数値(整数でも同じ0は、0の値を記述するバイナリ >コードで表されますが、未定義値は文字列のヌルストリングと全く同じで、 >何も書かれていない状態です。 数値型の変数・計算式等において「#未定義」は,時と場合によって 本来の NULL(#未定義) の働きをする場合と,そうでない(0を返す) 場合があります。 桐のテーブルには,数値型の項目にデータが全く入力されていない状態の処理を 「ファイル属性」の「未定義項目値処理」の設定で 「ゼロ」として扱うか「未定義」として扱うかの設定がありますが #未定義 もこの設定の影響を受ける場面があります。 それは,「印字」コマンドの内部計算式で #未定義 を使う場合です。 状態によって,本来の #未定義 として扱われる場合と,0 として扱われる場合があります。 それは,「印字」コマンドを使う際に表が開かれている場合であり, 表が開かれていると,現在処理対象の「表」の「未定義項目値処理」の設定が #未定義 の動作に影響します。 だから,数値型を対象に #未定義 を使う場合は,Windows版の桐の場合(DOS版の桐に対して仕様が変更された), 単純に #未定義 をNULL (#未定義) として動作するか 0 として動作するか言えない場合があります。 「印字」コマンドの中の未定義状態の処理(計算式)って結構複雑です。 :-) この件に関しては,たゆーさんのところの下記コメント以下も参考 になるかと思います。(Windows版「桐」の印字コマンドのツリー) http://www2u.biglobe.ne.jp/~s_tanaka/cgi-bin/bbs/bbs.cgi?function=logview_html&no=79#3911 |