過去の桐井戸端BBS (桐ver.9)
22514 桁数の違う数字をハイフンでつなげた所番地のような文字列を整列する方法を教えてください obanba 2003/09/29-21:25
よろしくお願いします。
桐ver9を使っています。
所番地を入力する際に何番地の何号というのを「100-5」とかいう風にハイフンで括って入力するのですが
当然 "-" が入っているので所番地の項目は文字列型となり、整列が具合が悪くなります。
たとえば、
231-5,24-5,567-8,67-12,67-5
のような5つのデータがあったとしますと、これを昇順で整列しようとすると、
231-5
24-5
567-8
67-12
67-5
となってしまい、スッキリしません。これを
24-5
67-5
67-12
231-5
567-8
と言う風に、先ず、ハイフンの左側数字について昇順に並べ替えて、その上で
右側数字について
昇順にと言う風にしたいのです。まあ最初から所番地を二つに分けて数値型として入力しておけば良かったのでしょうが、
良い方法がないでしょうか?
非常に初歩的な質問ですみません。

22515 Re:所番地の整列方法 ド・モ・ONnoji 2003/09/29-22:10
記事番号22514へのコメント
obanbaさん、こんばんは。

新しい項目を追加したらいかがでしょうか?
新しい項目のデータ型は数値です。

新しい項目は項目計算式で#数値([所番地])とするといいと思います。

そして、並べ替え条件に[新しい項目]を昇順で指定すればいいのではないかと思います。

外していたらスイマセン。

>まあ最初から所番地を二つに分けて数値型と
>して入力しておけば良かったのでしょうが

計算できない項目、住所は掛けたり割ったり足したり引いたりしませんよね。
そういった項目は文字列にするのが自然だと思いますよ。(^^ゞ

22516 Re:所番地の整列方法 悲しげ 2003/09/29-22:18
記事番号22514へのコメント
どもっ、obanbaさん
面白みの無い方法ですが(^^;)、隠し別項目を用意して、その項目計算式を次のようにする。

  #LAST(#sstr([所番地],1,#文字位置([所番地],"-")-1),5)\
  +"-"+#LAST(#sstr([所番地],#文字位置([所番地],"-")+1),5)

こうすると、例えば「67-12」なら「___67-___12」のようになります。
そして並べ替えにはこの項目を利用する、とか。

ところでこれができるには、[所番地]が別項目ってことが前提ですが、
果たしてそうだったのでしょうか?
さらに云えば、所番地として 1-2-3 なんてのは無いのでしょうか?

22527 Re:所番地の整列方法 obanba 2003/09/30-22:55
記事番号22516へのコメント

>面白みの無い方法ですが(^^;)、隠し別項目を用意して、その項目計算式
>を次のようにする。
>
>  #LAST(#sstr([所番地],1,#文字位置([所番地],"-")-1),5)\
>  +"-"+#LAST(#sstr([所番地],#文字位置([所番地],"-")+1),5)
>
>こうすると、例えば「67-12」なら「___67-___12」のようになります。
>そして並べ替えにはこの項目を利用する、とか。
>
なるほどなるほど。
ハイフンの左側は[所番地]の項目からからハイフンの文字位置を探して、1行目から
その位置より1だけ少ない行数だけ部分列として持ってくる。
一方右側はハイフンの位置に1だけ加えた位置から最後まで部分列として持ってくるわけですね。
あと#LAST、#右側文字列ですが、これはどういう効果があるのでしょうか?

>ところでこれができるには、[所番地]が別項目ってことが前提ですが、
>果たしてそうだったのでしょうか?
どうもありがとうございました。試してみます。
[市町村名][大字][所番地][ビル名]と言う風に分けて入力しておりますので大丈夫と思います。
>さらに云えば、所番地として 1-2-3 なんてのは無いのでしょうか?
>
ハイフンが二つ以上になる場合は1-2ノ3とか、[大字]の方の最後に1を持ってくるとかしないと具合が悪いようですね。。

22528 Re:所番地の整列方法 obanba 2003/09/30-23:08
記事番号22515へのコメント

>新しい項目を追加したらいかがでしょうか?
>新しい項目のデータ型は数値です。
>
>新しい項目は項目計算式で#数値([所番地])とするといいと思います。
>
>そして、並べ替え条件に[新しい項目]を昇順で指定すればいいのではないかと思います。
>
>外していたらスイマセン。
>
>>まあ最初から所番地を二つに分けて数値型と
>>して入力しておけば良かったのでしょうが
>
>計算できない項目、住所は掛けたり割ったり足したり引いたりしませんよね。
>そういった項目は文字列にするのが自然だと思いますよ。(^^ゞ
>
ありがとうございました。
色々ヒントを頂きましたのでやってみようと思います。
数値型の項目を二つ設けてそこへ参照で引っ張って来るわけですね。

22529 Re:#LAST関数 悲しげ 2003/09/30-23:23
記事番号22527へのコメント
どもっ、obanbaさん

>あと#LAST、#右側文字列ですが、これはどういう効果があるのでしょうか?

これは、#右側文字列( str , n ) で、strの文字数(または n がマイナス
の時はbyte数)が n に満たない時には n になるまで先頭に半角空白を補う、
と云う仕組みを利用しています。
って、改めてヘルプを見てみたら、とてもそのようには読み取り難いような記載ですね。
変だな〜、DOS桐v5のマニュアルにはこの旨が明確に記されているんですが・・・(?_?)
この仕組みは当然ながらWin版でも有効です。試してみれば判ります。
でも、なぜWin版のヘルプには明瞭に記されていないのでしょう?

答え:担当者が書き忘れた?

22530 Re:#LAST関数 うにん 2003/09/30-23:58
記事番号22529へのコメント
>でも、なぜWin版のヘルプには明瞭に記されていないのでしょう?
>
>答え:担当者が書き忘れた?

ほんとだ〜、正解でしょうね。#部分列には書いてあるし。

22542 Re:#LAST関数 obanba 2003/10/01-20:40
記事番号22529へのコメント

>>あと#LAST、#右側文字列ですが、これはどういう効果があるのでしょうか?
>
>これは、#右側文字列( str , n ) で、strの文字数(または n がマイナス
>の時はbyte数)が n に満たない時には n になるまで先頭に半角空白を補う、
>と云う仕組みを利用しています。

