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