2010-11-23 21 views
1

je besoin d'un cas de recherche insensible pour le code suivant ...Case Studies insensible dans un fichier texte

while ((line = file.ReadLine()) != null) 
    { 
    if (line.Contains(line2)) 
    dest.WriteLine("LineNo : " + counter.ToString() + " : " + line); 
    counter++; 
    } 

J'ai essayé comme ça

if (line.Contains(line2,StringComparer.OrdinalIgnoreCase)) 

Mais il ne semble pas fit..Any suggestion??

Répondre

4

Modifier

Oublier ma première réponse, j'ai mal lu la question.

Vous devez utiliser String.IndexOf (String, StringComparison):

foreach (String Row in File.ReadLines("Test.txt")) 
{ 
    if (Row.IndexOf("asd", StringComparison.InvariantCultureIgnoreCase) != -1) 
    { 
     // The row contains the string. 
    } 
} 
+0

@kappa pouvez-vous éditer mon code – bala3569

+0

Cela ne correspondra que lorsque 'line2' apparaîtra au début de' line'. Ne résout pas le problème du tout. –

+0

Votre exemple ne fonctionne PAS. Considérez comment le code original se comporte sur 'line =" abcdef "; line2 = "de"; 'et comment votre" fix "se comporte. –

-3

Vous pouvez convertir les deux parties en majuscules ou inférieure à l'aide "myString".ToLower();

Il est effectivement insensible à la casse.

+0

@rmx j'ai fichier texte deux texte files..one a des motifs et d'autres a filelist..i besoin de vérifier les modèles avec et filelist connecter à un autre file..so je dois vérifier indépendamment de la casse – bala3569

+0

Cela créerait deux nouvelles instances d'une chaîne, qui est beaucoup plus lente et pas aussi pleinement que StringComparer. – Jaster

+0

True, c'est la meilleure réponse http://stackoverflow.com/questions/4257114/case-insensitive-search-in-a-text-file/4257176#4257176 – Nobody

1

utiliser une expression régulière (classe Regex dans .NET) et spécifiez l'option de la casse (partie du constructeur).

+0

Contre-intuitif, si 'line2' est assez long, cela peut être BEAUCOUP plus rapide que' string.Contains'. Cependant, vous devez faire attention si 'line2' peut contenir des caractères spéciaux qui doivent être échappés. –

4

Une façon est de créer une méthode d'extension de chaîne:

if (line.ContainsCaseInsensitive(value)) 
{ 
    // .. 
} 

public static bool ContainsCaseInsensitive(this string source, string find) 
{ 
    return source.IndexOf(find, StringComparison.CurrentCultureIgnoreCase) != -1; 
} 
3

Dans les commentaires fournies par les utilisateurs sur le String.Contains documentation at MSDN, une solution de contournement est fournie.

bool contains = str1.IndexOf(str2, StringComparison.OrdinalIgnoreCase) >= 0;