Mise en forme d'une chaine de caractères [Résolu]

TTMan 104 Messages postés lundi 17 décembre 2001Date d'inscription 12 février 2007 Dernière intervention - 22 déc. 2005 à 17:07 - Dernière réponse : TTMan 104 Messages postés lundi 17 décembre 2001Date d'inscription 12 février 2007 Dernière intervention
- 23 déc. 2005 à 13:01
Bonjour!

J'utilise une variable de type "string" en C# et j'aimerais la formatter en "Nom Propre", c'est à dire, une majuscule à chaque nouveau mot avec (ça serait le top) la possibilité d'exclure certains mots comme "le", "la", "de"....
Si quelqu'un a vu un bout de code sympa qui pourrais me mettre sur la voie ou carrément une classe de manipulation de string déjà bien aboutie, je suis preneur...
Merci!

TTMan

PS: c'est assez UrgenT.
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
TheSaib 2369 Messages postés mardi 17 avril 2001Date d'inscription 26 décembre 2007 Dernière intervention - 22 déc. 2005 à 23:30
3
Merci
En bourrin çà donne çà :

string[] mots = phrase.Split(' ');


StringCollection badWords =
new StringCollection();
badWords.Add("le");
badWords.Add("la");
System.Text.StringBuilder sb =
new System.Text.StringBuilder();



for (
int i = 0; i < mots.Length; ++i)
{

string mot = mots[i];
mot = !badWords.Contains(mot.ToLower()) ? mot.Remove(0,1).Insert(0,
char.ToUpper(mot[0]).ToString()) : mot;
sb.AppendFormat("{0} ", mot);
}
phrase = sb.ToString();

::|The S@ib|::
MVP C#.NET

Merci TheSaib 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de TheSaib
Meilleure réponse
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 23 déc. 2005 à 12:05
3
Merci
d'ailleur, je viens de me rendre compte qu'il manque un truc dans mon code :

private string UpperCaseWordsInSentence(string sentence) {
StringBuilder ret = new StringBuilder();
StringCollection badWords = new StringCollection();
// c'est une bonne id‚e ca ;)
badWords.Add("le");
badWords.Add("la");
// etc...
Regex regex = new Regex(@"\w+");
// recherche tous les mots de la chaine
int index = 0;
foreach (Match m in regex.Matches(sentence))
{
ret.Append(sentence.Substring(index, m.Index - index));
if (badWords.Contains(m.Value.ToLowerInvariant()))
{
ret.Append(m.Value);
} else {
ret.Append(m.Value.Substring(0, 1).ToUpper());
ret.Append(m.Value.Substring(1).ToLower());
}
index = m.Index + m.Length;
}
ret.Append(sentence.SubString(index));
return ret.ToString();
}

le même code avec un for à la place du foreach :
private string UpperCaseWordsInSentence(string sentence) {
StringBuilder ret = new StringBuilder();
StringCollection badWords = new StringCollection(); // c'est une bonne id‚e ca ;)
badWords.Add("le");
badWords.Add("la");
// etc...
Regex regex = new Regex(@"\w+");
// recherche tous les mots de la chaine
int index = 0;
Match m;
MatchCollection matches = regex.Matches(sentence);
for (int i=0; i< matches.Count; i++)
{
m = matches[i];
ret.Append(sentence.Substring(index, m.Index - index));
if (badWords.Contains(m.Value.ToLowerInvariant()))
{
ret.Append(m.Value);
} else {
ret.Append(m.Value.Substring(0, 1).ToUpper());
ret.Append(m.Value.Substring(1).ToLower());
}
index = m.Index + m.Length;
}
ret.Append(sentence.SubString(index));
return ret.ToString();
}

Sébastien FERRAND
[MVP C#]

Merci sebmafate 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de sebmafate
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 23 déc. 2005 à 09:33
0
Merci
en non bourin, ca donne ca :



private
string UpperCaseWordsInSentence(
string sentence) {

StringBuilder ret =
new
StringBuilder();

StringCollection badWords =
new
StringCollection();
// c'est une bonne id‚e ca ;)
badWords.Add(
"le");
badWords.Add(
"la");
// etc...
Regex regex =
new
Regex(
@"\w+");
// recherche tous les mots de la chaine
int index = 0;

foreach (
Match m
in regex.Matches(sentence))
{
ret.Append(sentence.Substring(index, m.Index - index));

if (badWords.Contains(m.Value.ToLowerInvariant()))
{
ret.Append(m.Value);
}
else {
ret.Append(m.Value.Substring(0, 1).ToUpper());
ret.Append(m.Value.Substring(1).ToLower());
}
index = m.Index + m.Length;
}

return ret.ToString();
}



un exemple :
Bonjour!


J'Utilise Une Variable De Type "String" En C# Et J'Aimerais la Formatter En "Nom Propre", C'Est À Dire, Une Majuscule À Chaque Nouveau Mot Avec (Ça Serait le Top) la Possibilité D'Exclure Certains Mots Comme "le", "la", "De"....
Si Quelqu'Un A Vu Un Bout De Code Sympa Qui Pourrais Me Mettre Sur la Voie Ou Carrément Une Classe De Manipulation De String Déjà Bien Aboutie, Je Suis Preneur...
Merci

Sébastien FERRAND
[MVP C#]
Commenter la réponse de sebmafate
TheSaib 2369 Messages postés mardi 17 avril 2001Date d'inscription 26 décembre 2007 Dernière intervention - 23 déc. 2005 à 11:23
0
Merci
En encore moins bourrins tu compiles ta regex.

Bien que le tiens soit plus propre , je me demande si il est plus rapide.

::|The S@ib|::
MVP C#.NET
Commenter la réponse de TheSaib
TheSaib 2369 Messages postés mardi 17 avril 2001Date d'inscription 26 décembre 2007 Dernière intervention - 23 déc. 2005 à 11:36
0
Merci
Bon
Le tiens est deux-trois fois plus long en normal et deux fois en compilé sur un texte de 700 lignes.

NB : Dans les 3 cas ca prends moins de deux secondes.

::|The S@ib|::
MVP C#.NET
Commenter la réponse de TheSaib
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 23 déc. 2005 à 11:58
0
Merci
mouaip... la regex qui fait ca...

on doit aussi pouvoir optimiser la boucle en mettant un for à la place du foreach

Sébastien FERRAND
[MVP C#]
Commenter la réponse de sebmafate
TTMan 104 Messages postés lundi 17 décembre 2001Date d'inscription 12 février 2007 Dernière intervention - 23 déc. 2005 à 13:01
0
Merci
Merci à tous les deux. Vous m'enlevez une grosse épine du pied.


TTMan
Commenter la réponse de TTMan

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.