• 締切済み

VBSで繰り返し情報の取得

BASP21で受信したメールを整形してデータベースへ取り込もうと考えています。 最初の情報は取り込むことができたのですが、次の情報を取り込むことができません。 どのようにしたらよいでしょうか。 届くメールの内容は以下のようになっています。 ---------------- From: メールサーバー To: 監視サーバー Subject: =監視状況 This is a multi-part message in MIME format. Content-Type: text/plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit 123サーバーのCPU使用率が10%上昇しました。 プロセス: ABCDaemon 日時: 2009/06/22 09:05:55 状況: 影響なし。 --------------------------------------------------- 345サーバーのCPU使用率が40%上昇しました。 プロセス:ServD 日時: 2009/06/22 09:05:55 状況: プロセスダウンしました。 ------hogehoge@smtp.hoge.co.jp-- このメールのサブジェクトやアドレス、メール本文の最初の情報(ここでは、123サーバーの~という4行です)は取得できました。 しかし、次の情報の(345サーバーの~)は取得できませんでした。 どのようにしたら取得できるようになるでしょうか。 なお、このメールで届く情報はひとつ以上であり、ひとつのメール内に複数の情報が入る場合があります。 もしおわかりになる方がいらっしゃいましたら、ご教示いただきたく存じます。 足りない情報は都度補足いたします。 よろしくお願いします。

みんなの回答

  • prophetok
  • ベストアンサー率44% (13/29)
回答No.2

