c# umlaute in datei zählen?

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:

Bild zum Beitrag

 - (Computer, programmieren, C Sharp)

RoterNacken 
Beitragsersteller
 29.04.2022, 20:47

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

0
FaTech  29.04.2022, 21:01
@RoterNacken

Was genau? Was public static heißt oder was allgemein Methoden sind? Public ist übrigens ein Access Modifier

0
FaTech  29.04.2022, 21:08
@RoterNacken

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 😉

1

if (i.Equals('ä') || i.Equals('ö') || i.Equals('ü'))

                    {

                        count1++;

                    }


Blackbarbar486  29.04.2022, 19:34

ah ne wait

0
Blackbarbar486  29.04.2022, 19:35
@Blackbarbar486

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

0
Dultus, UserMod Light   30.04.2022, 13:37

Die Hälfte hast du damit schon mal. :-) Allerdings werden Großbuchstaben nicht beachtet.

1