Entwickler-Ecke
Sonstiges (.NET) - Logauswertung, wie?
avoid - Do 05.07.12 14:42
Titel: Logauswertung, wie?
Ich habe ein Verzeichniss in dem sich mehrere Text Dateien befinden.
Bei den Dateien handelt es sich um Log Dateien die jeweils um die 100kbyte groß sind.
Nun möchte ich ein kleines Tool schreiben das diese Logdateien auswerten kann.
Dazu zähle ich folgendes:
- Den Inhalt der Dateien einlesen und aufbereitet darstellen. (z.b. als sortierte Tabelle)
- Filtermöglichkeiten um z.b. den zeitlichen Rahmen ein zu grenzen.
- Druck- und Speichermöglichkeit der Auswertung.
Ich glaube mal das ist heutzutage so der Standart.
---------------------------------
Eine Datei ein zu lesen bekomm ich hin aber wie lese ich einen kompletten Ordner ein?
Und wie kann ich eine tabelarische Darstellung der Daten realisieren?
Kann ich dazu ein Datagrid verwenden, wenn ja wie?
Oder macht es sich evtl. doch besser ein Multiline-Textfeld und Formatiertung zu arbeiten?
---------------------------------
Gruß, avoid
avoid - Mo 09.07.12 12:10
die dateinamen sind alle acht zeichen lang und im hex format.
ist eine datei voll genug wird eine neue angelegt.
also kann ich nie wissen wieviele dateien gerade im ordner sind.
die reihenfolge der daten kann ich auch nicht am dateinamen
sondern nur am gelogten zeitstempel fest machen.
also muß ich wohl abfragen wieviele dateien gerade im ordner sind
und dann mit einer schleife eine nach der anderen einlesen.
am besten lese ich die daten in ein mehrdimensionales array ein
und dieses stelle ich dann in einem datagrid dar.
darin kann ich dann die sortirung einfach per klick erledigen.
Danke schon mal für den tip mit der Directory-Klasse.
------nachtrag-------
ich habe jetzt mal das hier als beispiel probiert.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| string pfad = "C:\\Programme"; if (!Directory.Exists(pfad)) { MessageBox.Show(pfad + "\n" + "konnte nicht gefunden werden."); } if (Directory.Exists(pfad)) { textBox1.Text = pfad; folderBrowserDialog1.SelectedPath = pfad; label1.Text = "Es sind " + Directory.GetFiles(pfad).Length + " Dateien in " + pfad; } |
was passiert wenn man manuell in der textbox rum tipt ist erst mal nebensache.
is ja nur ein funktionelles beispiel.
jetzt werd ich mal versuchen alle dateien mit der endung .log auf zu listen.
-----nochmal---nachtrag-----
C#-Quelltext
1: 2: 3: 4: 5:
| string[] dateien = Directory.GetFiles(pfad); foreach (string dateiname in dateien) { richTextBox1.Text += dateiname + "\n"; } |
damit hab ich jetzt eine schöne auflistung aller dateien im ordner.
kann ich die auch noch auf den datei typ .log filtern?
avoid - Mo 09.07.12 16:23
in meinem fall also z.b. so.
C#-Quelltext
1:
| string[] dateien = Directory.GetFiles(pfad,"*.log"); |
klappt wunderbar.
jetzt kann ich mich daran machen die log dateien in's array zu packen.
der inhalt so einer logdatei ist wie folgt aufgebaut:
Tag.Monat Stunde:Minute Info1 Info2 Info3 .......
ich kann also erst mal mit Split den inhalt jeder zeile am leerzeichen trennen
und dann stück für stück in ein array packen.
eine zeile nach der anderen, eine datei nach der anderen, bis alles eingelesen ist.
mal kucken ob ich das hin bekomme.
avoid - So 15.07.12 17:40
also aktuell habe ich das hier:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51:
| using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; using System.Collections; namespace Logauswerter { public partial class Form1 : Form { ArrayList daten = new ArrayList(); public string pfad = Application.StartupPath; public Form1() { InitializeComponent(); einlesen(); }
private void einlesen() { string[] dateien = Directory.GetFiles(pfad, "*.log"); foreach (string dateiname in dateien) { StreamReader input = new StreamReader(dateiname); while (!input.EndOfStream) { daten.Add(input.ReadLine()); } input.Close(); } for (int i = 0; i < daten.Count; i++) { string line = daten[i].ToString(); string[] line_array = line.Split(' '); label1.Text += line_array[0] + "\n"; label2.Text += line_array[1] + "\n"; for (int y = 2; y < line_array.Length; y++) { label3.Text += line_array[y] + " "; } label3.Text += "\n"; } label4.Text = "Status: " + daten.Count + " zeilen aus " + dateien.Length + " dateien geladen."; } } } |
das lässt sich doch sicher noch um einiges vereinfachen mit einem mehrdimensionalen array oder?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!