過去の桐井戸端BBS (桐ver.8)
12744 条件選択で".."を消したい NTA 2001/08/24-11:15
納品項目に「生年月日」というのがあって、
『和暦年.月.日』という形式で納品しなければなりません。
うちの会社は入力者と納品者とで担当が違うので、入力担当者は例えば
「S60001」
という風に続けて入力していますので、これを
「S60.1.1」
という風に直す必要があるのです。
また、取引先からの指示で、もし
「S60.スペース.01」
という記入なら、
「S60..1」
という風に記入がない箇所はピリオドを続けても良いという事になっているのですが、完全に無記入の場合、
「..」
という表示は駄目で、その項目を全部スペースにして欲しいとの事でした。
そこで、『元号』『年』『月』『日』という風に一旦別項目で桐に読み込んで、
必要な形態に直してから一つの項目にまとめようと思っています。
現在「前の0を取る」、「スペースを取る」という点まではできたのですが、
最後の
「..」
をスペースに変える、というのができません。
「#条件選択」を使えばいいのではないか、とは思っているのですが、
うまく式にすることができません。
どうすれば良いのでしょうか?
また、別のやり方で何かもっとすっきりとできる方法があれば教えて下さい。
12746 Re:条件選択で".."を消したい NTA 2001/08/24-11:30
記事番号12744へのコメント
今テストデータで

#条件選択(([年]≠"" .and [月]≠"" .and [日]≠""),#連結([元号], [年] ,".", [月] ,".",[日]),1,"")

こうやったら出来ている、ように見えるのですが、本当にこれで大丈夫でしょうか?(^-^;
12749 Re:条件選択で".."を消したい MSF 2001/08/24-15:15
記事番号12746へのコメント
NTAさん、こんにちは。

>#条件選択(([年]≠"" .and [月]≠"" .and [日]≠""),#連結([元号], [年] ,".",
>[月] ,".",[日]),1,"")
>こうやったら出来ている、ように見えるのですが、本当にこれで大丈夫でしょうか?(^-^;

直訳すると・・

[年]の項目値が、なにも無い状態ではなく、
 かつ
[月]の項目値も、なにも無い状態ではなく、
 さらに
[日]の項目値も、なにも無い状態ではない。
という条件が満たされれば、

[元号]の項目値と
[年]の項目値と
文字列"."と
[月]の項目値と
文字列"."と
[日]の項目値を順番につなげた値を項目値とする。

そうでなければ、
なにも無い状態を項目値とする。

・・・ということになりますね。

イレギュラーなケースが出る可能性はない様に思えますが・・どうでしょう?
って、これじゃ励ましにもなんないか(^^;

ただ、すでに理解されていると思いますが、
スペースに置き換えるのと、未定義(なにも無い状態)にするのとでは意味が違いますので、その辺はご注意くださいね。

それでは。


12750 Re:条件選択で".."を消したい NTA 2001/08/24-15:25
記事番号12749へのコメント
MSFさん、こんにちは。
御回答有り難う御座います。
あれから、いろいろなテストデータを試したところ、
うまくいかない場合も出てきたのでもっと詳しく条件をつけました。

#条件選択(([元号]="" .and [年]="00" .and [月]="00" .and [日]="00"),"",([元号]="" .and [年]≠"" .and [月]≠"" .and [日]≠""),#連結([元号], [年] ,".", [月] ,".",[日]),([元号]="" .and [年]="" .and [月]≠"" .and [日]≠""),#連結([元号], [年] ,".", [月] ,".",[日]),([元号]="" .and [年]="" .and [月]="" .and [日]≠""),#連結([元号], [年] ,".", [月] ,".",[日]),([元号]≠"" .and [年]≠"" .and [月]≠"" .and [日]≠""),#連結([元号], [年] ,".", [月] ,".",[日]),([元号]≠"" .and [年]="" .and [月]="" .and [日]=""),#連結([元号], [年] ,".", [月] ,".",[日]),([元号]≠"" .and [年]≠"" .and [月]="" .and [日]=""),#連結([元号], [年] ,".", [月] ,".",[日]),([元号]≠"" .and [年]≠"" .and [月]≠"" .and [日]=""),#連結([元号], [年] ,".", [月] ,".",[日]))

何だかすごい事になってしまったのですが、これで全てのケースに対応している、はず、です。

>ただ、すでに理解されていると思いますが、
>スペースに置き換えるのと、未定義(なにも無い状態)にするのとでは
>意味が違いますので、その辺はご注意くださいね。

…あまり分かっていないかも知れません。
取引先からは「スペースにして欲しい」との事なのですが、↑の状態で大丈夫でしょうか?
タブ区切りのテキストファイルに落として納品するので、書き出した物を開いてみたところ、
その箇所は何もなくてタブが2つ続いた状態になっています。
上司はそういう風になるようにしろ、と言っていたのですけれども…。

12753 Re:条件選択で".."を消したい うにん 2001/08/24-16:30
記事番号12750へのコメント

>MSFさん、こんにちは。
>御回答有り難う御座います。
>あれから、いろいろなテストデータを試したところ、
>うまくいかない場合も出てきたのでもっと詳しく条件をつけました。
>
>#条件選択(([元号]="" .and [年]="00" .and [月]="00" .and [日]="00"),"",([元号]="" .and [年]≠"" .and [月]≠"" .and [日]
>≠""),#連結([元号], [年] ,".", [月] ,".",[日]),([元号]="" .and [年]="" .and [月]≠"" .and [日]≠""),#連結([元号],
>[年] ,".", [月] ,".",[日]),([元号]="" .and [年]="" .and [月]="" .and [日]≠""),#連結([元号], [年] ,".", [月] ,".",[日]),
>([元号]≠"" .and [年]≠"" .and [月]≠"" .and [日]≠""),#連結([元号], [年] ,".", [月] ,".",[日]),([元号]≠"" .and [年]
>="" .and [月]="" .and [日]=""),#連結([元号], [年] ,".", [月] ,".",[日]),([元号]≠"" .and [年]≠"" .and [月]="" .and [日]
>=""),#連結([元号], [年] ,".", [月] ,".",[日]),([元号]≠"" .and [年]≠"" .and [月]≠"" .and [日]=""),#連結([元号],
>[年] ,".", [月] ,".",[日]))
>
>何だかすごい事になってしまったのですが、これで全てのケースに対応している、はず、です。

