プロが教える店舗&オフィスのセキュリティ対策術

「Windowsのイベントビューから指定日時の0時から終日までのログを
取り出し、メールに送付して送信するバッチツール」を開発したいです。

VS2013を使っています。

そこで
下記のコードを見ていただきたいのですが
「xml形式でイベントビューのログをフィルタリングする処理」を書いています。
この部分を「外だしにしてツールとしての汎用性を高めたい」です。
xmlファイルを外だしにすることはできたのですが
dt.AddDays(-1).ToStringやdt.ToStringなどC#でシステムの時間を入手してますよね?
この部分をパラメータで外だしにしたxmlに渡したいです。
しかし、調べてみても私の基礎知識の乏しさからか目的の処理を施す方法が見つかりません。
xmlschemaを使うだとかXdocumenntを使うだとかXelementを使うだとか
情報は多いのですが
どの方面にフォーカスして調べていけばいいのかわからないのが現状です。
つたない説明で申し訳ないのですがヒントになるようなものでも
なにか教えていただけないでしょうか。
これが質問①です。

//QueryStringを指定する。QueryStringのフォーマットはXML形式で
//指定日付の0時0分0秒から23時59分59秒までのイベントをフィルタリングします。
DateTime dt = DateTime.Now

string queryString="<QueryList>"
+"<Query Id=\"0\" Path=\"System\">"
+ "<Select Path=\"System\">*[System[(Level=1 or Level=2 or Level=3) and TimeCreated[@SystemTime&gt;='"
+dt.AddDays(-1).ToString("yyyy-MM-dd")
+"T15:00:00.000Z' and @SystemTime&lt;='"
+dt.ToString("yyyy-MM-dd")+"T14:59:59.999Z']]]</Select>"
+"</Query>"
+"</QueryList>";

もう一つお聞きしたいことがあります。
それは「取得したログの中から除外ワードを含むものを除外させる処理」
をする際のコードについてです。
INIファイルに除外ワードを用意して
そこから除外ワードを取得してそれを含むログを除外したいのですが
その方法についても調べ途中ではありますが未だ有効な情報を発見し
活用できていません。
INIファイルを使用しなくても上記の処理ができればxmlファイルでも
かまいません
これについても何かヒントを頂ければと思います。
これが質問②です。

もう丸二日探しつ続けていますが
調べても調べてもわからないことに自分自身呆れますし焦ります
その原因として
わかる人にはわかる情報をキャッチできていないことにあるのではと
感じています
検索し、ヒットしている有用な情報に気付けずスルーしている気がします。
知りたいことを自力で調べる力は経験と馴れで身に着けるしかないと
周りにはアドバイスされますが、早く使える人材になりたくて焦ってしまいます。
(私は入社約3か月目の新社会人です)
調べればわかるだろと思われるような質問を忙しく働いている人に
聞くことはしたくありませんし
何事もできるだけ自分の力で解決したいと思っています。
また、システム開発の仕事としては常に調べながら情報を得ながら
この先も進めていくことになるでしょう。
よって、ほしい情報を調べて活用していく技術は必須と考えます。
この技術をはやく身に着けるために
なにかできることはないでしょうか?
これが質問③です。

長くなりましたが、この3つの質問に関して
ご意見・ご回答をよろしくお願いいたします。
また、質問の内容として抜けている情報があれば
補足いたしますのでお教えください。

質問者からの補足コメント

  • うーん・・・

    >String.Formatの書式で書いて{0}には開始日時が入ると決めておけば、
    >String.Format(XMLの内容, 開始日時,...)なんて方法が使えます。
    >いろんな内容を置き換えるものに「テンプレートエンジン」というのもあります

    利用例まで挙げていただいて大変ありがたいです
    String.Format や「テンプレートエンジン」について
    調べてみましたが@ITのページで「テンプレートエンジン」の
    使い方についての記事を見つけ、自分がやりたいことに近いか又は同じことを
    できそうな気がしてきました。この方向で調べ進め理解を深めたうえで
    利用してみようと思います。

    No.1の回答に寄せられた補足コメントです。 補足日時:2015/07/06 12:33
  • うーん・・・

    >※ ここで、特定のタグの中だけ変更対象にしたい、という場合に、XMLの構造解析や要素の抽出等>を行うのが、XDocument等の使い方です。

    ありがとうございます、XDocumentについても
    頂いたヒントを参考にもう一度理解しようと挑戦してみます。

    (2)についてはkmee様のご回答のように
    処理を細分化しまさにおっしゃる通りの工程に分けて考えて
    調べ進めていたのです。そんなに難しいことではなさそうだとも感じていました。
    しかし、実際はINIファイルから文字を一つ取得することはできましたが
    除外キーワードは複数必要なため、それをどう実現するかに
    つまずきました。
    >「対象文字列に、検索文字列が含まれているかどうかを調べる」
    を含めた以降の処理はそれを解決してからと思っていますが
    未だにこの段階に進めずにいます。
    自分でも簡単なことを無駄に時間をかけてしまっている気がします。

      補足日時:2015/07/06 12:34
  • うれしい

    >(3)ですが。
    >勘と経験もあります。
    >ですが、(1)(2)を考えると「何を探したらいいのか考えないまま、漠然と探している」のではないで>しょうか?

    この言葉は大げさなと思われるかもしれませんが鐘のように頭に響きました。
    私自身では「何をしたらいいのかわからないまま、漠然と探している」と
    思ってはいましたが
    もっとこの部分について考えるべきだと感じました。


    正直に申しますと霧が晴れたわけではありませんが
    あらたな推進力を得ることはできたと感じています。
    長くなりましたが
    丁寧にご回答いただきましたkmee様に
    感謝申し上げます。ありがとうございました。

      補足日時:2015/07/06 12:40

