Entwickler-Ecke

Basistechnologien - Wortvorkommen in einer Datei zählen (Groß- & Kleinschreibg)


M-Cha - Fr 16.10.09 11:25
Titel: Wortvorkommen in einer Datei zählen (Groß- & Kleinschreibg)
Hallo,
ich habe eine MEthode gebaut die mir ein die Anzahl eines Wortes in einer Datei als Zahl ausgibt.

Leider sucht er nur nach der exakten Schreibweise (Großes T... rst klein) wie kann ich die Methode so mahcen, das er mir jewals nach dem Wort in Groß, Klein als auch gemischt sucht und ausgibt?


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
string inhalt = datei;
string gesuchtwort = "Test";

Console.Writeline(getAnzahlFindStrings(gesuchteswort, inhalt));


private static int getAnzahlFindStrings(string wort, string Dateiinhalt)
        {
            int pos = 0;
            int zaehler = 0;

           while (pos > -1)
           {
                pos = Dateiinhalt.IndexOf(wort);
                if (pos > -1)
                {
                    zaehler++;
                    Dateiinhalt = Dateiinhalt.Substring(pos + wort.Length);
                }
            }
            return zaehler;
        }


Nemag - Fr 16.10.09 11:40

Servus

Strings haben die Methoden ToUpper() bzw. ToLower() die jeweils den kompletten String in Großschreibweise bzw. Kleinschreibweise zurückgeben.

wenn du quasi auf (string1.ToUpper() == string2.ToUpper()) überprüfst hst du keine Probs mehr mit unterschiedlicher Schreibweise.


M-Cha - Fr 16.10.09 12:04

Es eht mir darum das das Wort.... Manchmal so da steht TEST.... so Test... oder so... test.


Nemag - Fr 16.10.09 13:21

user profile iconM-Cha hat folgendes geschrieben Zum zitierten Posting springen:
Es eht mir darum das das Wort.... Manchmal so da steht TEST.... so Test... oder so... test.


Willst du jetzt das er eine Unterscheideung macht oder nicht?

"T T T t t t"

T= 3 und t = 3
oder

T=6???




wenn ich mir jetzt IndexOf so anschaue gibt es dort eine Überladung wo du die StringComparionson jeweils mit Beachtung und ohne Beachtung der Groß und Kleinschreibung ausgibt.


M-Cha - Fr 16.10.09 13:26

Also es geht hier nur um die Bedeutung des Wortes wie es geschrieben ist, soll egal sein.

Er soll einfach nur z.b. nach test in allen klein und großschreibweisen schauen!


M-Cha - Fr 16.10.09 13:51

user profile iconM-Cha hat folgendes geschrieben Zum zitierten Posting springen:
Also es geht hier nur um die Bedeutung des Wortes wie es geschrieben ist, soll egal sein.

Er soll einfach nur z.b. nach test in allen klein und großschreibweisen schauen!




C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
                int j = fd[i].Value.IndexOf("TEST"0);

                if (j != -1)
                {
                    Console.WriteLine("JA! pOSITION {0})"; J);
                }
                else
                {
                    Console.WriteLine("NEIN");
                }


Bis jetzt sieht er den INDEX nur von TEST (in groß). Aber es sollen alle Test gesucht werden( egal ob groß oder klein)


Nemag - Fr 16.10.09 14:19

Na dann hab ich dir doch 2 möglichkeiten gegeben dies zu lösen...

Entweder wandelst du zu Testenden String und den SuchString komplett in TOUpper oder ToLower

oder

die schöner Alternative

IndexOf("...", StringComparions.xxxIgnoreCases)


M-Cha - Fr 16.10.09 14:32

user profile iconNemag hat folgendes geschrieben Zum zitierten Posting springen:
Na dann hab ich dir doch 2 möglichkeiten gegeben dies zu lösen...

Entweder wandelst du zu Testenden String und den SuchString komplett in TOUpper oder ToLower

oder

die schöner Alternative

IndexOf("...", StringComparions.xxxIgnoreCases)



C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
  int j = fd[i].Value.IndexOf("TEST", OrdinalIgnoreCase);

                if (j != -1)
                {
                    Console.WriteLine("JA! pOSITION {0})"; J);
                }
                else
                {
                    Console.WriteLine("NEIN");
                }


So scheint es nicht zu gehen! Er Gibt immer JA aus obwohl das WOrt z.b "TEsti" heißt!


danielf - Fr 16.10.09 14:49


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
            string input = "blsj blub lksdjf blub lkjsdlkj";
            MatchCollection matches = Regex.Matches(input, "blub", RegexOptions.IgnoreCase);

            foreach (Match match in matches)
            {
                Console.WriteLine("Found word @ position: " + match.Index);
            }


Gabe - Fr 16.10.09 14:56

Ich glaube er will nur die alleinigen "blubs"... :lol:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
string input = "blsj blub lksdjf ertzerzblubzretz lkjsdlkj";
            
MatchCollection matches = Regex.Matches(input, " blub ", RegexOptions.IgnoreCase);
foreach (Match match in matches)
   {
       Console.WriteLine("Found word @ position: " + match.Index);
   }


So wird dann nur der eine "blub", der alleine steht gefunden... :)


JüTho - Fr 16.10.09 17:19

user profile iconM-Cha hat folgendes geschrieben Zum zitierten Posting springen:


C#-Quelltext
1:
  int j = fd[i].Value.IndexOf("TEST", OrdinalIgnoreCase);                    

So scheint es nicht zu gehen! Er Gibt immer JA aus obwohl das WOrt z.b "TEsti" heißt!

Der Computer macht nicht das, was du willst, sondern das, was du wirklich sagst (abgesehen davon, dass dein Zitat unvollständig ist, weil "StringComparison." fehlt). Du verlangst, dass er in dem String nach "TEST" suchen soll (egal in welcher Schreibweise); und er findet "Testi", weil dort am Anfang schließlich "Test" steht. Also hat er recht.

Wenn du nach ganzen Wörtern suchen willst, musst du zuerst definieren, wodurch das Ende eines Wortes festgestellt wird, und das bei der Suche berücksichtigen. Das geht vermutlich über RegEx viel einfacher; aber dazu habe ich keine Ahnung.

Jürgen