IT仕事 MS Access

AccessとBASP21で正規表現を使ってメール文から必要事項を取り出すサンプル

投稿日:2017年4月13日 更新日:

Accessで正規表現を使いたかったのですが、ネット上にはサンプルが少なく、苦労したので、とりあえずツギハギで作った私のコードを披露したいと思います。

Accessで正規表現を使うには、BASP21を使う方法と、RegExpを使う方法がありますが、自分の場合、メール送信にBASP21を使わせていただいているので、まずは、こんな感じでBASP21の正規表現を使えないか、テストしてみました。

[code]
Public Sub test99()
Set bobj = CreateObject("basp21")
out = bobj.MatchEx("/あい./k", "あいうえお", 0)
Debug.Print out(2)
End Sub
[/code]

・・・何度やっても取り出せるのは、「あいうえお」の「えお」になり、「う」がどこかに消える。
マニュアルを読んで、Kオプションをつけているのにダメ。
英語だけだとうまくいった。うむむ。

そこで、BASP21を諦め、Accessの参照設定でMS VBScript Regular Expressionsにチェックして、RegExpを使うことにした。

そうして書いてみたコードが下になる。
メールの読み込みにはBASP21を使わせてもらうけども、文字列解析と取り出しにはRegExpを使う。

[code]
Public Sub testReceiv()

Dim bobj, ar
Dim Server As String, User As String, Pass As String, Command As String
Set bobj = CreateObject("basp21") ”BASP21オブジェクト
Server = "xxxx.com" ”POP3サーバー
User = "xxxx" ”アカウント名
Pass = "xxxxx" ”パスワード
Command = "SAVEALL" ”コマンド

bobj.CodePage = 65001 ‘ WebArenaサーバではこれをつけないと文字化けして読めなかった。CPIサーバは不要だった。
ar = bobj.RcvMail(Server, User, Pass, Command, ">c:\temp")
If IsArray(ar) Then
Para = "from:subject:"
For Each Mail In ar
retv = bobj.ReadMail(Mail, Para, Folder)
If Not IsArray(retv) Then
MsgBox "メールの受信に失敗しました"
Else
Debug.Print (0) ”From
Debug.Print retv(1) ”Subject
‘ Debug.Print retv(2) ”Body

‘ BASP21の正規表現ではうまくいかなかった部分
‘ out = bobj.MatchEx("m/HP/k", retv(2), 0)
‘ Debug.Print "* " & out(2)

‘ AccessのRegExpで文字列解析
Set re = CreateObject("VBScript.RegExp")
sPtn1 = "(ご注文番号 : )(.*)"
With re
.Pattern = sPtn1
.Multiline = False ‘一行のみ
.Global = True
Set mc = .Execute(retv(2))
Debug.Print mc.Count ‘カウント
‘ Debug.Print mc(0)
Debug.Print mc(0).SubMatches(0) ‘検索文字
Debug.Print mc(0).SubMatches(1) ‘検索文字の後ろから右端までの文字
End With
End If
Next Mail
Else
MsgBox "新着メールはありません"
End If
Set bobj = Nothing
End Sub
[/code]

「ご注文番号 : 」のところはわかりにくいと思いますが、やりたかったことは、メール文中の「ご注文番号 : 115383」から「115383」だけを取り出そうと思ったら、こうなる。

うまくいって、満足だ。

さて、1.メールの読み出し、2.メール分から必要事項の取り出し、ときて次は、3.テーブルに書き込み、としたいんだけど、それはまた後日に。
読み出し時に、メールを新着分に限定したり、特定のタイトルで絞ったり、返信を除外したり、する必要があるな。
テーブルへの書き込み時に、同一注文番号があれば除外するか上書きするか(注文訂正があった場合など)、選択できるようにしたほうが良いかな。
(などと、面倒そうなので)

-IT仕事, MS Access

執筆者:

関連記事

no image

USBハブ

最近PC(ブラウズ)が遅いなと思っていたが、USBハブを外したとたんに速くなる事を偶然に発見。 なぜ? まあいいや。さてUSBハブは、オークションに。 関連投稿: 迷惑メール joomla 甘さ? P …

no image

楽天RPP広告「ランク別入札最適化」は微妙

最近の楽天のRPP広告、「ランク別入札最適化」をプッシュしているが、これってみんな使っているんだろうか?効果は出ているんだろうか? というのは、うちの店では、効果が出ていない。機能のスイッチをオンにし …

no image

会話のうまい人

結構相手の気を感じ取れる人なんだけど、たまに刺激的な発言をする。 言われた相手も、刺激的な言葉で返してくる。 しかしけんかにはならず、相手の本音が聞き出せたり、会話が弾んだり。 うまいなあ、と思う。 …

no image

瞬NAS

月刊アスキー2005年6月号の記事に、NAS特集。 KNOPPIXを使う方法が述べられていた。 1.KNOPPIXでPCをブート 2.スタートボタン->KNOPPIX->Service->Start …

no image

GoogleChromeの拡張機能を使ってGmailの本文中の文字を簡単に再検索する方法

Gmailの注文メールを開いて、お客様の注文番号や電話番号・メールアドレスをコピペして検索・・・といった操作は、よく使うと思うのですが、ちょっと面倒に思いませんか? GoogleChromeの拡張機能 …