当ブログに掲載しているサンプルは、すべて利用者の自己責任という形でお願いします。
ただし、明らかな不具合がある場合、ご連絡いただければ、訂正記事を出します。
また、こちらのサンプルは、別のサイト等への公開、転載は一切禁止しています。
どうしてもと言う場合は、筆者にあらかじめご連絡ください。

テクてく Lotus 技術者 Slack に参加しよう!

2014年12月22日月曜日

特定の文字の出現回数を数えるには?

おはようございます。
12月も下旬になり、もうすぐクリスマスですね。あ、その前に明日は「天皇誕生日」で休日です。
こっちもお祝いしましょうね(私は何もしないのですが・・・)
さて、クリスマスというと
https://twitter.com/guylocke/status/540505164482752512
で書いたように、XPages関連のブログを書きますということになってますが・・・
今日、この時点で全くのノーアイディアです。
さて、かけるんでしょうか・・・かけたら褒めてくれていいですよ(笑)


では、今日も本題に入る前に、
にほんブログ村 IT技術ブログへ
をクリックしてくださいね。


上に書いたようにXPagesネタがまるっきり思いついていませんので、今日もLotusScriptネタです。

今日は今までに紹介した関数を使って、違う事をやってみます。
文字列中に、特定の文字が何回出現したのかを数えてみるというものです。

PHPだと「substr_count」という関数があるようで、簡単に取得できますがLotusScriptや@関数にはこのような機能を備えたものはありません。
他の方法を考えましょう。

考えたけど分かりません・・・ここはGoogle先生に聞いてみましょう。
「特定の文字を数える」で検索したところ、
Excelでの方法が出てきました。

どうやら、SUBSTITUTEという関数を使って、検索したい文字を""に変換して、変換前後の文字列長の差でカウントしているようです。
ふむふむ、なるほど・・・

SUBSTITUTEなどという関数はLotusScriptにはありませんね。しかし、同じような機能を持つ関数はありますね。
@関数なら@ReplaceSubString関数や、@Replace関数、
LotusScriptならReplace関数ですね。


今回はLotusScriptで実現してみようと思うので、Replace関数を使ってやってみましょう。
Sub Click(Source As Button)
    Dim inData  As     String
    Dim outData As     String
    Dim inLen   As     Long
    Dim outLen  As     Long
    Dim srchStr As     String    '検索対象文字
   
    srchStr   = ";"
    inData  = "aaaaa;bbbbb;cc;;ddddd;eeeee;ff"
    outData = Replace( inData, srchStr, "", , , 5 )
    inLen   = Lenbp( inData )
    outLen  = Lenbp( outData )
   
    Msgbox "改行数は" & Cstr( inLen - outLen ) & "です。"
End Sub

8行目は検索対象の文字です。
9行目が元のデータです。
10行目のReplace関数で、元データから検索対象の文字を""に置換してoutDataという変数に格納しています。

11,12行目は置換前後の文字列の文字数を数えて格納しています。
14行目で置換前の文字数から置換後の文字数を引いた結果を表示しています。

これにより、検索対象の文字がいくつあったのかが分かるようになっています。


応用すれば色々なことができそうなので、是非改良してみてください。

では、今日はこの辺で…




【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】
単純なDBのカスタマイズから他アプリケーションとの連携までご要望にお応えします!
Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ


0 件のコメント: