Split chaine sans séparateur [Résolu]

Signaler
Messages postés
189
Date d'inscription
vendredi 28 mai 2004
Statut
Membre
Dernière intervention
27 novembre 2015
-
Messages postés
834
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
14 janvier 2017
-
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

8 réponses

Messages postés
834
Date d'inscription
samedi 15 novembre 2008
Statut
Membre
Dernière intervention
14 janvier 2017
28
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!
Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
59
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)
Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
59
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)
Messages postés
189
Date d'inscription
vendredi 28 mai 2004
Statut
Membre
Dernière intervention
27 novembre 2015

le substring m'obligera à faire une boucle... alors qu'avec le split une seule instruction suffira...

DT
Messages postés
102
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
24 janvier 2013

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.
Messages postés
102
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
24 janvier 2013

Ta pas trop le choix avec le Split il te faut un caractère séparateur.
Messages postés
189
Date d'inscription
vendredi 28 mai 2004
Statut
Membre
Dernière intervention
27 novembre 2015

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
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
48
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-