Split chaine sans séparateur [Résolu]

Messages postés
189
Date d'inscription
vendredi 28 mai 2004
Dernière intervention
27 novembre 2015
- 11 févr. 2009 à 15:08 - Dernière réponse :
Messages postés
835
Date d'inscription
samedi 15 novembre 2008
Dernière intervention
14 janvier 2017
- 13 avril 2009 à 09:54
Bonjour

j'ai une chaine des 40 caractères (longueur fixe). Cette chaine contient que des chiffres et est renseignée par paquet de 10 chiffres (soit 4 paquets maxi)

Ex 1 : "01234567899876543210                                      "
Ex 2 : "0123456789                                                          "
Ex 3 : 0123456789012345678901234567890123456789"

J'aimerai spliter cette chaine et la mettre dans un tableau de string.
J'essaye, sans réussite avec les regex.
pouvez vous m'aider ?

DT
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Messages postés
835
Date d'inscription
samedi 15 novembre 2008
Dernière intervention
14 janvier 2017
- 13 avril 2009 à 09:54
3
Merci
Bonjour,

Bien que je sois d'accord avec Bidou,
Mais si on ne connait pas la longeur des chaines, et si, comme dans l'exemple, elles possedent d'autres caracteres (padding) je pense qu'un regex avec une pattern = "(\d{10})" devrait suffire.

private
Regex MyRegex =
new
Regex(

   "([file://\\d{10 \\d{10]})",

   RegexOptions.IgnoreCase
   |
RegexOptions.Multiline
    |
RegexOptions.ExplicitCapture
   |
RegexOptions.CultureInvariant
   |
RegexOptions.Compiled
   );

private
void Search(
string s)
{

   MatchCollection ms = MyRegex.Matches(s);

   Console.WriteLine(
"Trouvé {0} chaines de 10 caracteres dans '{1}'", ms.Count, s);

   foreach (
Match m
in ms)

      Console.WriteLine(m.ToString());
}

private
void button1_Click(
object sender,
EventArgs e)
{

   string Ex1 =
"01234567899876543210                                      ";

   string Ex2 =
"0123456789                                                          ";

   string Ex3 =
"0123456789012345678901234567890123456789";

   Search(Ex1);
   Search(Ex2);
   Search(Ex3);

}

C# is amazing, enjoy it!

Merci cs_Robert33 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de cs_Robert33
Messages postés
1025
Date d'inscription
mardi 4 février 2003
Dernière intervention
7 juin 2010
- 11 févr. 2009 à 15:41
0
Merci
Hello,

Essaie plutôt avec SubString

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
Commenter la réponse de SharpMao
Messages postés
189
Date d'inscription
vendredi 28 mai 2004
Dernière intervention
27 novembre 2015
- 11 févr. 2009 à 16:01
0
Merci
le substring m'obligera à faire une boucle... alors qu'avec le split une seule instruction suffira...

DT
Commenter la réponse de babe59
Messages postés
102
Date d'inscription
vendredi 13 juin 2008
Dernière intervention
24 janvier 2013
- 11 févr. 2009 à 16:03
0
Merci
Sinon j'ai trouvé un petit truc certes sans le SubString : (là je récupère tes lots de 10 char dans un tableau)

            string[] tbstr = new string[4];
            string tonStr = "01234567899876543210                                      ";
            string stmp;
            for (int i = 0; i < tbstr.Length; i++)
            {
                stmp = tonStr.Remove(10, tonStr.Length - 10);
                tonStr = tonStr.Remove(0, 10);
                tbstr[i] = stmp;
            }

Ca fonctionne comme tu le souhaite, enfin je pense.

En espérant t'avoir mis sur la voie.
Commenter la réponse de cs_vagg
Messages postés
102
Date d'inscription
vendredi 13 juin 2008
Dernière intervention
24 janvier 2013
- 11 févr. 2009 à 16:08
0
Merci
Ta pas trop le choix avec le Split il te faut un caractère séparateur.
Commenter la réponse de cs_vagg
Messages postés
189
Date d'inscription
vendredi 28 mai 2004
Dernière intervention
27 novembre 2015
- 11 févr. 2009 à 16:18
0
Merci
en fait, je ne suis pas loin de la vérité avec string

pattern =
@"^(\d{10})(\d{10})(\d{10})$";
mais j'ai une occurence vide en plus dans mon tableau de string... Je suis donc convaincu que c'est possible avec un simple "REGEX"

DT
Commenter la réponse de babe59
Messages postés
1025
Date d'inscription
mardi 4 février 2003
Dernière intervention
7 juin 2010
- 11 févr. 2009 à 16:30
0
Merci
Hello,

Pas besoin de boucle :

string[] stringArray = new string[]{  theString.Substring(0,10),
                theString.Substring(10,10),
                theString.Substring(20,10),
                theString.Substring(30,10)};

Et tu as une tableau de string avec tes valeurs dedans.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
Commenter la réponse de SharpMao
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Dernière intervention
20 juin 2013
- 11 févr. 2009 à 21:04
0
Merci
Depuis quand on peut dire qu'une seule instruction est plus rapide que trois de suite?
Je dirais même qu'en principe, c'est plutôt l'inverse...

En l'occurance, sur une chaîne pas trop longue, j'aurais tendance à dire que la Regex sera moins bonne.
A tester...

<hr />
-Blog-
-Site Perso-
Commenter la réponse de cs_Bidou

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.