#連結([元号], [年] ,".", [月] ,".",[日]) な条件がいっぱいあるみたいなので、それらは.or でつなげば大分短くなりますよね。ん?最初の値以外全部?

"00"という入力があるのかが不明瞭ですが(上の式では年月日全部が"00"の場合しかありませんが、
「昭和60年1月」で日だけが"00"なケースなどはないのかな?)

12755 Re:条件選択で".."を消したい NTA 2001/08/24-19:10
記事番号12753へのコメント
うにんさん、こんばんは。
御回答有り難う御座います。

>#連結([元号], [年] ,".", [月] ,".",[日]) な条件がいっぱいあるみたいなので、それらは
>.or でつなげば大分短くなりますよね。ん?最初の値以外全部?

成程…まだ条件文の使い方が(…「.and」と「&」の違いすらも…)全然分からずにやっているので…
これから試してみます!

>"00"という入力があるのかが不明瞭ですが(上の式では年月日全部が"00"の場合しかありませんが、
>「昭和60年1月」で日だけが"00"なケースなどはないのかな?)

"00"というのは空白の箇所を作る為にわざと入れてあります。
これは桐で読み込む以前に、入力したデータをPCに落としてくる時点で設定してあります。

項目A:元号
項目B:年
項目C:月
項目D:日
項目E:生年月日1
項目F:生年月日2

となっていて、
項目A〜Dを一つの項目に繋げた後(項目E)、さらに項目Fに

#文字置換([生年月日1],"00", "" )

という式を入れて作っています。

例えば「昭和60年1月スペース日」だった場合、

項目E:S60.1.00

とした後に、

項目F:S60.1.

と再置換しているのです。
前述の式といい、要領が悪い気が自分でもしているのですが、
超初心者なので、これから少しずつ応用できればいいなと思っています。

12773 Re:条件選択で".."を消したい MSF 2001/08/27-10:31
記事番号12750へのコメント
NTAさん、おはようございます。

