Skip to content
Snippets Groups Projects
Commit ac241cb8 authored by Uwe Wienkop's avatar Uwe Wienkop
Browse files

Woche 10: Stream-Read&Write, Split, Enums

parent 68aa1c32
Branches
No related tags found
No related merge requests found
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<RootNamespace>_10_Enums</RootNamespace>
</PropertyGroup>
</Project>
using System;
namespace _10_Enums
{
// Enums definieren jeweils einen neuen DATENTYP, KEINE VARIABLEN
class Program
{
public enum Ampelfarben { rot, gelb, grün}
public enum Ampelfarben2 { rot, gelb, grün, blau, lila }
static void Main(string[] args)
{
//enum Ampel { rot, gelb, grün}; // FALSCH!!!
//Ampel = Ampel.rot; // Enums definieren jeweils einen neuen DATENTYP, KEINE VARIABLEN
int ampel1 = 0;
if (ampel1 == 0) // Ist die Ampel == rot?
{ }
Ampelfarben ampel2 = Ampelfarben.rot;
if (ampel2 == Ampelfarben.rot)
{
Console.WriteLine("Die Ampel ist rot");
}
Console.WriteLine((int) ampel2);
Console.WriteLine("-----------");
ampel2++;
Console.WriteLine(ampel2);
Console.WriteLine((int)ampel2);
string[] sf = { "Stehen bleiben", "Warten", "Gute Fahrt" };
Console.WriteLine(sf[(int) ampel2]);
ampel2 = (Ampelfarben) 10;
Console.WriteLine(ampel2);
}
}
}
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<RootNamespace>_10_StreamWriterIntro</RootNamespace>
</PropertyGroup>
</Project>
This diff is collapsed.
using System;
using System.IO;
namespace _10_StreamWriterIntro
{
class Program
{
static void Main(string[] args)
{
using StreamWriter wr = new StreamWriter(@"..\..\..\Ausgabe.txt");
for (int i = 1; i < 10000; i++)
{
wr.Write($"{i,7}");
if (i % 5 == 0)
wr.WriteLine();
}
wr.Close();
}
}
}
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<RootNamespace>_10_StringSplit2</RootNamespace>
</PropertyGroup>
</Project>
using System;
namespace _10_StringSplit2
{
class Program
{
static void SplitTest(string[] woerter)
{
Console.WriteLine($"Wörter:");
foreach (string wort in woerter)
{
Console.WriteLine($" |{wort}|");
}
Console.WriteLine("-------------");
}
static void Main(string[] args)
{
string s1 = "Dies ist ein Text.";
string s2 = "Dies ist ein Text.";
string tabelle1 = "1|2|3";
string tabelle2 = "1||3";
SplitTest(s1.Split(' '));
SplitTest(s2.Split(' ', StringSplitOptions.RemoveEmptyEntries));
SplitTest(tabelle1.Split('|'));
SplitTest(tabelle2.Split('|'));
SplitTest(tabelle1.Split("|"));
string s3 = "Dies ist ein Text, der Sonderzeichen enthält!";
char[] seperatorFeld = { ' ', ',', '!' };
SplitTest(s3.Split(seperatorFeld, StringSplitOptions.None));
}
}
}
...@@ -11,8 +11,10 @@ namespace _10_UebgSpeisekarteDi ...@@ -11,8 +11,10 @@ namespace _10_UebgSpeisekarteDi
static void Main(string[] args) static void Main(string[] args)
{ {
Speisekarte(@"..\..\..\Speisekarte.txt", "S1", "H1", "V1", "S1"); Speisekarte(@"..\..\..\Speisekarte.txt", "S1", "H1", "V1", "S1");
// Verdichtete Darstellung der Bestellung (z.B. 2 x S1, 1 x H1, usw.") und // Verdichtete Darstellung der Bestellung (z.B. 2 x Peking Suppe, 1 x H1, usw.") und
// Ausgabe des Gesamtrechnungsbetrags // Ausgabe des Gesamtrechnungsbetrags
// Tipp: Lesen Sie jeweils eine Zeile der Speisekarte und schauen Sie,
// wie oft das jeweilige Kürzel in den Bestellkürzeln vorkam
} }
} }
} }
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<RootNamespace>_10_WoerterZaehlen</RootNamespace>
</PropertyGroup>
</Project>
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
namespace _10_WoerterZaehlen
{
class Program
{
static void Main(string[] args)
{
Dictionary<string, int> wortAnzahl = new Dictionary<string, int>();
using StreamReader sr = new StreamReader(@"..\..\..\csharp.txt");
while (!sr.EndOfStream)
{
string zeile = sr.ReadLine();
string[] woerter = zeile.Split(' ', StringSplitOptions.RemoveEmptyEntries);
foreach (string wort in woerter)
{
if (wortAnzahl.ContainsKey(wort))
wortAnzahl[wort]++;
else
wortAnzahl[wort] = 1;
}
}
foreach (KeyValuePair<string, int> item in wortAnzahl.OrderByDescending(x => x.Value))
{
if (item.Value < 2)
break;
Console.WriteLine($"{item.Key,-25}: {item.Value}");
}
}
}
}
C# (englisch c sharp ist eine typsichere objektorientierte Allzweck-Programmiersprache. Architekt der Sprache war Anders Hejlsberg im Auftrag von Microsoft, zurzeit ist Mads Torgersen der Chef-Entwickler. Die Sprache ist an sich plattformunabhängig, wurde aber im Rahmen der .NET-Strategie entwickelt, ist auf diese optimiert und meist in deren Kontext zu finden.
Historisch wurde in C# fast exklusiv für Windows entwickelt. Durch Xamarin ist es inzwischen aber auch möglich, für macOS, iOS und Android zu entwickeln. Zudem gibt es mit .NET Core auch offizielle Unterstützung für GNU/Linux und macOS.[3]
Bis Version 2 war die Sprache bei der ECMA[4] und der ISO[5] als Standard registriert. In der Folge erschienen regelmäßig umfangreiche Erweiterungen der Sprache durch Microsoft. Durch die Entwicklung des Referenz-Compilers als Open Source (seit 2014) sind auch Community-Beiträge möglich.
Namensgebung
C# wurde unter dem Codenamen Cool entwickelt, der jedoch aus Gründen des Marketings zur Veröffentlichung geändert wurde. Der Name C Sharp leitet sich vom Zeichen Kreuz (♯, englisch sharp) der Notenschrift ab,[6] was dort für eine Erhöhung des Grundtons um einen Halbton steht. C sharp ist also der englische Begriff für den Ton cis. Dies ist eine Anspielung darauf, dass der Name der Programmiersprache C++ der Notation für die Erhöhung des Werts einer Variable um eins entstammt. Des Weiteren kann man das Kreuz-Zeichen als Kombination von vier Plus-Zeichen betrachten, was eine Erhöhung von C++ darstellen soll.[7] Allerdings enthält der Name nicht das Kreuz-Zeichen der Musiknotation, sondern ein Doppelkreuz bzw. Raute,[8] das häufig als Ersatzzeichen für das Kreuz genutzt wird, weil es im Gegensatz zum Kreuz auf üblichen Tastaturen vorkommt.
In künstlerischen Darstellungen wird teilweise auch das Notenschriftzeichen verwendet, was in der Folge von einigen für korrekt gehalten wird.[9] Eindeutig falsch ist die zweifache Verwendung des doppelten Dagger-Zeichens.
Konzept
C# greift Konzepte der Programmiersprachen Java, C++, Haskell, C sowie von Delphi auf. C# zählt zu den objektorientierten Programmiersprachen und unterstützt sowohl die Entwicklung von sprachunabhängigen .NET-Komponenten als auch COM-Komponenten für den Gebrauch mit Win32-Anwendungsprogrammen.
Einige der Elemente von C++, die im Allgemeinen als unsicher gelten, wie beispielsweise Zeiger, werden in C# nur für sogenannten „unsicheren Code“ erlaubt, der in Zonen mit eingeschränkten Rechten (z. B. bei Programmen, die aus Webseiten heraus ausgeführt werden) ohne die Zuteilung erweiterter Rechte nicht ausgeführt wird.
Als .NET-Sprache verfügt auch C# über Sprachunterstützung für Attribute und Delegaten. Attribute erlauben es, Informationen über eine Klasse, ein Objekt, oder eine Methode zu speichern, die zur Laufzeit ausgewertet werden können. Man spricht hierbei auch von Metadaten. Ein Delegat kann auf Methoden einer Klasse verweisen. Das Konzept stellt eine Weiterentwicklung von Funktionszeigern dar, wie sie beispielsweise in der Programmiersprache C vorkommen. Der Delegat hat jedoch einen festen Typ (genannt Delegat-Typ), der eine konkrete Signatur festlegt, die vom Compiler überprüft wird. Für den Aufruf beinhaltet der Delegat auch den Verweis auf das zu den Methoden gehörende Objekt. Ein Aufruf eines Delegaten ruft also gezielt eine Methode auf, der implizit ein Objektzeiger als Parameter übergeben wird. Außerdem müssen Delegaten typensicher deklariert werden, was zur Folge hat, dass Inkompatibilitäten der Methodensignaturen zwischen aufrufendem Delegat und der aufzurufenden Methode schon während der Kompilierung bemerkt werden.
Ab der Version 2.0 von C#, die mit .NET Framework 2.0 freigegeben wurde, unterstützt C# neben generischen Typen (englisch generics) auch anonyme Methoden, Generatoren und partielle Klassen. Generische Typen, Iteratoren und partielle Klassen sind Bestandteil des .NET-Frameworks 2.0 und stehen somit auch anderen .NET-Programmiersprachen wie beispielsweise Visual Basic .NET zur Verfügung.
...@@ -91,7 +91,15 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "10 UebgSpeisekarte_Mo", "10 ...@@ -91,7 +91,15 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "10 UebgSpeisekarte_Mo", "10
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "10 UebgSpeisekarteDi", "10 UebgSpeisekarteDi\10 UebgSpeisekarteDi.csproj", "{382FB072-0401-4BA5-BE7A-19C8B19EDE35}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "10 UebgSpeisekarteDi", "10 UebgSpeisekarteDi\10 UebgSpeisekarteDi.csproj", "{382FB072-0401-4BA5-BE7A-19C8B19EDE35}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "10 UebgMoRekursion", "10 UebgMoRekursion\10 UebgMoRekursion.csproj", "{803E6BCD-791C-4F4A-BBDD-DF88E6F97967}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "10 UebgMoRekursion", "10 UebgMoRekursion\10 UebgMoRekursion.csproj", "{803E6BCD-791C-4F4A-BBDD-DF88E6F97967}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "10 WoerterZaehlen", "10 WoerterZaehlen\10 WoerterZaehlen.csproj", "{83740224-D4AC-4884-B9E5-B13F3AC1DE9A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "10 StreamWriterIntro", "10 StreamWriterIntro\10 StreamWriterIntro.csproj", "{3186C668-B6EF-4657-AED7-D98675AE40FE}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "10 StringSplit2", "10 StringSplit2\10 StringSplit2.csproj", "{1D7678D8-3B0D-4178-9F80-2043D18C8BAD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "10 Enums", "10 Enums\10 Enums.csproj", "{0A59F1EF-68BD-43C7-BA85-EC1557017D86}"
EndProject EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
...@@ -279,6 +287,22 @@ Global ...@@ -279,6 +287,22 @@ Global
{803E6BCD-791C-4F4A-BBDD-DF88E6F97967}.Debug|Any CPU.Build.0 = Debug|Any CPU {803E6BCD-791C-4F4A-BBDD-DF88E6F97967}.Debug|Any CPU.Build.0 = Debug|Any CPU
{803E6BCD-791C-4F4A-BBDD-DF88E6F97967}.Release|Any CPU.ActiveCfg = Release|Any CPU {803E6BCD-791C-4F4A-BBDD-DF88E6F97967}.Release|Any CPU.ActiveCfg = Release|Any CPU
{803E6BCD-791C-4F4A-BBDD-DF88E6F97967}.Release|Any CPU.Build.0 = Release|Any CPU {803E6BCD-791C-4F4A-BBDD-DF88E6F97967}.Release|Any CPU.Build.0 = Release|Any CPU
{83740224-D4AC-4884-B9E5-B13F3AC1DE9A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{83740224-D4AC-4884-B9E5-B13F3AC1DE9A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{83740224-D4AC-4884-B9E5-B13F3AC1DE9A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{83740224-D4AC-4884-B9E5-B13F3AC1DE9A}.Release|Any CPU.Build.0 = Release|Any CPU
{3186C668-B6EF-4657-AED7-D98675AE40FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3186C668-B6EF-4657-AED7-D98675AE40FE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3186C668-B6EF-4657-AED7-D98675AE40FE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3186C668-B6EF-4657-AED7-D98675AE40FE}.Release|Any CPU.Build.0 = Release|Any CPU
{1D7678D8-3B0D-4178-9F80-2043D18C8BAD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1D7678D8-3B0D-4178-9F80-2043D18C8BAD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1D7678D8-3B0D-4178-9F80-2043D18C8BAD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1D7678D8-3B0D-4178-9F80-2043D18C8BAD}.Release|Any CPU.Build.0 = Release|Any CPU
{0A59F1EF-68BD-43C7-BA85-EC1557017D86}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0A59F1EF-68BD-43C7-BA85-EC1557017D86}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0A59F1EF-68BD-43C7-BA85-EC1557017D86}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0A59F1EF-68BD-43C7-BA85-EC1557017D86}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment