Entwickler-Ecke

Basistechnologien - Werte aus .txt addieren und in File speichern


hansi666 - Mo 02.08.10 09:43
Titel: Werte aus .txt addieren und in File speichern
Guten Tag zusammen,

Erstmal vorweg: Ich kenne mich in C# oder ähnlichen Sprachen nur sehr rudimentär aus. Leider muss die Funktion darin geschrieben sein, sonst hätte ich eine andere genommen

Und zwar:
Ich habe eine Menge Textfiles die chronologisch benannt sind (z.B metrtd200910).
Diese sind wie folgt aufgebaut:

Datenformat - Minutentelegramm TAWES neu:
Timestamp PC; siehe Beschreibung TAWES neu
01.12.2009 00:00:07;M0911302259 107 779 9813 0 0 0 34
01.12.2009 00:00:47;M0911302300 107 782 9814 0 0 0 33
01.12.2009 00:01:47;M0911302301 107 784 9814 0 0 0 36
01.12.2009 00:02:47;M0911302302 105 789 9814 0 0 0 42

Jetzt muss ich alle Wete aus einer bestimmten Spalte (hier die letzte mit 34,33,36...) addieren und das Ergebnis in ein neues textfile mit dem namen "200910" abspeichern.
Ich denke, dass sollte nicht allzu aufwendig sein, oder?

Ich wäre wirklich sehr dankbar, wenn mir hier jemand helfen könnte, da ich leider keine Ahnung von C# habe...

Falls etwas unklar ist, bitte fragen!

Danke im Vorraus,
Liebe Grüße,
Hansi


danielf - Mo 02.08.10 10:03

Hallo und :welcome:,

ich würde erstmal die Daten einlesen und in ein entsprechende Klassenstruktur ablegen. Danach ist es dann kein Problem von den verschiedenen Eigenscahften die Summe zu bilden.

Zum Beispiel hast du eine Klasse Eintrag mit
wobei
01.12.2009 00:00:07;M0911302259 107 779 9813 0 0 0 34
Datum;Name zahl1 zahl2 zahl3 zahl4 zahl5 zahl6 zahl7

Besser Namen solltest du dir überlegen, weil ich die Semantik der Zahlen nicht kenne :)
Dem Eintrag kannst du noch eine Datei zuweisen.

Wenn das Gerüst steht, gehst du an das Auslesen der Informationen.

Mit der Klasse Directory und File kannst du die Dateien in einem Verzeichnis Zeilenweise einlesen.

Aus jeder Zeile machst du dann ein neues Objekt der Eintrag-Klasse. Dabei musst die Informationen aus der Zeile-Parsen. Dies kannst du mit String-Verarbeitung oder regulären Ausdrücken machen. Aufgrund der einfachen Struktur würde ich zu ersterem tendieren.

Wenn du nun eine Liste von Einträgen hast (List<Eintrag>) kannst du Dank Linq einfache abfragen machen.

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
// Erstelle Datenkontainer für Log-Einträge
List<Eintrag> einträge = new List<Eintrag>();

// Parse dateien
foreach(var file in Directory.GetFiles("sss"))
{
    einträge.AddRange(Parse(file));
}

// Gib mir Summe über Spalte 6
einträge.Sum(e => e.Zahl6);

// Gib mir das Maximum in spalte 4
einträge.Max(e => e.Zahl4);
//usw.


Der Code ist nur daher geschrieben. Aber mit den genannten Schlagwörtern kommst du sehr schnell auf die korrekte Lösung.

Gruß Daniel


JüTho - Mo 02.08.10 10:20

Weitere Hinweise stehen unter diesem Doppel-Post [http://www.mycsharp.de/wbb2/thread.php?threadid=87310]. Jürgen