もう、解決されましたでしょうか。
朝BBSを見たら、なんか、すごいことになっていたので、
ちょっとコメントさせて頂きます。

とりあえず、条件式を整理してみました。

         #条件選択(
【条件1】    ([元号]="" .and [年]="00" .and [月]="00" .and [日]="00"),
 【真の場合の値】"",

【条件2】    ([元号]="" .and [年]≠"" .and [月]≠"" .and [日]≠""),
 【真の場合の値】#連結([元号], [年] ,".", [月] ,".",[日]),

【条件3】    ([元号]="" .and [年]="" .and [月]≠"" .and [日]≠""),
 【真の場合の値】#連結([元号],[年] ,".", [月] ,".",[日]),

【条件4】    ([元号]="" .and [年]="" .and [月]="" .and [日]≠""),
 【真の場合の値】#連結([元号], [年] ,".", [月] ,".",[日]),

【条件5】    ([元号]≠"" .and [年]≠"" .and [月]≠"" .and [日]≠""),
 【真の場合の値】#連結([元号], [年] ,".", [月] ,".",[日]),

【条件6】    ([元号]≠"" .and [年]="" .and [月]="" .and [日]=""),
 【真の場合の値】#連結([元号], [年] ,".", [月] ,".",[日]),

【条件7】    ([元号]≠"" .and [年]≠"" .and [月]="" .and [日]=""),
 【真の場合の値】#連結([元号], [年] ,".", [月] ,".",[日]),

【条件8】    ([元号]≠"" .and [年]≠"" .and [月]≠"" .and [日]=""),
 【真の場合の値】#連結([元号],[年] ,".", [月] ,".",[日])

         )

整理すると・・・
       [元号]:[年]:[月]:[日]:[計算される値]
【ケース1】  #U 00 00 00 #U
【ケース2】  #U 60 1 1   60.1.1
【ケース3】  #U #U 1 1 .1.1
【ケース4】  #U #U #U 1 ..1
【ケース5】 S 60 1 1 S60.1.1
【ケース6】 S #U #U #U S..
【ケース7】 S 60 #U #U S60..
【ケース8】 S 60 1 #U S60.1.

という値になると思うんですが・・・
  ・・まちがってたらご愛嬌(^^;

とりあえず、お望みの形でしょうか?
もう一度、それぞれのケースで検証したほうが、
良いような気もしますが・・・

ちなみに、先にNo.12746でコメントしていた、下記計算式の場合
          #条件選択(
 【条件】     ([年]≠"" .and [月]≠"" .and [日]≠""),
 【真の場合の値】#連結([元号], [年] ,".",[月] ,".",[日]),
【条件】     1,
 【真の場合の値】""
        )

       [元号]:[年]:[月]:[日]:[計算される値]
【ケース1】  #U 00 00 00 00.00.00
【ケース2】  #U 60 1 1   60.1.1
【ケース3】  #U #U 1 1 #U
【ケース4】  #U #U #U 1 #U
【ケース5】 S 60 1 1 S60.1.1
【ケース6】 S #U #U #U #U
【ケース7】 S 60 #U #U #U
【ケース8】 S 60 1 #U #U

という値になります。

思いますに・・・、当事者ではないので、まことに無責任ですが・・・
そもそも、元号等々の各項目の値が無い状態を許容してしまうこと自体、
おかしいと思いますが、いかがでしょうか?

