From 92ffc6cdfac919f38d636a85b073a5b682acfa72 Mon Sep 17 00:00:00 2001
From: Jens Albrecht <jens.albrecht@th-nuernberg.de>
Date: Mon, 16 Dec 2024 16:58:05 +0100
Subject: [PATCH] .

---
 Dateiverarbeitung/Dateiverarbeitung.csproj |  10 ++
 Dateiverarbeitung/Program.cs               | 116 +++++++++++++++++++++
 Dateiverarbeitung/umsatz.txt               |   7 ++
 Dateiverarbeitung/verkauf.txt              |   9 ++
 Uebung10.sln                               |  30 ++++++
 5 files changed, 172 insertions(+)
 create mode 100644 Dateiverarbeitung/Dateiverarbeitung.csproj
 create mode 100644 Dateiverarbeitung/Program.cs
 create mode 100644 Dateiverarbeitung/umsatz.txt
 create mode 100644 Dateiverarbeitung/verkauf.txt
 create mode 100644 Uebung10.sln

diff --git a/Dateiverarbeitung/Dateiverarbeitung.csproj b/Dateiverarbeitung/Dateiverarbeitung.csproj
new file mode 100644
index 0000000..40c60dd
--- /dev/null
+++ b/Dateiverarbeitung/Dateiverarbeitung.csproj
@@ -0,0 +1,10 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <OutputType>Exe</OutputType>
+    <TargetFramework>net6.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+  </PropertyGroup>
+
+</Project>
diff --git a/Dateiverarbeitung/Program.cs b/Dateiverarbeitung/Program.cs
new file mode 100644
index 0000000..1be6a16
--- /dev/null
+++ b/Dateiverarbeitung/Program.cs
@@ -0,0 +1,116 @@
+using System.Globalization; // für CultureInfo s.u.
+
+class Program
+{
+    static void DateiLesen()
+    {
+        string datei = @"..\..\..\verkauf.txt";
+
+        // Datei öffnen
+        StreamReader sr = new StreamReader(datei);
+
+        // Datei verarbeiten
+        int zeilenNr = 0;
+        while (!sr.EndOfStream)
+        {
+            string zeile = sr.ReadLine() ?? "";
+            string[] daten = zeile.Split(';');
+
+            string artikel = daten[0];
+            // CultureInfo stellt bei englischer Systemeinstellung sicher,
+            // dass das Komma als Dezimaltrennzeichen interpretiert wird
+            // Ist aber nicht klausurrelevant.
+            double preis = Convert.ToDouble(daten[1], new CultureInfo("de-de"));
+
+            // -15 bedeutet 15 Zeichen, rechts aufgefüllt mit Leerzeichen
+            // 6:f2 bedeutet 6 Zeichen, 2 Nachkommastellen
+            Console.WriteLine($"{++zeilenNr}. Artikel: {artikel,-15} für {preis,6:f2}");
+        }
+
+        // Datei schließen
+        sr.Close();
+    }
+
+
+    static void UmsatzBerechnung()
+    {
+        // Dateinamen
+        string eingabeDatei = @"..\..\..\verkauf.txt";
+        // Ausgabe auf dem Desktop würde so gehen:
+        // string ausgabeVerzeichnis = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
+        string ausgabeDatei = @"..\..\..\umsatz.txt";
+
+        Console.WriteLine("Schreibe Datei " + ausgabeDatei);
+
+        // Schritt 1: Reader und Writer öffnen
+        StreamReader sr = new StreamReader(eingabeDatei);
+        StreamWriter sw = new StreamWriter(ausgabeDatei);
+
+        string vorherigerArtikel = "";
+        double umsatz = 0;
+        int anzahl = 0;
+
+        Console.WriteLine(" Anzahl | Artikel         | Umsatz");
+        Console.WriteLine("--------+-----------------+--------");
+        sw.WriteLine(" Anzahl | Artikel         | Umsatz");
+        sw.WriteLine("--------+-----------------+--------");
+
+        // Schritt 2: Dateien verarbeiten
+        while (!sr.EndOfStream)
+        {
+            string? zeile = sr.ReadLine() ?? "";
+            string[] daten = zeile.Split(';');
+
+            string artikel = daten[0];
+            double preis = Convert.ToDouble(daten[1]);
+
+            // gleicher Artikel oder erste Zeile
+            if (artikel == vorherigerArtikel || vorherigerArtikel == "")
+            {
+                anzahl++;
+                umsatz += preis;
+            }
+            // neuer Artikel gefunden
+            else
+            {
+                // Alten Artikel ausgeben
+                // -15 bedeutet 15 Zeichen, rechts aufgefüllt mit Leerzeichen
+                // 6:f2 bedeutet 6 Zeichen, 2 Nachkommastellen
+                Console.WriteLine($" {anzahl,6} | {vorherigerArtikel,-15} | {umsatz,6:f2}");
+                sw.WriteLine($" {anzahl,6} | {vorherigerArtikel,-15} | {umsatz,6:f2}");
+                umsatz = preis;
+                anzahl = 1;
+            }
+            vorherigerArtikel = artikel;
+
+            // Ausgabe des letzten Artikels - hier oder nach der Schleife
+            if (sr.EndOfStream)
+            {
+                Console.WriteLine($" {anzahl,6} | {artikel,-15} | {umsatz,6:f2}");
+                sw.WriteLine($" {anzahl,6} | {vorherigerArtikel,-15} | {umsatz,6:f2}");
+            }
+        }
+
+        // Schritt 3: Dateien schließen
+        sr.Close();
+        sw.Close();
+    }
+
+
+    static void Main(string[] args)
+    {
+        Console.WriteLine();
+        Console.WriteLine("Aktuelles Verzeichnis:\n" + Directory.GetCurrentDirectory());
+        Console.WriteLine();
+
+        DateiLesen();
+        Console.WriteLine("Daten gelesen. Bitte Taste drücken...");
+        Console.ReadKey();
+        Console.WriteLine();
+
+        UmsatzBerechnung();
+        Console.WriteLine("Ausgabe erzeugt. Bitte Taste drücken...");
+        Console.ReadKey();
+    }
+}
+
diff --git a/Dateiverarbeitung/umsatz.txt b/Dateiverarbeitung/umsatz.txt
new file mode 100644
index 0000000..795874d
--- /dev/null
+++ b/Dateiverarbeitung/umsatz.txt
@@ -0,0 +1,7 @@
+ Anzahl | Artikel         | Umsatz
+--------+-----------------+--------
+      1 | Boss-Hemd       |  34,85
+      2 | GAP-Hemd        | 129,85
+      2 | Freizeithemd    |  59,89
+      3 | Levis-505       | 129,85
+      1 | Wrangler-001    |  89,90
diff --git a/Dateiverarbeitung/verkauf.txt b/Dateiverarbeitung/verkauf.txt
new file mode 100644
index 0000000..bd1c133
--- /dev/null
+++ b/Dateiverarbeitung/verkauf.txt
@@ -0,0 +1,9 @@
+Boss-Hemd;34,85
+GAP-Hemd;59,90
+GAP-Hemd;69,95
+Freizeithemd;19,99
+Freizeithemd;39,90
+Levis-505;49,95
+Levis-505;49,95
+Levis-505;29,95
+Wrangler-001;89,90
diff --git a/Uebung10.sln b/Uebung10.sln
new file mode 100644
index 0000000..27c6096
--- /dev/null
+++ b/Uebung10.sln
@@ -0,0 +1,30 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.3.32929.385
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dateiverarbeitung", "Dateiverarbeitung\Dateiverarbeitung.csproj", "{920A59E9-7D2C-4D68-9BE8-4095B969108C}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{BC1564A5-E48F-4691-AB57-BC650D22085F}"
+	ProjectSection(SolutionItems) = preProject
+		README.md = README.md
+	EndProjectSection
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{920A59E9-7D2C-4D68-9BE8-4095B969108C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{920A59E9-7D2C-4D68-9BE8-4095B969108C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{920A59E9-7D2C-4D68-9BE8-4095B969108C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{920A59E9-7D2C-4D68-9BE8-4095B969108C}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+		SolutionGuid = {E0EA5C5E-F75C-4258-B887-2AEAF33BE0B9}
+	EndGlobalSection
+EndGlobal
-- 
GitLab