プロセルピナ
Top Internet
Mail
Private
Proxy
Capture
Device
Download Config
and
Words
Online
Help
Online
Home
[BACK]
Top > Mail > Filtering > Example


メールフィルタで使用する擬似配列の使用例 Mail Filter



メールフィルタの擬似配列には数値を格納する Int[ ] と、 文字列を格納する Str[ ] が用意されています。
数値変数Stateが メール毎に0クリアされるのに対し、 Int[ ]Str[ ]はクリアされずに残ります。
擬似配列がクリアされるのは、フィルタリングを開始した時だけです。


例として メールフィルタのサンプルとして用意されている「CountMail.txt」の内容を示します。


Note】このような擬似変数を使ったフィルタの作成は フィルタエディタのボタン操作だけでは作成できません。 フィルタエディタ上部にあるテキストエリアで直接編集する必要があります。

 
フィルタの説明

このフィルタは、メールのFromヘッダに記載されていたアドレス毎にメールをカウントし、最後に結果を表示するものです。
最初にInt[2]に10を設定しているのは、Int[0]~Int[9]をワークの変数に使い、 Int[10]以降を統計用に使用する為です。 Int[2]は統計エリアのインデックスに使用しています。

initiallyセクション直後のコマンド行 「* Int[0]=Str(From).Index」は、Int[0]の変数に、 文字列配列Str[ ]の何番目に From が格納されているかを設定します。
このFromはメールのアドレス(aaa@example.com など)を意味するメタ定義です (文字列 From そのものをStr[ ]から探しているのではありません)。

補足すると、 文字列 "From" そのものをStr[ ]配列から探す場合は "記号 で文字列を囲み、
  *  Int[0]=Str("From").Index
と表記する必要があります。

最初はメールのアドレスがStr[ ]配列に設定されていないので、Int[0]には負値が設定されます。 次行の「if Int[0]<0 jump:NewAdd」で、Int[0]が負値だった場合にはラベルNewAddにジャンプしています。

Int[0]が負値でない場合は、Int[0]には10以上の値が設定されていて、これが統計エリアのインデックスになります。
変数のインデックスは入れ子にすることができます。 例えば変数 Int[0] の値が 10 だった場合、 「* Int[Int[0]]+=1」のコマンドは、「* Int[10]+=1」と同じ意味になります。

結果は finallyセクションで表示しています。
Int[10]以降に格納された値を、ジャンプラベルによるループで表示しています。 Str[10]のメールアドレスから来たメールの数は Int[10]に格納されています。
終端はStr[ ]に格納された文字列が空になった(文字列長が0)かどうかで判定しています。

[BACK]
プロセルピナ