また、最後に、スペースと未定義の違いですが、
スペースというのは、空白の文字データが入っている状態(全角空白・半角空白)
未定義(#U)というのは、データがなにもない状態 全くの空の状態を言います。
したがって、現在、計算される値はすべて、スペースではなく未定義の状態
となっておりますので、念の為。

それでは。

12774 Re:条件選択で".."を消したい MSF 2001/08/27-11:00
記事番号12773へのコメント
すいません。
表示がそろってませんね。

うっかり、半角スペースと全角スペースを混在させてしまいました。

上の部分
>整理すると・・・
>       [元号]:[年]:[月]:[日]:[計算される値]
>【ケース1】  #U  00  00  00   #U
>【ケース2】  #U  60   1   1   60.1.1
>【ケース3】  #U  #U   1   1   .1.1
>【ケース4】  #U  #U  #U   1   ..1
>【ケース5】  S   60   1   1   S60.1.1
>【ケース6】  S   #U  #U  #U   S..
>【ケース7】  S   60  #U  #U   S60..
>【ケース8】  S   60   1  #U   S60.1.
>
>という値になりますが・・・

下の部分
>       [元号]:[年]:[月]:[日]:[計算される値]
>【ケース1】  #U  00  00  00   00.00.00
>【ケース2】  #U  60   1   1   60.1.1
>【ケース3】  #U  #U   1   1   #U
>【ケース4】  #U  #U  #U   1   #U
>【ケース5】  S   60   1   1   S60.1.1
>【ケース6】  S   #U  #U  #U   #U
>【ケース7】  S   60  #U  #U   #U
>【ケース8】  S   60   1  #U   #U
>
>という値になります。

と、これでよかったかな・・

こういう風に、全角と半角のスペースでもトラブルがあるのに
「スペースにしなさい」というのもどうかと・・

#ほんと、無責任に言いたいことばかり言ってすいません・・。

それでは。

12786 Re:条件選択で".."を消したい うにん 2001/08/27-23:23
記事番号12755へのコメント
>"00"というのは空白の箇所を作る為にわざと入れてあります。
>これは桐で読み込む以前に、入力したデータをPCに落としてくる時点で設定してあります。
>
>項目A:元号
>項目B:年
>項目C:月
>項目D:日
>項目E:生年月日1
>項目F:生年月日2
>
>となっていて、
>項目A〜Dを一つの項目に繋げた後(項目E)、さらに項目Fに
>
>#文字置換([生年月日1],"00", "" )
>
>という式を入れて作っています。
>
>例えば「昭和60年1月スペース日」だった場合、
>
>項目E:S60.1.00
>
>とした後に、
>
>項目F:S60.1.

要約すると、Aには元号か未入力なら""、BCDには年・月・日か未入力なら"00"が入っていて、全部が未入力な場合は""、
それ以外なら"00"を""にして"."で連結する、ということでいいのかな?(だとすれば、"00"でなく最初から""になっていれば式が簡単になりますが。
たぶん読みこむ都合で"00"がいいんでしょうね)EとFの式を1つにまとめてEを
#文字置換([A]+[B]+"."+[C]+"."+[D],"00", "" )
とすれば、Fに
#条件選択([E]="..","",1,[E])
でokな感じ。。。

MSFさんもおっしゃってますが、どういうデータからどういうデータを作りたいのか、をよく整理してみましょうね。:-)

書いてて気づきましたけど、元号が省略されたら昭和と平成(あるいは大正)の判別にむりがあるような。

12794 Re:条件選択で".."を消したい NTA 2001/08/28-17:05
記事番号12750へのコメント
MSFさん、うにんさん、御回答有難う御座いました。
遅れ馳せながらの盆休みでこちらを拝見するのが遅くなりました。
申し訳ありません。
無事(かどうかはまだ分かりませんが)納品は終わりました。

お二人におっしゃって頂いたように、まだ自分が何をしたいのかよく分かっていないのだとは思います。
というより、自分がしたい事を形に表せない、というのが正直な気持ちです。
ですから私が作った項目式も傍目からは見苦しく分かり辛い物だと思います。
まだ桐にどういった関数があるのかさえ分からず、
もともとプログラム自体をまともに扱った事がない人間が、
それでも桐でとにかく作らなければならない、という今の状態では、
作りたい項目式を如何に簡素化するか、ではなく、
今回のように結果として「許される物」と「許されない物」を全て書き出して、
一つ一つ虱潰しに消していく、という方法が精一杯でした。
勿論、次からはもっと進歩したいとは思いますが(^-^:
それにしても皆さん、よく理解してらっしゃいますよね。
やっぱり勉強あるのみでしょうか…家にも桐が欲しいです。
いや、桐以前に関数の勉強が必要かも知れないですねぇ。

さて、年号の有無等は、データとして成り立たないのではないかという事ですが、
こればかりはこちらではどうしようもありません。
納品したデータをどう取り扱うかは入力が仕事の私達には関与外の事ですし、
取引先の指示通りにしなければ次から仕事が頂けませんから…(^-^:

戻る