none
Dateienstrings RRS feed

  • Frage

  • Wie kann man gleiche Wörter in einem File zählen?

     Das Programm soll die textdatei einlesen und alle vorkommenden woerter zaehlen.

    Kann mir jemand helfen?


    Montag, 30. September 2013 14:55

Antworten

  • Hallo, dazu gibt es verschiedene Wege.
    Allen gemeinsam ist aber, das man erst einmal an den Dateiinhalt kommen muss:

    string content = File.ReadAllText(@"D:\test\test.txt");//Datei lesen

    Nun kannst du beispielsweise den Text durch gehen und nach und Nach die Positionen der einzelnen Wörter abfragen. Sobald man -1 erhält, gibt es kein weiteres Vorkommen mehr:

    /// <summary>
    /// Zählt die Wörter in einer Zeichenfolge.
    /// </summary>
    static int CountWords(string content, string search, StringComparison comparison)//Achtung, kein Exceptionhandling o.ä.
    {
        int result = 0;//Zähler
        int current = -1;//Aktuell gefundene Position
        while ((current = content.IndexOf(search, current+1, comparison)) > -1)//Solange durchlaufen, wie ein Wort ab Letzter Position gefunden wurde.
            ++result;//Wort gefunden
        return result;//Zurück geben
    }

    Diese Methode nimmt auch einen Parameter an, der angibt, wie die Vorkommen gefunden werden sollen (StringComparison). Nun findet diese Methode aber auch "Dateiinhalt", wenn du nach "Datei" suchst. Um dieses Verhalten weg zu bekommen, musst du auch nch nach den Leerzeichen vor und hinter dem Wort fragen. Bzw. auch Zeilenumbruch, Stringanfang und Stringende. Aber auch die Satzzeichen solltest du beachten.

    Weitere Zähl-Möglichkeiten gibt es im Internet: Seite 1, Seite 2


    Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    • Als Antwort markiert Ciprian Bogdan Mittwoch, 23. Oktober 2013 08:34
    Montag, 30. September 2013 15:20
    Moderator
  • Hi,

    alternativ geht auch bspw. sowas:

    String wordsAsString = "Abc,Def,Ghi,Abc,Abc,Xyz,Ghi";
    
    List<String> words = wordsAsString.Split( ",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries ).ToList();
    
    var wordListWithCount = words.GroupBy( g => g ).Select( i => new { Wort = i.Key, Anzahl = i.Count() } );
    

    In wordListWithCount steht dann sowohl das jeweilige Wort als auch die Anzahl der Vorkommen.



    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort markiert Ciprian Bogdan Mittwoch, 23. Oktober 2013 08:34
    Montag, 30. September 2013 15:42
    Moderator

Alle Antworten

  • Hallo,

    erstelle eine Instanz von Dictionary<string, int>(). Dann gehst Du die Datei Wort für Wort durch, überprüfst dictionary.Contains(wort) und inkrementierst ggf. den int-Wert.

    Gruß
    Marcel

    Montag, 30. September 2013 15:18
    Moderator
  • Hallo, dazu gibt es verschiedene Wege.
    Allen gemeinsam ist aber, das man erst einmal an den Dateiinhalt kommen muss:

    string content = File.ReadAllText(@"D:\test\test.txt");//Datei lesen

    Nun kannst du beispielsweise den Text durch gehen und nach und Nach die Positionen der einzelnen Wörter abfragen. Sobald man -1 erhält, gibt es kein weiteres Vorkommen mehr:

    /// <summary>
    /// Zählt die Wörter in einer Zeichenfolge.
    /// </summary>
    static int CountWords(string content, string search, StringComparison comparison)//Achtung, kein Exceptionhandling o.ä.
    {
        int result = 0;//Zähler
        int current = -1;//Aktuell gefundene Position
        while ((current = content.IndexOf(search, current+1, comparison)) > -1)//Solange durchlaufen, wie ein Wort ab Letzter Position gefunden wurde.
            ++result;//Wort gefunden
        return result;//Zurück geben
    }

    Diese Methode nimmt auch einen Parameter an, der angibt, wie die Vorkommen gefunden werden sollen (StringComparison). Nun findet diese Methode aber auch "Dateiinhalt", wenn du nach "Datei" suchst. Um dieses Verhalten weg zu bekommen, musst du auch nch nach den Leerzeichen vor und hinter dem Wort fragen. Bzw. auch Zeilenumbruch, Stringanfang und Stringende. Aber auch die Satzzeichen solltest du beachten.

    Weitere Zähl-Möglichkeiten gibt es im Internet: Seite 1, Seite 2


    Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.

    • Als Antwort markiert Ciprian Bogdan Mittwoch, 23. Oktober 2013 08:34
    Montag, 30. September 2013 15:20
    Moderator
  • Hi,

    alternativ geht auch bspw. sowas:

    String wordsAsString = "Abc,Def,Ghi,Abc,Abc,Xyz,Ghi";
    
    List<String> words = wordsAsString.Split( ",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries ).ToList();
    
    var wordListWithCount = words.GroupBy( g => g ).Select( i => new { Wort = i.Key, Anzahl = i.Count() } );
    

    In wordListWithCount steht dann sowohl das jeweilige Wort als auch die Anzahl der Vorkommen.



    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    • Als Antwort markiert Ciprian Bogdan Mittwoch, 23. Oktober 2013 08:34
    Montag, 30. September 2013 15:42
    Moderator
  • Hallo albiii,

    Konnte Deine Frage hilfreich in diesen Thread beantwortet warden ? Wenn ja, markiere bitte die entsprechenden Antworten.

    Danke und Gruß,

    Ciprian


    Ciprian Bogdan, MICROSOFT   Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-PrinzipEntwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.





    Freitag, 4. Oktober 2013 15:09