過去の桐井戸端BBS (桐ver.9) |
23997 | レポート印刷で電話番号をハイフンで区切って3分割して印刷したい | katsuyoshi | 2003/12/23-08:40 |
お世話になります。 桐9-2004で受発注管理に取り組んでいます。 項目[電話番号]に文字列で 123-456-7890と入力し 宅配ラベル(RPT)にテキストオブジェクトを3分割して 印刷しようと思っています。 #部分列で文字分割ができますが郵便番号のように 各オブジェクトの桁数(文字数)が不定のため うまく区切ることができません。 よい方法を教えてください。 | |||
24000 | Re:電話番号の部分列について | 大原孝一 | 2003/12/23-10:53 |
記事番号23997へのコメント はじめまして 単純な発想ですが、電話番号って1234-12-1234か123-123-1234の10桁構成ではないでしょうか? そこで、前、中、後に分割する表中計算は 前; #条件選択(#IS記号([番号],0)=4,#部分列([番号],1,3),#IS記号([番号],0)=5,#部分列([番号],1,4)) 中;#条件選択(#IS記号([番号],0)=4,#部分列([番号],5,3),#IS記号([番号],0)=5,#部分列([番号],6,2)) 後;#右側文字列([番号],4) ではいかがでしょう。はずしていらたm(_ _)m | |||
24001 | Re:電話番号の部分列について | 佐田 守弘 | 2003/12/23-10:57 |
記事番号23997へのコメント katsuyoshiさん 電話番号を市外局番、市内局番、加入者番号に切り分けるには、 区切りに使っているハイフォンの位置を「#文字位置」関数で求め、この位置までを取り出す方法で行います。 3つのテキストオブジェクトを作ったとの事なので、それぞれに次の様な計算式を設定して下さい(動作確認はしておりません)。 ・市外局番 #計算(#代入(&pos,#文字位置([電話番号]),"-") ,#代入(&tel1,#部分列([電話番号],1,&pos-1)) ,#代入(&tel,#部分列([電話番号],&pos+1) ,&tel1 ) ・市内局番 #計算(#代入(&pos,#文字位置(&tel),"-") ,#代入(&tel1,#部分列(&tel,1,&pos-1)) ,#代入(&tel,#部分列(&tel,&pos+1) ,&tel1 ) ・加入者番号(次のどの計算式でも同じ) #右側文字列(&tel,4) または #部分列(&tel,2) または #文字置換(&tel,"-","") なお、3つのオブジェクトは、左上位置の高さがきちんと合わせてあり、 オブジェクトリストでこの順に並んでいる事を確認して下さい。 オブジェクトリストの順と位置がずれていると、異なる結果になるおそれがあります。 ●上記の考え方 まず[電話番号]の先頭のハイフォンの位置を見つけます。 この1つ手前までの文字列を取り出して、&tel1にひとまず代入します。 この値が印刷する値です。 次にハイフォンの後ろを&telに代入します。これは次の処理に使う値です。 最後に&tel1を呼び出してこの値をテキストオブジェクトの値とします。 一連の計算を行うために、「#計算」関数を使っています。 同様にして、市内局番も処理を行います。 ●しかしながら 市外局番、市内局番、加入者番号の3つを縦に並べるなら解りますが、 横に並べて印刷するのであると、3つのオブジェクトに分ける必要があるのでしょうか。 文字数は決まっていませんから、仮に枠を作っても、巧く収まるかどうかですね。 単にハイフォンをスペースに置換して印刷するだけで目的を達する様な気もしますが。 佐田守弘(KS-00119) | |||
24005 | Re:電話番号の部分列について | MIT | 2003/12/23-12:22 |
記事番号23997へのコメント katsuyoshiさん 「123-456-789」が項目[電話番号]で (区切り文字として「-」は必ず入っていると仮定して) 以下の4項目を該当の表に追加します。 1.[市街局番]の項目を表に作って計算式に #部分列([電話番号],1,#文字位置([電話番号],"-")-1) を設定します。ここには「123」が入ります。 2.[電話番号2]の項目を表に作って計算式に #部分列([電話番号],#文字数([市街局番])+1) を設定します。ここには「456-789」が入ります。 3.[局番]の項目を表に作って計算式に #部分列([電話番号2],1,#文字位置([電話番号2],"-")-1) を設定します。ここには「456」が入ります。 4.[番号]の項目を表に作って計算式に #部分列([電話番号2],#文字数([局番])+1) を設定します。ここには「789」が入ります。 以上ですが、要するに区切り記号「-」で2分割するのは簡単なので 途中に[電話番号2]を設けて計算は2分割になるようにしたものです。 もっと多くの分割を必要とするケースでも応用できるかと思います。 宅配用紙など指定用紙では手書きのために「-」が印刷されており 佐田先生のおっしゃる「-」をスペースで置換でも印字としては 十分かと思いますが、印字位置をきれいに合わせたい時は電話番号が 分かれていると確かに位置合わせがやり易いですね。 ところで、これまでのデータは上記の方法で3分割できますので、 3分割後に計算式を削除して今後は入力も3分割に変更してしまうのも 良いかも知れません。 その理由は電話番号の「-」位置は変更される場合があるためです。 印刷などのために3分割で保存しておいて、更に検索項目として [市街局番]+[局番]+[番号]を計算式とした項目を追加しておくと 「-」位置が変わっても検索できます。 以上ご参考まで。MIT | |||
24006 | Re:電話番号の部分列について | 今村 誠 | 2003/12/23-13:09 |
記事番号23997へのコメント katsuyoshiさんこんにちは 私の場合ヤマト運輸などでは3つに分割しています。 レポートの2番目の箱には #計算(#代入(&STR,[電話]), #代入(&STR, #S(#S(#S(#S(#S(#S( #trim(#半角(&STR),3) ," ",",") ,"(",",") ,")",",") ,"ー",",") ,"−",",") ,"-",",")), #代入(&STR,#COND( #L(&STR)-#L(#S(&STR,",",""))<>2, #S(&STR,",",""), 1,&STR)), #COND(#L(&STR)<9,"", #文字位置(&STR,",")<1, #S(#SSTR(&STR,#切り上げ((#l(&STR)-4)/2,0)+1),#last(&STR,4),""), 1,#対応文字列(&STR,2))) 1番目は後ろの2行を #SSTR(&STR,1,#切り上げ((#l(&STR)-4)/2,0), 1,#対応文字列(&STR,1))) 3番目は #last(&STR,4), 1,#対応文字列(&STR,3))) にしています。 入力の区切りがスペースでない場合は途中の#trimの引数を 4にすると空白がなくなります。 検索では(‐)ハイフン等の区切り文字を省いた計算項目を 作成してそこを検索します。 3つに分けると検索しにくいと思います。 また重複したデータの確認をするためにもハイフン(区切り) 無しの項目はあった方が便利いいと思います。 | |||
24007 | Re:電話番号の部分列について | うにん | 2003/12/23-14:38 |
記事番号23997へのコメント >#部分列で文字分割ができますが郵便番号のように >各オブジェクトの桁数(文字数)が不定のため >うまく区切ることができません。 >よい方法を教えてください。 「郵便番号のように」でなく「郵便番号と違って」ですよね:-) (さもなくば、「一定ではないため」) それはさておき、#対応文字列を使うとすっきりします。 #対応文字列(#文字置換([電話番号],"-",","),1) #対応文字列(#文字置換([電話番号],"-",","),2) #対応文字列(#文字置換([電話番号],"-",","),3) | |||
24009 | Re:電話番号の部分列について | katsuyoshi | 2003/12/23-21:16 |
記事番号23997へのコメント 大原さん、佐田さん、MITさん、今村さん、うにんさん ありがとうございました。 一つの結果を得るためにいくつもの方法があるんだなぁー と改めて教えて頂きました。 今回はうにんさんの方法でレポートを作成したいと思います。 皆さんが言っておられるように検索をすることも考えなければ と思い検索用に別項目を作成したいと思います。 うにんさん >「郵便番号のように」でなく「郵便番号と違って」ですよね:-) >(さもなくば、「一定ではないため」) その通りです。仕事が休みで頭がまだ寝ていたようです。 これからもよろしくお願いします。 別質問がありますのでそちらもよろしくお願いします。 | |||
24014 | Re:電話番号の部分列について | 通りすがり | 2003/12/23-23:09 |
記事番号24009へのコメント >一つの結果を得るためにいくつもの方法があるんだなぁー >今回はうにんさんの方法でレポートを作成したいと思います。 うにんさんの方法も今村さんの方法も基本的には同じ手法です。 「-」を「,」へ変換し、#対応文字列 を使うのですが・・・・。 今村さんのは、区切りの「-」が「ー」や「()」にも対応しており、誤って空白を 入れてある場合にも対応しているんじゃないかな? 012-345-6789 012(345)6789 012ー345ー4789 012−345−6789 いろんな値が入力してある場合が想定されますから。 まあ、元のデータがきちんと生理整頓されていれば、うにんさんのようにすっきりとした書き方になります。 (確実に区切りが「-」だけであり、必ず「-」が2つあり、 かつ、データに「数字以外」が含まれない場合) いずれにせよ、元データがしっかりと管理されていなければなりませんね。 |