C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: イベントログのイベントログ時間でソートして習得


(過去ログ 94 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■56164 / inTopicNo.1)  イベントログのイベントログ時間でソートして習得
  
□投稿者/ C##### (1回)-(2011/01/02(Sun) 17:09:21)

分類:[C#] 

C#の学習中です。

宜しくお願い致します。

イベントログを習得する際に
System.Diagnostics.EventLog[] logs =
System.Diagnostics.EventLog.GetEventLogs();

foreach (System.Diagnostics.EventLog log in logs)
{

}
で取得するとイベントログの記録された古いものから順に表示されてしまいます。
新しいものからに順番を変えるにはどうしたらいいのでしょうか。

いろいろ試行錯誤しましたが、うまくいきませんんでした。
宜しくお願い致します。

環境は.net3.5です
引用返信 編集キー/
■56165 / inTopicNo.2)  Re[1]: イベントログのイベントログ時間でソートして習得
□投稿者/ επιστημη (2579回)-(2011/01/02(Sun) 17:56:05)
επιστημη さんの Web サイト
> 新しいものからに順番を変えるにはどうしたらいいのでしょうか。

配列のナカミを逆順にしたいのかしら。

class Program {
  public static void Main() {
    int[] ar = { 1, 2, 3, 4, 5};
    System.Array.Reverse(ar); // ←コレで逆順
    foreach ( int item in ar ){
      System.Console.WriteLine(item);
    }
  }
}

引用返信 編集キー/
■56166 / inTopicNo.3)  Re[2]: イベントログのイベントログ時間でソートして習得
□投稿者/ C##### (2回)-(2011/01/02(Sun) 18:12:59)
2011/01/02(Sun) 18:14:18 編集(投稿者)

ご回答有難う御座います。
すみません、配列を逆というか
        StringBuilder sb = new StringBuilder();
foreach (System.Diagnostics.EventLogEntry ee in log.Entries)
{
sb.Append(ee.Message + "\n");
}
イベントログのEventLog.Entriesの中身を日付で降順にしたいです。
たぶんなにもしないと昇順でメッセージが取得したため、逆でいいかもしれませんが、
正しくは日付で降順にしたいです。

おそらく
System.Diagnostics.EventLog[] logs =
System.Diagnostics.EventLog.GetEventLogs();
でいうと
logs.OrderByDescendingでEntri内を並び替えられないのかなと
考えましたが、方法がわかりませんでした。

No56165 (επιστημη さん) に返信
> > 新しいものからに順番を変えるにはどうしたらいいのでしょうか。
>
> 配列のナカミを逆順にしたいのかしら。
>
> class Program {
> public static void Main() {
> int[] ar = { 1, 2, 3, 4, 5};
> System.Array.Reverse(ar); // ←コレで逆順
> foreach ( int item in ar ){
> System.Console.WriteLine(item);
> }
> }
> }
>
引用返信 編集キー/
■56167 / inTopicNo.4)  Re[3]: イベントログのイベントログ時間でソートして習得
□投稿者/ やじゅ (1802回)-(2011/01/02(Sun) 20:06:30)
やじゅ さんの Web サイト
No56166 (C##### さん) に返信
> イベントログのEventLog.Entriesの中身を日付で降順にしたいです。

LINQを使って、日時の降順にする。
参考 http://www.hookedonlinq.com/EventLogViewerSample.ashx

System.Diagnostics.EventLog eventLog = new EventLog();

eventLog.Log = "Application";

var sources = (from System.Diagnostics.EventLogEntry es in eventLog.Entries
               orderby es.TimeGenerated descending
               select es);


// 問い合わせ結果の表示
foreach (var src in sources)
{
    Console.WriteLine(src.TimeGenerated + " " + src.Message);
}

引用返信 編集キー/
■56169 / inTopicNo.5)  Re[4]: イベントログのイベントログ時間でソートして習得
□投稿者/ C##### (3回)-(2011/01/02(Sun) 21:32:27)
やじゅ様
有難う御座います。まさにそのコードで解決できました
Linqでできたんですね。勉強になりました。

実現できたので解決なんですが
OrderByDescendingを使って同じことはできるんでしょうか?
これで、デリゲートやラムダを使って書いてみたんですが
うまくいかずで、どうしたらいいのか。。。。

よければご教授下さいませ。
引用返信 編集キー/
■56171 / inTopicNo.6)  Re[5]: イベントログのイベントログ時間でソートして習得
□投稿者/ やじゅ (1803回)-(2011/01/02(Sun) 22:29:13)
やじゅ さんの Web サイト
No56169 (C##### さん) に返信
> OrderByDescendingを使って同じことはできるんでしょうか?

System.Diagnostics.EventLog eventLog = new EventLog();

eventLog.Log = "Application";

var sources = eventLog.Entries.Cast<EventLogEntry>()
            .OrderByDescending(o => o.TimeGenerated); 

// 問い合わせ結果の表示
foreach (var src in sources)
{
    Console.WriteLine(src.TimeGenerated + " " + src.Message);
}

引用返信 編集キー/
■56191 / inTopicNo.7)  Re[3]: イベントログのイベントログ時間でソートして習得
□投稿者/ shu (339回)-(2011/01/04(Tue) 16:14:32)
No56166 (C##### さん) に返信

> ご回答有難う御座います。
> すみません、配列を逆というか
>         StringBuilder sb = new StringBuilder();
> foreach (System.Diagnostics.EventLogEntry ee in log.Entries)
> {
> sb.Append(ee.Message + "\n");
> }
> イベントログのEventLog.Entriesの中身を日付で降順にしたいです。
> たぶんなにもしないと昇順でメッセージが取得したため、逆でいいかもしれませんが、
> 正しくは日付で降順にしたいです。
取得したデータが希望の並び順と逆順に並んでいるんだからεπιστημηさんの言うように
Reverseした方が効率いいと思います。試してみて結果が違っていたのですか?

引用返信 編集キー/
■56192 / inTopicNo.8)  Re[4]: イベントログのイベントログ時間でソートして習得
□投稿者/ やじゅ (1804回)-(2011/01/04(Tue) 16:30:01)
やじゅ さんの Web サイト
No56191 (shu さん) に返信
> Reverseした方が効率いいと思います。試してみて結果が違っていたのですか?

System.Diagnostics.EventLogEntry型なので、Reverse出来なかっただけかも。

引用返信 編集キー/
■56195 / inTopicNo.9)  Re[5]: イベントログのイベントログ時間でソートして習得
□投稿者/ shu (340回)-(2011/01/04(Tue) 17:31:43)
No56192 (やじゅ さん) に返信
> ■No56191 (shu さん) に返信
>>Reverseした方が効率いいと思います。試してみて結果が違っていたのですか?
> 
> System.Diagnostics.EventLogEntry型なので、Reverse出来なかっただけかも。
> 
そういうことなのかな?

それなら

       System.Diagnostics.EventLogEntryCollection ents = log.Entries;
       StringBuilder sb = new StringBuilder();
       for (int idx = ents.Count - 1; idx>=0 ; idx--)
       {
           System.Diagnostics.EventLogEntry ent = ents[idx];
           sb.AppendLine(String.Format("{0}", ent.Message));
       }

こんな感じなら大丈夫?

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -