c# umlaute in datei zählen?
Hallo Leute ich möchte herausfinden wie viele Umlaute in einer Datei sind mit Hilfe meines C# Programmes hier ist mein Code:
#region vorhandene Umlaute
//Anzahl der vorhandenen Umlaute in der Datei
lines = "";
int count1 = 0;
if (File.Exists(dateiname))
{
StreamReader sr = File.OpenText(dateiname);
sr = File.OpenText(dateiname);
string zeilen = sr.ReadLine();
for (int i = 0; i < counts; i++)
{
if (counts.Equals('ä') || counts.Equals('ö') || counts.Equals('ü'))
{
count1++;
}
}
Console.Write("Es sind " + count1 + " Umlaute in der Datei vorhanden");
}
#endregion
Console.ReadKey();
Fehler kann ich in meinem Code nicht auffinden
Aber gefunden werden halt Null Zeichen was ja nicht sein kann.
Hier nochmal die Ausgabe meines Bildschirmes:
Ich freue mich sehr wen mir jemand weiter helfen könnte
Mfg
Benedikt
2 Antworten
using System;
using System.IO;
namespace CountUmlauteInFileDemo
{
internal class Program
{
static void Main(string[] args)
{
string filename = "test.txt";
Console.WriteLine($"Es sind {CountUmlauteInFile(filename).ToString()}");
Console.ReadKey();
}
// Zählt, wie oft die Zeichen aus charsToFind in text vorkommen und gibt die Anzahl zurück
public static int GetCharCountFromString(string text, params char[] charsToFind)
{
int count = 0;
foreach(char textChar in text)
{
foreach(char findChar in charsToFind)
{
if (textChar == findChar)
{
count++;
}
}
}
return count;
}
// Zählt alle Umlaute aus einer Datei und gibt die Anzahl zurück
public static int CountUmlauteInFile(string filename)
{
int count = 0;
using (StreamReader sr = new StreamReader(filename))
{
while (!sr.EndOfStream)
{
count += GetCharCountFromString(sr.ReadLine(), 'ä', 'ö', 'ü');
}
}
return count;
}
}
}
Ich würde dir empfehlen deinen Code in Methoden auszulagern. Dann ist es einfacher lesbar. Zum Beispiel habe ich in dem Beispiel eine Methode erstellt, welche nur die angegebenen Character zählt und eine, welche die Datei Zeile für Zeile einliest.
Bei dir im Code solltest du unter anderem darauf verzichten, 2 die exakt selben Aktionen doppelt auszuführen. File.OpenText reicht 1 mal komplett. Dazu muss readLine auch in eine Schleife, da du sonst immer nur 1 Zeile hast, aber nie zur nächsten gehst. Counts ist bei dir auch immer eine Zahl, nie ein Buchstabe, wodurch du nie einen Umlaut finden kannst.
Mein Lösungsansatz ist deinem ein wenig angepasst, aber etwas abgewandelt. Viele wege führen zum Ziel. Ich empfehle dir das auslagern unbedingt in Zukunft mit einzubeziehen.
Ich denke der Code ist eindeutig, wenn nicht, dann gerne einmal nachfragen, wo es Möglicherweise von deiner Seite Fragen gibt.
Mein Beispiel war:
test.txt
Dies ist ein Beispiel.
Es ist nicht ärgerlich, wie trödelig
manche Menschen sind. Dennoch fänd ich schnelligkeit besser
Ausgabe:

Was genau? Was public static heißt oder was allgemein Methoden sind? Public ist übrigens ein Access Modifier
public ermöglicht es aus anderen Klassen und anderen Bibliotheken oder so darauf zuzugreifen. private würde es nur in der Klasse zugreifbar machen. Dann gibt es noch protected und weitere. Google einfach mal Access Modifier C#
Klassen instanziiert man normal, also so:
Klasse klasse = new Klasse();
klasse.Methode();
Damit man das nicht machen muss, gibt es static. Das erlaubt es auf die Methode ohne neue Instanz drauf zuzugreifen. Ich weiß nicht, wie ich das erklären soll. Auf google findest du mit Sicherheit bessere Beschreibungen 😉
if (i.Equals('ä') || i.Equals('ö') || i.Equals('ü'))
{
count1++;
}
Die Hälfte hast du damit schon mal. :-) Allerdings werden Großbuchstaben nicht beachtet.
sag mal kann es sein das du count net definiert hast? DU musst halt den Buchstaben mit dem count: i kriegen und net einfach count machen das is der fehler
Danke für deine Hilfe, aber kannst du mir bitte sagen was die public static Methoden machen. Im Unterricht habe ich mich noch nicht damit befasst.
Mfg