Autor Beitrag
M-Cha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 67



BeitragVerfasst: Fr 16.10.09 11:25 
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?

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 132
Erhaltene Danke: 2



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 67



BeitragVerfasst: Fr 16.10.09 12:04 
Es eht mir darum das das Wort.... Manchmal so da steht TEST.... so Test... oder so... test.
Nemag
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 132
Erhaltene Danke: 2



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 67



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 67



BeitragVerfasst: 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!



ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 132
Erhaltene Danke: 2



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 67



BeitragVerfasst: 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)


ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Fr 16.10.09 14:49 
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 39



BeitragVerfasst: Fr 16.10.09 14:56 
Ich glaube er will nur die alleinigen "blubs"... :lol:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Fr 16.10.09 17:19 
user profile iconM-Cha hat folgendes geschrieben Zum zitierten Posting springen:

ausblenden 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