Autor Beitrag
avoid
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 230
Erhaltene Danke: 4

MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
BeitragVerfasst: Do 05.07.12 14:42 
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

_________________
Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
traceurmicha
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 160
Erhaltene Danke: 9

Win XP SP2, Win 7 Pro., Ubuntu 9, Debian 5
C#, ASP.NET, MSSQL, PHP(Microsoft Visual Studio 2010 Ultimate, SharpDevelop 4, Microsoft SQL Server2008 Express, Eclipse for PHP)
BeitragVerfasst: Fr 06.07.12 11:22 
Haben die Dateien immer den gleichen Namen? Oder haben Sie Namen die irgendwie Speziell aufgebaut sind?
Sind immer gleichviele Dateien im Ordner?
Hast du schonmal selbst gesucht? Wenn ja dann müsstest du auf die Directory Klasse gestoßen sein. Dann schau dir da auch mal das hier an.

Ich denke mit den Infos kommst du schonmal weiter. Wie du die Dateien darstellst ist dir überlassen. Schau dir doch einfach mal das Datagrid an und wie es funktioniert.

Lesen ist Macht! :P

_________________
Programmieren ist ein Rennen zwischen den Softwareentwicklern, die versuchen größere und bessere idiotensichere Programme zu schreiben und dem Universum, welches versucht größere und bessere Idioten zu produzieren. Zur Zeit liegt das Universum in Führung.
avoid Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 230
Erhaltene Danke: 4

MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
BeitragVerfasst: 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.
ausblenden 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; // feld für die pfad eingabe
                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-----

ausblenden 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?

_________________
Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4799
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mo 09.07.12 15:19 
Hallo,

einfach diese Directory.GetFiles(string, string)-Überladung mit "*.log" aufrufen.
avoid Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 230
Erhaltene Danke: 4

MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
BeitragVerfasst: Mo 09.07.12 16:23 
in meinem fall also z.b. so.
ausblenden 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.

_________________
Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke
avoid Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 230
Erhaltene Danke: 4

MSDos, WinXP32, Win764, Win10, Android, Debian
msl (mIRC edit), html & php & Java (DreamweaverMX), Basic (picaxe PE6), C (Arduino IDE), C# (vs2010,2015,2017,2019,Unity,Android Studio)
BeitragVerfasst: So 15.07.12 17:40 
also aktuell habe ich das hier:
ausblenden volle Höhe 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;            // für stream reader
using System.Collections;   // für arraylist

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"); // array mit den pfaden der logfiles
            foreach (string dateiname in dateien) // durcharbeiten aller gefundenen dateien
            {
                StreamReader input = new StreamReader(dateiname);
                while (!input.EndOfStream) // durcharbeiten aller zeilen der aktuellen datei
                {
                    daten.Add(input.ReadLine());
                }
                input.Close();
            }
            for (int i = 0; i < daten.Count; i++)
            {
                string line = daten[i].ToString(); // aktuelle zeile
                string[] line_array = line.Split(' ');
                label1.Text += line_array[0] + "\n"// datum
                label2.Text += line_array[1] + "\n"// zeit
                for (int y = 2; y < line_array.Length; y++) // info1 info2 info3 ....
                {
                    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?

_________________
Gute Fragen sind wie ein wissenschaftliches Experiment. Sie setzen eine Menge Wissen bereits voraus.
bitcoin:1J5dgQQp8eUy8wkUxyztBUVCkCpo5MQEQs?label=Danke