Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : C# - Récupérer les entiers d'une chaine de caractère [ Mono / Général ] (plop3000)

jeudi 31 mai 2007 à 11:43:29 | C# - Récupérer les entiers d'une chaine de caractère

plop3000

Bonjour,

J'aimerais savoir si il existe une fonction qui permettrait à partir d'une chaine de caractères de retournes les entiers qui sont dans cette chaine.
Par exemple :  fonction("une chaine avec 1 entier") retournerait 1
                      fonction("1 chaine 2 caractères") retournerit 1 et 2 (dans un tableau par exemple).

Voila, si quelqu'un connait une fonction... Je ne vois pas vraiment comment la programmer.

Merci d'avance


jeudi 31 mai 2007 à 11:54:39 | Re : C# - Récupérer les entiers d'une chaine de caractère

catamenia

Membre Club
Bonjour,

Je ne sais pas s'il existe une fonction mais pour la coder je ferais :

- lecture des caratères un par un jusqu'à trouver un chiffre.
- une fois un chiffre trouvé le placer dans une autre chaine temp
- lecture de la suite de la chaine caractere par caractere jusqu'à trouvé autre chose qu'un chiffre en ajoutant chaque chiffre trouvé à la suite de la chaine temp.
- convertir la chaine temp qui est un entier en int et le placer dans une liste.
- vider la chaine temp
- continuer comme ça jusqu'à la fin de la chaine afin de trouver tous les nombres
- renvoyer la liste

jeudi 31 mai 2007 à 12:19:12 | Re : C# - Récupérer les entiers d'une chaine de caractère

sebmafate

Membre Club Administrateur CodeS-SourceS
moi j'utiliserais une expression régulière !

un simple \d+ permet de faire plus de choses !


Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]

jeudi 31 mai 2007 à 14:15:45 | Re : C# - Récupérer les entiers d'une chaine de caractère

plop3000

J'ai fais en gros ce que tu as dis Catamania. Sebmafate, je ne vois pas comment on fait pour utiliser une expression régulière en C#, pourrais tu me donner un exemple simple stp?

Sinon, voila le code que j'ai fait  (si ça peut servir à quelqu'un...)

private

String[] rendLesNumDUnString(String phrase)

{

//prend en parametre une phrase et rend un tableau

//contenant les entiers (ou réels) qui sont dans

//cette phrase

String[] maPhrase = phrase.Split();

String[] tabResult = newString[maPhrase.Length];

//le nombre de mots dans la phrase

int nbMots = maPhrase.Length;

for (int i = 0; i < nbMots; i++)

{

String motCourant = maPhrase[i];

int tailleMotCourant = motCourant.Length;

String debutDeChiffre = "";

//parcours du mot

for (int j = 0; j < tailleMotCourant; j++)

{

String lettreCourante = motCourant.Substring(j,1);

if (unePartieDUnNombre(lettreCourante))

{

debutDeChiffre += lettreCourante;

}

else

{

//ça ne peut pas être un nombre

debutDeChiffre = "";

}

}

if (!(debutDeChiffre.Equals("")) && !(debutDeChiffre.Equals(",")) &&

!(debutDeChiffre.Equals(".")))

{

tabResult[i] = debutDeChiffre;

}

}

return tabResult;

}


(ouch, ça indente mal désolé  !)
Ainsi qu'une fonction qui permet de reconnaitre si une lettre peut faire partie d'un nombre :


privatebool unePartieDUnNombre(String lettre)

{

//prend une lettre (de type string) et rend

//vrai si cette lettre peut faire partie d'un

//nombre (un chiffre ou bien "," ou "."

if(lettre.Equals("0") || lettre.Equals("1") || lettre.Equals("2") ||

lettre.Equals("3") || lettre.Equals("4") || lettre.Equals("5") ||

lettre.Equals("6") || lettre.Equals("7") || lettre.Equals("8") ||

lettre.Equals("9") || lettre.Equals(",") || lettre.Equals(".") ||

//Pour récupérer les pourcentages aussi (à voir)

lettre.Equals("%"))

{

returntrue;

}

else

{

returnfalse;

}

}

ça fonctionne plutot bien (sauf cas particuliers pas encore traité du genre "ma chaine t12" qui rend 12 alors que t12 n'est pas un nombre). Je m'occupe des cas particuliers maintenant   

Merci pour votre aide


jeudi 31 mai 2007 à 14:33:24 | Re : C# - Récupérer les entiers d'une chaine de caractère

sebmafate

Membre Club Administrateur CodeS-SourceS
essaye ceci :

MatchCollection matches = Regex.Matches(phrase, "\b\d+\b");

et dans matches normalement tu as tous les chiffres de ta chaine !


Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]

jeudi 31 mai 2007 à 14:35:46 | Re : C# - Récupérer les entiers d'une chaine de caractère

sebmafate