どうもありがとうございました。
仰るとおりに完璧に整列することができました。(ハイフンが含まれる項目値は)
成る程、#LAST関数を使って桁数を指定すれば、その桁数になるまで
左側を半角スペースで埋めてくれるわけですね。
ちなみに大小関係を比べましたところ半角スペースが一番小さく、

" "<"0"<"1"

となるのが非常に好都合です。
処で、[所番地]にハイフン"-"が含まれない項目値の場合ですが、
この場合は
#文字位置([所番地],"-")が0となって具合がわるいのでこの場合は、0を6あたり
に置換したいのですが、数値を置換する関数が見つからないのです。
#文字置換( str1 , str2 , str3 )
はあるのですが...
22543 Re:#LAST関数 悲しげ 2003/10/01-21:26
記事番号22542へのコメント
obanbaさん wrote

>処で、[所番地]にハイフン"-"が含まれない項目値の場合ですが、

あぅ、そういうことってありがちですね。(^^;)

>この場合は、0を6あたりに置換したいのですが、

この6の意味とかがよく判りませんが、このような場合は条件選択関数で逃げればいいのではないでしょうか? 例えば

#cond(#文字位置([所番地],"-")=0,#LAST([所番地],5)\
   ,1,#LAST(#sstr([所番地],1,#文字位置([所番地],"-")-1),5)\
    +"-"+#LAST(#sstr([所番地],#文字位置([所番地],"-")+1),5))

あ、これだと「#文字位置([所番地],"-")」が3回も出ちゃうのが
鬱陶しければ

#計算(#代入(&秒,#文字位置([所番地],"-"))\
   ,#cond(&秒=0,#LAST([所番地],5)\
      ,1,#LAST(#sstr([所番地],1,&秒-1),5)\
       +"-"+#LAST(#sstr([所番地],&秒+1),5)))
22544 Re:#LAST関数 悲しげ 2003/10/01-21:30
記事番号22543へのコメント
もし、所番地の先頭が「-」から始まっているかもしれないとすれば、判断は

 #cond(#文字位置([所番地],"-")=<1,・・・・・

にした方がいいかもしれません。ま、有り得ないとは思いますが。(^^;)
22554 Re:#LAST関数 obanba 2003/10/02-21:32
記事番号22543へのコメント

>>この場合は、0を6あたりに置換したいのですが、

これは全くの勘違いで、いわゆる隠し項目が11桁(5+1+5)でハイフンが
真ん中の6桁目にくるのを元の項目と混同していました。

>この6の意味とかがよく判りませんが、このような場合は条件選択
>関数で逃げればいいのではないでしょうか? 例えば
>
>#cond(#文字位置([所番地],"-")=0,#LAST([所番地],5)\
>   ,1,#LAST(#sstr([所番地],1,#文字位置([所番地],"-")-1),5)\
>    +"-"+#LAST(#sstr([所番地],#文字位置([所番地],"-")+1),5))
>
>あ、これだと「#文字位置([所番地],"-")」が3回も出ちゃうのが
>鬱陶しければ
>
>#計算(#代入(&秒,#文字位置([所番地],"-"))\
>   ,#cond(&秒=0,#LAST([所番地],5)\
>      ,1,#LAST(#sstr([所番地],1,&秒-1),5)\
>       +"-"+#LAST(#sstr([所番地],&秒+1),5)))
完璧に整列できました。
まことに明快な解決方法ありがとうございました。
元の項目値にハイフンが含まれていない場合は元の項目値を全部持って来る。
それ以外は上記のスレッドのように部分列として持ってくるわけですね。



戻る