A 回答 (1件)

大抵の場合、「やりたい事」がそのまま見つかることはありません。


ですから、やりたい事が「自分が知っている方法で」どうやったらできるか、を考えます。
そうして、どうしてもそれだけではできない部分を調べます。

このためには「問題を分析する」ことが大切です。

今回ので言えば、 XMLとかを考えなければ

@SystemTime&gt;='XXXX' and @SystemTime&lt;='ZZZZ'
のXXXXとZZZZを日付の文字列に置き換える

だけです。「文字列の置き換え」なんていくらでも方法が見つかります。
String.Formatの書式で書いて{0}には開始日時が入ると決めておけば、 String.Format(XMLの内容, 開始日時,...)なんて方法が使えます。
いろんな内容を置き換えるものに「テンプレートエンジン」というのもあります。

※ ここで、特定のタグの中だけ変更対象にしたい、という場合に、XMLの構造解析や要素の抽出等を行うのが、XDocument等の使い方です。



(2)も同じように、問題を分割することです。
「INI等に除外ワードを書いて、それを読み込む」
というプログラムは簡単ですよね?
「対象文字列に、検索文字列が含まれているかどうかを調べる」
というプログラムも簡単ですよね?
これらがわかれば
「対象文字列に、『除外ワード』が含まれているかどうか調べる」を全部の除外ワードについて繰り返して、1つでも含まれていたら除外
というプログラムは、簡単なものをちょっと組合せただけの簡単なプログラムになります。



(3)ですが。
勘と経験もあります。
ですが、(1)(2)を考えると「何を探したらいいのか考えないまま、漠然と探している」のではないでしょうか?
この回答への補足あり
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

>大抵の場合、「やりたい事」がそのまま見つかることはありません。
>ですから、やりたい事が「自分が知っている方法で」どうやったらできるか、を考えます。
>そうして、どうしてもそれだけではできない部分を調べます。
>このためには「問題を分析する」ことが大切です。

やはりそうですよね、問題の解決に行き詰ったときには
なぜ難しいのか? → どのように対策するのか?
を考えるべきだと思い
今朝は自分が相対しているツール作成の作業を細分化して
どこに自分が障害を感じているのかをもう一度洗いなおすつもりでした。
そしてkmee様の回答を頂いていたことに気づいたのですが
まず自分の方向としては悪くなかったのだと思えました。
今までは(と言ってもここ数日ですが)
「自分が知っている方法で」については自身の蓄積の浅さから
なにも考え付くものがなく
上司の「パラメータを使ってなんとかする方法があったはず」
ということばを「自分が知っている方法」として調べる方向でした。


>今回ので言えば、 XMLとかを考えなければ
>@SystemTime&gt;='XXXX' and @SystemTime&lt;='ZZZZ'
>のXXXXとZZZZを日付の文字列に置き換える
>だけです。「文字列の置き換え」なんていくらでも方法が見つかります

今回の例で問題の分析方法まで丁寧にあげていただいて
ありがとうございます。
そこまでは単純化して考えることが出来ていたのですが
問題意識としては「外だし」にしたコードの文字列の一部を置き換えるという
部分に障害を感じていました。
このことについては私が変に難しく考えてしまっているのでしょうか?
(私はこの業界で将来的にSEとして働くことを目的として就職し採用されましたが
文系大学出身でありプログラミングはまったくの未経験です
そのため前提としてシステム開発における問題の着眼点が見当違いの可能性があります)

文字数制限に引っかかりましたので続きは補足に述べさせていただきます

お礼日時:2015/07/06 12:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!