Membre Club Administrateur CodeS-SourceS
ooops...
MatchCollection matches = Regex.Matches(phrase, @"\b\d+\b");

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]

jeudi 31 mai 2007 à 15:19:12 | Re : C# - Récupérer les entiers d'une chaine de caractère

plop3000

Merci pour ta réponse rapide Sebmafate. J'essaye de faire quelquechose avec une expression régulière maintenant (ça serait beaucoup plus court en code apparement ).

MatchCollection matches = Regex.Matches(phrase, @"^\b*\d+(,?|.?)\d*\b");

J'ai rajouté (,?|.?) car je veux aussi récupérer les chiffres à virgules. Mais je ne vois pas comment il faut faire après pour afficher les résultats (dans une messageBox par exemple) ? J'ai cherché et apparement ça ne fonctionne pas comme un tableau, bien que le MatchCollection contienne a priori plusieurs nombres. Comment se fait le parcours d'un matchCollection puis l'affichage?
J'ai tenté ça :

foreach

(Match m in mc)

{

      MessageBox.Show((m.Groups["$1"]).ToString());

}

mais ça ne fonctionne pas 


jeudi 31 mai 2007 à 15:44:41 | Re : C# - Récupérer les entiers d'une chaine de caractère

plop3000

Réponse acceptée !

Problème résolu, c'est ma regexp qui n'était pas bonne.

Regex

reg = new Regex ( @"\b*\d+(,?|.?)\d*\b" );

MatchCollection matches = reg.Matches(phrase);

foreach ( Match m in matches)

{

         MessageBox .Show(m.Value);

}

Merci tout le monde 


jeudi 31 mai 2007 à 15:50:42 | Re : C# - Récupérer les entiers d'une chaine de caractère

SharpMao

Membre Club
Hello,

Fais attention tout de même, sauf erreur, le . dans les expressions régulières signifie "n'importe qule caractère".
Utilise \. pour matcher un '.'

Si tu veux utiliser un peu les expressions régulières, je te conseille expresso, un excellent programme pour construire et tester des expression régulières, et en plus, c'est gratuit !

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)

jeudi 31 mai 2007 à 15:58:49 | Re : C# - Récupérer les entiers d'une chaine de caractère

Bidou

Administrateur CodeS-SourceS
Y'a aussi le "MAFTOOLS : TESTEUR D'EXPRESSIONS RÉGULIÈRES" qui est gratuit, open source, et le sommet: disponible sur CodeS-SourceS!!!
C'est ici.





-Blog-


1 2

Cette discussion est classé dans : fonction, récupérer, entiers, caractère, chaine


Répondre à ce message

Sujets en rapport avec ce message

Récupérer la taille d'une string [ par cpetitjean ] Y aurait-il un moyen de récupérer la taille d'une string quand on fait un graphics.DrawString() ??En fait je voudrais dessiner un rectangle autour d'u Caractère "Retour chariot" [ par jdaviaud ] Je suis entrain de faire un programme qui récupère des infos depuis internet.Actuellement, je cherche a récupérer chaque ligne en utilisant la fonctio Premiere lettre en majuscule dans une chaine de caractère [ par syl2 ] bonjour,Est-il possible en C# de convertir une chaine de caractère de tel sorte qu'elle ait la première lettre en majuscule et le reste en minuscule ? Tronquer une chaine de caractère [ par cedricvdm ] Bonsoir,Imaginons que je choisis le chemin d'accès de ma base à l'aide d'un OpenFileDialog. Lorsque je renvoie la valeur choisie je trouve ceci "@"C:\ Chaine de caractère accesible n'importe où [ par cedricvdm ] Imaginons ceci dans un Form 1:Choix=listfilm.SelectedIndex;Ma question est, comment est-il possible d'avoir accès la variable Choix lorsque je suis d Ecrire vers une autre appli [ par Abbe ] Bonjour,j'ai un petit probleme j'aimerais créér un prog qui insere une chaine de caractère dans une autre application à la position de curseur(exemple chaine de caractère [ par Ylaosusdiande ] salutcomment extraire une partie depuis une chaine de caractère(en donnant l'index et le length) ?? c'est un peu comme le Mid du vb.merci StringBuilder et caractère 0x00. [ par Pascalbo ] Bonjour,j'utilise une fonction dans une dll qui renvoie une chaine. Pour cela j'ai déclaré:[DllImport("i2c32200.dll", CharSet= CharSet.Ansi)]private s extraire un chiffre d'une chaine de caractère [ par godefrw ] Bonjour, je cherche à ordonnédes fichiers images chargés par l'ulisateur dans mon application. Les ficchier sont obligatoirement numérotés: ils s'appe chaine de caractère [ par emna_bz ] bonjour,je  veux extraire une chaine de caractère à partir d'une autre :comment faireexemple: j'ai la chaine /home/produit.aspx ----> je veux extraire


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 1,030 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.