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

メモ

人力検索系検索エンジン http://www.google.com/coop/cse?cx=014964622409527844895%3Avyzxwte8f7e こんなの欲しかった。 最近、「IT仕 …

no image

シャトル

今日で閉店。 WindowsXPが発売された年にオープンしたから、2001年末ごろだったかな。 10年たって店じまい。 お客さんが少なかった。というより、富山の中心商店街の歩行者が少ないので、仕方ない …

no image

会社のサイトを常時SSL化

会社のショッピングサイト2つのうち、1つを常時SSL化の作業に着手。 まずは、こちらのサイトを参考に、.htaccessを修正。301リダイレクトになるパターンがいいみたい。 httpからhttpsに …

no image

近況

最近忙しくて。 日記を書く位の暇はあるのだが、気力が無くて。 明日からも忙しいが、それでも近況をとりあえず、書いておこう。 昨日、セキュアドを受験。 結果はわからないが、とりあえず、終わった。 喜ばし …

no image

米国からのアクセスが多いのは

国      ページ数 United States 18734 Japan     6438 Australia   3827 最近の当サイトのアクセス解析結果。 米国からのアクセスが多いのは、なぜだ …