Split chaine sans séparateur [Résolu]

babe59 189 Messages postés vendredi 28 mai 2004Date d'inscription 27 novembre 2015 Dernière intervention - 11 févr. 2009 à 15:08 - Dernière réponse : cs_Robert33 835 Messages postés samedi 15 novembre 2008Date d'inscription 14 janvier 2017 Dernière intervention
- 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 

8 réponses

Répondre au sujet
cs_Robert33 835 Messages postés samedi 15 novembre 2008Date d'inscription 14 janvier 2017 Dernière intervention - 13 avril 2009 à 09:54
+3
Utile
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!
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Robert33
SharpMao 1025 Messages postés mardi 4 février 2003Date d'inscription 7 juin 2010 Dernière intervention - 11 févr. 2009 à 15:41
0
Utile
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
babe59 189 Messages postés vendredi 28 mai 2004Date d'inscription 27 novembre 2015 Dernière intervention - 11 févr. 2009 à 16:01
0
Utile
le substring m'obligera à faire une boucle... alors qu'avec le split une seule instruction suffira...

DT
Commenter la réponse de babe59
cs_vagg 102 Messages postés vendredi 13 juin 2008Date d'inscription 24 janvier 2013 Dernière intervention - 11 févr. 2009 à 16:03
0
Utile
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
cs_vagg 102 Messages postés vendredi 13 juin 2008Date d'inscription 24 janvier 2013 Dernière intervention - 11 févr. 2009 à 16:08
0
Utile
Ta pas trop le choix avec le Split il te faut un caractère séparateur.
Commenter la réponse de cs_vagg
babe59 189 Messages postés vendredi 28 mai 2004Date d'inscription 27 novembre 2015 Dernière intervention - 11 févr. 2009 à 16:18
0
Utile
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
SharpMao 1025 Messages postés mardi 4 février 2003Date d'inscription 7 juin 2010 Dernière intervention - 11 févr. 2009 à 16:30
0
Utile
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
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 11 févr. 2009 à 21:04
0
Utile
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.