VBはほとんど経験がないので、的外れかもしれませんが・・ RegExExec  とはパターンマッチングのプロシージャですか? 返値にマッチした箇所の数を返すのであれば(これが違っていたら以下は全くの嘘) 下記のコードで、質問の例の場合2 or 6を返しますよね。      If RegExExec(strMAIL_DATA," (.+)サーバーの(.+)使用率が(.+)上昇しました。",aryMATCH) > 0 Then       strSRV = aryMATCH(0)       strUSE = aryMATCH(1)       strRATE = aryMATCH(2)      End If VBの構文はまったく覚えていないので、javaっぽく書きます。 VBの構文に置き換えて試してみてください。 int match_no = RegExExec(strMAIL_DATA," (.+)サーバーの(.+)使用率が(.+)上昇しました。",aryMATCH); if( match_no > 0 ) { match_no/=3;//質問の例で6を返す場合、2なら不要 for( int i = 0; i < match_no; i++) { strSRV[i] = aryMATCH[i*3]; strUSE[i] = aryMATCH[i*3+1); strRATE[i] = aryMATCH[i*3+2]; } } 他の、マッチング処理部分も同様。 後はDB書き込みの部分も配列に対応させる。

  • prophetok
  • ベストアンサー率44% (13/29)
回答No.1

頭の4行しか取得しないようなプログラムになっているんじゃないの? 取得している部分のソースを開示しないと、コメントのしようがないよ。

kumoi828
質問者

補足

申し訳ございません。 確かに最初の4行しか取れないプログラムであるというのは理解しています。 最初の4行の情報取得後、連続して繰り返し4行ずつ取得してデータベースへ情報を取り込む方法がわかりません。 取り込む部分のソースを記載しますので、ご確認お願いします。 Sub MailProc(strMAIL_FILEin) Dim aryMAIL_DATA Dim strMAIL_DATA Dim aryMATCH Dim strRECVDATE Dim strRECVTIME Dim strFROMADDR Dim strDATA_TYPE Dim strTYPE Dim strDATE Dim strTIME Dim strSENTSERVER Dim strSRV Dim strUSE Dim strRATE Dim strPROCESS Dim strPSTATUS Dim strRSTATUS Dim intPSTATUS Dim intRSTATUS Dim strTMPSTATUS Dim strEXCLUDE Dim intEXCLUDE aryMAIL_DATA = objBASP.ReadMail(strMAIL_FILEin, _ "date:from:subject:",">" & ATTACH_DIR) If IsArray(aryMAIL_DATA) Then  strTYPE = ""  For each strMAIL_DATA in aryMAIL_DATA   ' 各データの種別(From:、To:、Bodyなど)   RegExExec strMAIL_DATA,"^([^\s]+:)",aryMATCH   strDATA_TYPE = aryMATCH(0)   Select Case strDATA_TYPE    ' 日付    Case "Date:"     If RegExExec(strMAIL_DATA,"^Date: ([^\s]+) ([^\s]+)",aryMATCH) > 0 Then      strRECVDATE = aryMATCH(0)      strRECVTIME = aryMATCH(1)     End If    ' 送信元メールアドレス    Case "From:"     If RegExExec(strMAIL_DATA,"^From: ([^\s]+)@.+",aryMATCH) > 0 Then      strSENTSERVER = aryMATCH(0)     End If    ' メールタイトル    Case "Subject:"     If RegExExec(strMAIL_DATA,"^Subject: (警告|標準).+",aryMATCH) > 0 Then      strTYPE = aryMATCH(0)     End If    ' メール本文の処理    Case "Body:"     If strTYPE = "警告" Then      If RegExExec(strMAIL_DATA," (.+)サーバーの(.+)使用率が(.+)上昇しました。",aryMATCH) > 0 Then       strSRV = aryMATCH(0)       strUSE = aryMATCH(1)       strRATE = aryMATCH(2)      End If      ' 確認対象外のプロセスを判断      If RegExExec(strMAIL_DATA,"プロセス:(.+)",aryMATCH) > 0 Then       strPROCESS = aryMATCH(0)       strEXCLUDE = "-"       intEXCLUDE = 0       If InStr(1,strPCFILE,"testd", 1) > 0 Then        strEXCLUDE = "対象外"        intEXCLUDE = 1       End If      End If      If RegExExec(strMAIL_DATA,"日時:\s*(\d+\/\d+\/\d+) (\d+:\d+:\d+)",aryMATCH) > 0 Then       strDATE = aryMATCH(0)       strTIME = aryMATCH(1)      End If      If RegExExec(strMAIL_DATA,"処理:\s*(.+)\r\n",aryMATCH) > 0 Then       'strPSTATUS = "-"       'intPSTATUS = 0       strTMPSTATUS = aryMATCH(0)       If strTMPSTATUS = "影響なし。" Then        strPSTATUS = "影響なし。"        intPSTATUS = 1       End If       If InStr(1,strTMPSTATUS,"プロセスダウンしました。", 1) > 0 Then        strPSTATUS = "プロセスダウン"        intPSTATUS = 2        strRSTATUS = "再ロード失敗"        intRSTATUS = 2       End If       If InStr(1,strTMPSTATUS,"プロセス再ロードしました", 1) > 0 Then        strPSTATUS = "プロセスダウン"        intPSTATUS = 2        strRSTATUS = "最ロード成功"        intRSTATUS = 1       End If      End If    Case Else   End Select  Next  ' 検出結果の出力  If strTYPE <> "" Then    WScript.Echo strSENTSERVER & vbTab & Mid(strRECVDATE,1,4) & vbTab & Mid(strRECVDATE,6,2) & vbTab & Mid(strRECVDATE,9,2) & vbTab & strRECVTIME & vbTab & strSRV & vbTab & strUSE & vbTab & strRATE & vbTab & strPROCESS & vbTab & strDATE & " " & strTIME & vbTab & strPSTATUS & vbTab & strRSTATUS & vbTab & vbTab & strEXCLUDE & vbTab & strTYPE  End If End if End Sub

関連するQ&A

  • VB6でネットワークコンピュータのプロセス情報を取得したい

    VB6で、ネットワーク上の他のマシンのプロセス情報(プロセス名、CPU時間、CPU使用率等)の情報を取得したいのでプログラミング方法をご教授願います。よろしくお願いします。難しければローカルマシンの情報取得方法でも構いません。 WINDOWS:OSはXP(SP2)です。 よろしくお願いします。 以上

  • プロセスの情報取得

    vb.netで開発しています。 あるexe(仮にwatch_p.exeとします)のプロセスの情報(CPU時間)を取得し、一定時間以上(30分以上)だった場合強制終了するプログラムを作成しようとしています。 以下のようにCPU時間の取得する方法までは見えていますが、取得した 時間を比較する方法が見えていません。 忙しいことと思いますが、回答をお願いします。 Dim ps As System.Diagnostics.Process() = _ System.Diagnostics.Process.GetProcesses() '配列から1つずつ取り出す Dim p As System.Diagnostics.Process For Each p In ps Try If p.ProcessName="watch_p" then '合計プロセッサ時間 Console.WriteLine(p.TotalProcessorTime) End if Catch End Try Next p

  • プロセス監視

    はじめまして。 シェルスクリプトについて質問があります。 現在、以下のような内容のスクリプトを考えております。 ===================== プロセスを監視して、CPU使用率が70%以上で、なおかつメモリ使用率が 80%を超えたプロセスがあった場合、[プロセス名・PID・CPU使用率・メモリ使用率]を本文にしたメール送信する。 ===================== いろいろと模索しているのですが、うまく組むことが出来ないでいます。 皆様でしたら、どのように組みますでしょうか? ご教示下さい。

  • WindowsXPのMIBの取得

    WindowsXPのCPU使用率、Memory使用率、Network使用率を監視するために、MIBの値を取得したいのですが、うまくいきません。 ツール Getif 2.3.1 を用いて、いろいろ試しているのですが。。。 .iso.org.dod.internet.private.enterprises.wtcs.informant.standard.processorTable.processorEntry.cpuPercentProcessorTime がCPU使用率なのですか? でも Start ボタンを押すと、3つ出てきます。 どれが正しい cpu使用率なのかが分かりません。 どなたか知っている方がいらっしゃいましたら、教えてください。 よろしくお願いいたします。

  • メールフォームの訪問者情報取得について

    ある会員専用サイトをつくってます。 こんな事を考えているのですが、うまく行きません。 (1)メールフォームから名前・メールアドレスを入力しを送信。 (2)送信を押すと名前・アドレスなどと一緒に以下の情報を取得 ●IPアドレス ※$ENV{'REMOTE_HOST'}) ●OS・ブラウザ情報※$ENV{'HTTP_USER_AGENT'} ●携帯識別番号(携帯会社別) (3)上記の情報より、 LパソコンでアクセスするとIPアドレスをチェックし会員を判別 L携帯電話からだと携帯識別番号で判別 といった仕組みをつくろうと思っています。 メールフォームは自力では無いですが、オープンソースを使用し作成しました。 ※Copyright (C) 1996-2005 杜甫々 様 とほほのWWW入門>メール送信フォーム より $ENV{●●●}を組み込めば入力情報と同時に取得できると思ったのですが、うまく取れません。 十分に理解せず他人様のソースを安易に利用しようとする私が悪い事は多分に承知しておりますが、何卒ご教授お願いします。 ---以下ソース--- #!/usr/local/bin/perl #セッティング require 'cgi-lib.pl'; require 'jcode.pl'; &ReadParse(*in); $name = "$in{'name'}"; $from = "$in{'from'}"; $subject = "$in{'subject'}"; $body = "$in{'body'}"; $to = '●●●@●●.ne.jp'; #送信前処理 &jcode'convert(*name,'jis'); &jcode'convert(*subject,'jis'); &jcode'convert(*body,'jis'); #sendmail open(MAIL, "| /usr/sbin/sendmail -t"); print MAIL "To: $to\n"; print MAIL "From: $from\n"; print MAIL "Subject: $subject\n"; print MAIL "Content-Type: text/plain;\n\n"; print MAIL "お名前:$name\n"; print MAIL "本文:$body\n"; close(MAIL); #HTML表示の前処理 &jcode'convert(*name,'sjis'); &jcode'convert(*subject,'sjis'); &jcode'convert(*body,'sjis'); $body =~ s/[\r\n,\n]/<BR>/g; #HTMLに表示 print "Content-type: text/html\n\n"; print "<HTML><BODY>\n"; print "以下のメールを送信しました<HR>"; print "お名前:$name\n<BR>"; print "メールアドレス:$from\n<BR>"; print "題目:$subject\n<BR>"; print "本文:$body\n<BR>"; print "</BODY></HTML>\n"; exit;

    • ベストアンサー
    • Perl
  • solarisのSNMPについて

    現在solaris上でCPU使用率、ディスク使用率、メモリ使用率、対象プロセスが立ち上がっているかをSNMPで監視しようと思っているのですが、solarisにデフォルトで入っているsnmpdxというエージェントは古いのか資料があまりありません。ネット等で調べるとNet-snmpをインストールするやり方はよく載っているのですが、現在稼動中のサーバなので新規にソフトをインストールするのは抵抗があり、できればsolarisにデフォルトで入っているSNMPエージェントを構築したいと考えております。 上記4つを監視するためにsolaris上で使っているMIBのOIDや閾値の設定などどんな情報でも構いません。 どなたか教えてください。どうかよろしくお願いします。

  • JBOSSまたはJVM用のメモリ診断ツールを教えてください

    また書き込ませて頂きます。 今、JBOSSサーバを使ってシステム構築をしているのですが、その システムの基本的な情報(メモリ占有率やCPU使用率、どういうプロセスが稼動しているか) を収集しろという課題が出て、診断ツールを探しているのですが どなたか、簡単に使えてパフォーマンスが良いものがあればご教授ください。 ちなみに、エクリプスプラグインのTPTPというツールを試してみましたが、これは JUNITテスト実行時や、JAVAアプリケーション実行時にしか使えない (そう思い込んでいるだけでしたら指摘してください。。。) ため、単体のモジュールの監視には適しても、システム全体の監視は できないため、システムの監視ツールがあれば教えてください。 よろしくお願いいたします。

  • iPhone写真情報の取得

    iPhoneで撮影した画像をWindowsパソコンでMail受信しパソコンに保存するとファイル情報として 保存日しか分からないのですが、何かアプリ(フリー)を使用して撮影日時とかGPS情報を取得 出来ますか? iPhoneは昨年3月頃購入したモデルと聞いてます。 宜しくお願いします。

  • タスクマネージャ一覧の取得方法について

    対象OSがWindowsサーバ複数だった為、どこのカテゴリに投稿すればいいかわからず間違えていたらすみません。 Windowsのタスクマネージャの情報を定期的にログなどに採取したいと考えております。 対象OSは、Windows2000,2003,XPx64 の3台です。 2003とXPは"tasklist"コマンドで実行時のタスクマネージャの情報は採取できますが、2000に関しては、"tasklist"ではなく、"tlist"コマンドしか使えない様でtasklistに比べて実行した結果も違い、プロセス名やPIDぐらいしか取ることができませんでした。 今回必要な情報は、プロセス単位でCPU使用率とメモリ使用率(可能であれば不可の高い順TOP20だけ表示など)をどれぐらい使用していたかを知りたく思っています。 ですが、tasklistもtlistもCPU使用率までは結果として出してくれない様で困っています。 batで作成するとなるとやはり無理があると思いまして・・・。 なにかいい案などがあればご教授いただけないでしょうか。

  • pppoeのCPU使用率について。

    自宅でサーバーを運営しています。 サーバーを再起動したところ、 pppoeのCPU利用率が異常に跳ね上がる現象に遭いました。 /sbin/ifup ppp0 としたあと、TOPコマンドを見ると、 pppoeのプロセスのみ50-80%という異常な利用率が出てきました。 それ以外のプロセスは通常通りです。 使用しているCPUはQ9550(2.4Ghz 4core)です。 いろいろと試しましたが、解決できませんでした。 また、WEBで探しても同じ状況を見つけられませんでした。 よろしくお願いします。