過去の桐井戸端BBS (桐ver.9)
28696 文字列の中から英数字のみを取り出したい 尾形 2005/01/10-12:10
桐9です。よろしくお願いします
よい方法を教えてください

キャノンプリンタ LBP-1510 (A3機)
↑例えばこのような文字列から英数字のみを取り出す項目計算式って書けますでしょうか

LBP15103
↑希望としては、このような文字を返したいのです


[商品名]と[検索コード]の項目がありまして
[検索コード]に[商品名]の英数字のみを取り出したいと思っています

よろしくお願いします



28697 Re:英数字のみを取り出す 今村 誠 2005/01/10-13:01
記事番号28696へのコメント
尾形さんさんこんにちは
>キャノンプリンタ LBP-1510 (A3機)
>↑例えばこのような文字列から英数字のみを取り出す項目計算式
>って書けますでしょうか
>LBP15103
>↑希望としては、このような文字を返したいのです
>[商品名]と[検索コード]の項目がありまして
>[検索コード]に[商品名]の英数字のみを取り出したいと思っています

思いついた方法は、
1)一括で#is数字とis英字で繰り返し処理
2)作業項目を2つ作り一つは英字無し2つ目は商品名
2)の場合大文字と小文字と全角と半角を計算関数で
多重括弧でくくれば一度に英数字が消えるので残った文字を条件選択で文字数のある分1文字ずつ削除すればいいと思います。
28698 Re:英数字のみを取り出す アックン 2005/01/10-13:06
記事番号28696へのコメント
尾形さん、こんにちは。
商品名に漢字がなければ可能なんですけど。(^^;

例:
#progn( #set( STR , #s(#s(#s(#s([A],"キ",""),"ャ",""),"ノ",""),"ン","") ) , #set( STR , #s(#s(#s(&STR,"-",""),"(",""),")","") ) , &STR )

いったん項目値[A]を字種別に文字置換して &STRに代入してから、
次の字種の処理に渡してやればどうでしょうか。

関数のネストの数を覚えてないので、どこまで通用するかわかりません。(^^;
最初に項目値[A]を関数で全角か半角に変換しておくといいかもしれませんね。
そうすればネストの数を稼げるし、式が短くなるはずです。

>LBP15103
正しくは LBP1510A3 ですよね?

アックン(=^・^=)
28699 Re:英数字のみを取り出す 尾形 2005/01/10-18:27
記事番号28698へのコメント
どうも、ありがとうございます

例はキャノンで書きましたけど
その他色々の名称があります。漢字も含みます

>>LBP15103
>正しくは LBP1510A3 ですよね?
そうです (^^;

項目計算式だけでは、簡単いかないようですね
今村さんの1番の方法で考えてみます

ありがとうございました
28700 Re:英数字のみを取り出す 今村 誠 2005/01/10-18:30
記事番号28696へのコメント
#計算(#代入(&選択ファイル名,#UC2(#半角([商品名]))),#代入(&STR,
#S(#S(#S(#S(#S(#S(#S(#S(#S(#S(
#S(#S(#S(#S(#S(#S(#S(#S(#S(#S(&選択ファイル名,
"A",""),"B",""),"C",""),"D",""),"E",""),
"F",""),"G",""),"H",""),"I",""),"J",""),
"K",""),"L",""),"M",""),"N",""),"O",""),
"P",""),"Q",""),"R",""),"S",""),"T","")),
#SET(STR,#S(#S(#S(#S(#S(#S(#S(#S(#S(#S(
#S(#S(#S(#S(#S(#S(&STR,
"U",""),"V",""),"W",""),"X",""),"Y",""),
"Z",""),"1",""),"2",""),"3",""),"4",""),
"5",""),"6",""),"7",""),"8",""),"9",""),
"0","")),
#代入(&選択ファイル名,#COND(#部分列(&STR,1,1)<>""
,#S(&選択ファイル名,#部分列(&STR,1,1),""),1,&選択ファイル名)),
#代入(&選択ファイル名,#COND(#部分列(&STR,2,1)<>""
,#S(&選択ファイル名,#部分列(&STR,2,1),""),1,&選択ファイル名)),
#代入(&選択ファイル名,#COND(#部分列(&STR,3,1)<>""
,#S(&選択ファイル名,#部分列(&STR,3,1),""),1,&選択ファイル名)),
#代入(&選択ファイル名,#COND(#部分列(&STR,4,1)<>""
,#S(&選択ファイル名,#部分列(&STR,4,1),""),1,&選択ファイル名)),
#代入(&選択ファイル名,#COND(#部分列(&STR,5,1)<>""
,#S(&選択ファイル名,#部分列(&STR,5,1),""),1,&選択ファイル名)),
#代入(&選択ファイル名,#COND(#部分列(&STR,6,1)<>""
,#S(&選択ファイル名,#部分列(&STR,6,1),""),1,&選択ファイル名)),
#代入(&選択ファイル名,#COND(#部分列(&STR,7,1)<>""
,#S(&選択ファイル名,#部分列(&STR,7,1),""),1,&選択ファイル名)),
#代入(&選択ファイル名,#COND(#部分列(&STR,8,1)<>""
,#S(&選択ファイル名,#部分列(&STR,8,1),""),1,&選択ファイル名)),
#代入(&選択ファイル名,#COND(#部分列(&STR,9,1)<>""
,#S(&選択ファイル名,#部分列(&STR,9,1),""),1,&選択ファイル名)),
#代入(&選択ファイル名,#COND(#部分列(&STR,10,1)<>""
,#S(&選択ファイル名,#部分列(&STR,10,1),""),1,&選択ファイル名)))
28701 Re:英数字のみを取り出す 今村 誠 2005/01/10-18:50
記事番号28700へのコメント
尾形さんこんにちは、条件式の

#COND(#部分列(&STR,10,1)<>""



#COND(#L(&STR)>9

の方が少し短くなるのでこちらがお薦めです。
最初は20文字までのをアップしたら記事エラーとなったので
文字数を1280文字に変更しました。
後は尾形さんが40文字くらいまで拡大されたらいいと思います。

28702 Re:英数字のみを取り出す 尾形 2005/01/10-21:23
記事番号28701へのコメント
今村さん、どうもありがとうございます
長い計算式をどうもありがとうございました

これだけ複雑な式はどうも好みませんので
繰り返し処理でイベントでゴリゴリやります

28703 Re:英数字のみを取り出す 今村 誠 2005/01/11-11:48
記事番号28696へのコメント
他には
#計算(#代入(&STR,[商品名]),
#代入(&STR,#文字列反転(
#COND(#IS英字(&STR,0)>0 .or #IS数字(&STR,0)>0,
#SSTR(&STR,#小(#IS英字(&STR+"A",0),#IS数字(&STR+"1",0)))))),
#代入(&STR,#文字列反転(#COND(&STR<>"",
#trim(#S(#S(#S(#S(#S(
#SSTR(&STR,#小(#IS英字(&STR+"A",0),#IS数字(&STR+"1",0)))
,"(",""),")",""),"(",""),")",""),"-",""),4)))))
連続している英数字が一カ所だけならという条件付きですが
28704 Re:英数字のみを取り出す うにん 2005/01/11-12:53
記事番号28696へのコメント

>キャノンプリンタ LBP-1510 (A3機)
>↑例えばこのような文字列から英数字のみを取り出す項目計算式
>って書けますでしょうか

ファイルメーカー7だとfilter関数で一発なんですが。。。
「Filter ( "(408)555-1212" ; "0123456789" ) は、「4085551212」を返します。」

数字だけでよければ#数字でいいんですけどね。(−と小数点も残りますが)

戻る