Couper une chaine et la repartir en groupes

Signaler
Messages postés
302
Date d'inscription
samedi 22 octobre 2005
Statut
Membre
Dernière intervention
2 novembre 2008
-
Messages postés
302
Date d'inscription
samedi 22 octobre 2005
Statut
Membre
Dernière intervention
2 novembre 2008
-
Bonjour,

j'ai un probleme : j'aimerais pouvoir couper une chaine de string en portions égales ( exemple : faire des groupes avec 5 caractères à chaque fois ) et placez ces x caractères dans un array pour que je puisse acceder au groupe caracteres par caracteres.
J'arrive déjà à placer le contenue d'une chaine de caracteres dans un tableau :


textBox3.Text.ToCharArray();




MessageBox.Show(textBox3.Text[1]);

Mais je n'arrive pas à grouper la chaine de caracteres en groupes de x caracteres ( x étant variable selon la matrice )

Merci d'avance

9 réponses

Messages postés
427
Date d'inscription
mercredi 1 octobre 2003
Statut
Membre
Dernière intervention
29 janvier 2008
1
Salut voici un exemple

String maChaine = "azertyuiop";
Arraylist maLst = new ArrayList();
int i=0;

while(i< maChaine.Length-2){

maLst.add(maChaine.Substring(i,2));
i=i+2;

}

//parcour de la collection
int i;
for(i=0;i<=maLst.count-1;i++){
MessageBox.show(maLst[i].toString());
}
Messages postés
302
Date d'inscription
samedi 22 octobre 2005
Statut
Membre
Dernière intervention
2 novembre 2008
4
je test demin
merci
Messages postés
2368
Date d'inscription
mardi 17 avril 2001
Statut
Modérateur
Dernière intervention
26 décembre 2007
20
Tu peux faire çà très facilement avec les expression régulières avec le pattern ".{5}" et le split de la regex.

N'importe quel charactere 5 fois.

::|The S@ib|:: MVP C#.NET
Messages postés
302
Date d'inscription
samedi 22 octobre 2005
Statut
Membre
Dernière intervention
2 novembre 2008
4
j'ai essayé de l'adapter pour mes besoins sa marche bien la chaine est decoupé
Mais à la fin j'ai une erreur :

L'exception System.ArgumentOutOfRangeException n'a pas été gérée
Message="L'index et la longueur doivent faire référence à un emplacement situé dans la chaîne.\r\nNom du paramètre : length"
Source="mscorlib"
ParamName="length"
...

Voici le code que j'ai essayé d'adapter pour qu'il soit dynamique :



string maChaine = textBox3.Text;



ArrayList maLst =
new
ArrayList();



int i = 0;



while (i < maChaine.Length)


{


maLst.Add(maChaine.Substring(i, textBox1.Text.Length));



MessageBox.Show(
Convert.ToString(maChaine.Substring(i, textBox1.Text.Length)));


i = i + textBox1.Text.Length;


}

textBox1.Text.Length doit representer le nombre de caractere à inclure dans un groupe
textBox3.Text represente la chaine à couper en X caracteres

Merci de m'aider
Messages postés
2368
Date d'inscription
mardi 17 avril 2001
Statut
Modérateur
Dernière intervention
26 décembre 2007
20
maLst.Add(maChaine.Substring(i, textBox1.Text.Length));
C'est cette ligne là qui n'est pas correcte. La longueur de ton substring ne peut pas etre egale à la longueur de la chaine totale si tu commences a l'index i.

::|The S@ib|:: MVP C#.NET
Messages postés
2368
Date d'inscription
mardi 17 avril 2001
Statut
Modérateur
Dernière intervention
26 décembre 2007
20
Tu n'aurais pas ce problème avec les expressions regulières.

::|The S@ib|:: MVP C#.NET
Messages postés
302
Date d'inscription
samedi 22 octobre 2005
Statut
Membre
Dernière intervention
2 novembre 2008
4
je ne sais pas utiliser les expressions regulieres
aurais tu des exemples ?

merci
Messages postés
2368
Date d'inscription
mardi 17 avril 2001
Statut
Modérateur
Dernière intervention
26 décembre 2007
20
Regex r = new Regex(".{Talongueur}");

foreach(Match m in r.Matches(tachaineadecouper))
{
//Ton traitement sur les blocs.
}

::|The S@ib|:: MVP C#.NET
Messages postés
302
Date d'inscription
samedi 22 octobre 2005
Statut
Membre
Dernière intervention
2 novembre 2008
4
Enfete j'aimerais coder un programme qui accepte une matrice de pérmutation à 2 lignes de longueur variable.
Donc pour faire les remplacements j'ai besoin de diviser la chaine de caractéres à permuter en groupes qui compte le même nombre de caractères que la longueur de la matrice et pouvoir accéder aux lettres de ce groupe facilement pour pouvoir les remplacer

Quel solution est la mieux adapté ?
Comment enlever l'exeption de la premiere methode ?

Merci