6
votes

C # stringreader classe

J'ai ce problème, j'utilise StringReader pour trouver des mots spécifiques à partir d'une zone de texte, jusqu'à présent, il faut beaucoup de travail, mais je dois trouver un moyen de vérifier comment vérifier des mots spécifiques dans chaque ligne contre un tableau à chaîne.

Le code suivant fonctionne: p> xxx pré>

MAINTENANT, j'ai créé une matrice de chaîne pour stocker plusieurs chaînes, mais la méthode contient semble seulement accepter une chaîne. P>

string[] systemsarray = new string[] { "as400", "x500", "mainframe" };

if(txt.Contains(systemsarray))
{
    systems++;
}
// error message: cannot convert from string[] to string


0 commentaires

4 Réponses :


9
votes

Si vous recherchez l'existence de l'un de ces mots de la ligne, essayez:

if(systemsarray.Any(word => txt.Contains(word)))
{
    users++;
}


4 commentaires

Ou simplement si (Systemersarray.any (txt.contains))


Difficile de dire pour certains que le pouvoir veut, mais s'ils ont besoin d'un compte, remplacez tout avec comptent et stockez-le dans systèmes .


@ Moo-Juice La réponse Hocsanmoya sélectionnée est effectivement la même que celle-ci, seulement déroulante dans une boucle au lieu d'une doublure à l'aide de Linq.


Bonjour, je viens de le faire, je suis désolé pour ça.



5
votes

Pourquoi ne pas vous écrire une méthode d'extension pour faire cela? XXX PRE>

Utilisation: P>

string[] systemsarray = new string[] { "as400", "x500", "mainframe" };

if(txt.ContainsAny(systemsarray))
{
    systems++;
}
// error message: cannot convert from string[] to string


1 commentaires

Merci très utile!



5
votes

Vous devez extraire chaque élément de votre tableau:

foreach (string item in systemsarray)
{
 if(txt.Contains(item))
 {
    systems++;
 }
}


1 commentaires

@Luameludik, désolé de vous soucier de nouveau, je me demandais saviez-vous comment vous débarrasser des duplicats? J'ai essayé plusieurs choses et je ne travaille toujours pas, j'ai créé un nouveau tableau à chaîne et j'ai essayé de supprimer les duplicats ... String [] Systems2 = nouvelle chaîne [] {élément}; IEnumerable distinctsystem = Systems2.Distinct (); foreach (chaîne theString in distinctsystem) {Systems ++; }



2
votes

Si vous voulez une recherche insensible au cas ( AS400 correspondra as400 ), vous pouvez faire ce xxx

vous pouvez supprimer stringcomparonison.ordinalInignorecase Si vous souhaitez prendre en compte le cas ( ou choisissez une valeur d'énorme différente).


3 commentaires

Bonjour, merci pour votre aide, quelque chose que j'ai fait était de convertir tout le texte en minuscule; comme ça; texte texte = textinput.text.tObower (); Mais je vais prendre cela en considération, merci encore!


@HOCSANMOYA - De rien. Comme note latérale, la conversion et la vérification des minuscules n'est pas recommandée. Vous devez généralement utiliser le chèque de comparaison ci-dessus ou le convertir en majuscules à la place Plus d'infos .


Salut! Merci, dans ce cas, je suivrai vos conseils.