Comparaison de chaînes [Résolu]

Signaler
Messages postés
14
Date d'inscription
dimanche 11 mai 2003
Statut
Membre
Dernière intervention
30 avril 2012
-
Messages postés
14947
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
21 janvier 2021
-
Bonjour,

Nos banques Exchange sont réparties en fonction des 3 premières lettres du nom de l'utilisateur, par exemple :
de D à DEL, serveur S1 - banque B1
de DEM à EZZ, serveur S2 - banque B2...
Dans le fichier Properties, j'ai ajouté les clés/valeurs correspondantes :
DàDEL/serveurS1-banqueB1
DEMàEZZ/serveurS2-banqueB2...
Pas de problème pour récupérer les 3 premiers caractères de la saisie du nom,
puis je splitte les clés sur le "à" pour obtenir une éventuelle plage. Ex : pour la clé "DàDEL", "D " (avec des espaces pour les noms à particule) pour le début et "DEL" pour la fin, mais je n'ai pas d'idée pour savoir dans quelle plage se situe la saisie.

Merci pour votre aide

5 réponses

Messages postés
14947
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
21 janvier 2021
93
Cool...
Du coup, je te propose de cliquer sur le bouton "réponse acceptée" pour clore le sujet.


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
14947
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
21 janvier 2021
93
Hello,
Je n'ai pas bien compris ta demande...Peux-tu être un peu plus clair, s'il te plaît?


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
14
Date d'inscription
dimanche 11 mai 2003
Statut
Membre
Dernière intervention
30 avril 2012

Ok, d'abord bonjour et merci de t'intéresser à mon pb.
C'est vrai que c'est un peu confus.
Bon, j'écris un petit soft pour créer des comptes utilisateurs dans AD avec dans la foulée leur boîte aux lettre Exchange. C'est du classique sauf que les boîtes peuvent être créées sur 2 serveurs différents avec chacun plusieurs banques. Afin de répartir le nombre d'utilisateurs sur les différents serveurs et banques, le choix s'effectue en fonction du nom de l'utilisateur : tous les noms commençant par la lettre "A" auront une BAL sur le serveur XXXXXXXXX33 dans la banque SG1/S2, pour la lettre "B", ce sera serveur XXXXXXXXX33, banque SG2/S2...
Pour les noms en "D", plus nombreux, on scinde en 2 : de "D" à "DEL" sur tel serveur et telle banque et de "DEM" à "E" : autre serveur et autre banque. Ceci constitue donc des plages d'attribution de serveurs et de banques en fonction du nom (récupéré dans le textbox de saisie). Ces plages peuvent évoluer, c'est pourquoi j'utilise le fichier app.config (xml : tranquille). Ex pour un nom en "A" :
<setting name="AàAZZ" serializeAs="String">
<value>XXXXXXXXXXX33-SG1-S1</value>
</setting>
name="AàAZZ" me déterminer une plage de "A" à "AZZ" (en splittant sur le caractère "à") et <value>XXXXXXXXXXX33-SG1-S1 me donne le serveur et la banque.
Maintenant je ne vois pas comment tester si la valeur du textbox est dans cette plage.

Maintenant, c'est cette méthode qui m'est venue à l'idée, car je ne veux pas faire de "if", "elseif" .. ou de "case" dans le code mais s'il y a autre chose, je suis preneur.

N'hésite pas à me demander des précisions.

D'avance merci
Messages postés
14947
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
21 janvier 2021
93
Ah ok, c'est une simple comparaison de chaine alors.
Le retour de la fonction String.Compare te dit si une chaine1 est "inférieure" ou "supérieure" à une chaine2. Il te suffit de spécifier, en 3e paramètre StringComparer.OrdinalIgnoreCase pour avoir un ordonnancement suivant l'ordre alphabétique, indépendamment de la case.

Après, tu ne vas pas pouvoir échapper à un enchainement de if, j'en ai bien peur...

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
14
Date d'inscription
dimanche 11 mai 2003
Statut
Membre
Dernière intervention
30 avril 2012

Bonsoir Buno.
Cool, ça marche. C'est exactement ce qu'il me fallait. Tu m'as évité de m'embarquer dans des trucs tarabiscotés. Si ça peut aider, voici le petit bout de code où sender est MaskedTextBox de la saisie du nom + un extrait da app.config :



...
<setting name="DàDEL" serializeAs="String">
<value>XXXXXXXXX34-SG1-Standard1</value>
</setting>
...

private void setBank(object sender, EventArgs e)
{
foreach (var item in Properties.Settings.Default.Properties)
{
SettingsProperty it = (SettingsProperty)item;
MaskedTextBox mtb = (MaskedTextBox)sender;
int a = string.Compare(mtb.Text, it.Name.Split('à')[0], true);
int b = string.Compare(mtb.Text, it.Name.Split('à')[1], true);
if ((a 1) && (b -1))
{
textBox1.Text = it.DefaultValue.ToString();
}
}
}




Encore merci et si quelqu'un a besoin de plus de précisions, qu'il n'hésite pas