Problème avec la fonction Split [Résolu]

mikes32
Messages postés
11
Date d'inscription
lundi 20 décembre 2010
Dernière intervention
28 décembre 2010
- 24 déc. 2010 à 16:50 - Dernière réponse : cs_ShayW
Messages postés
3238
Date d'inscription
jeudi 26 novembre 2009
Dernière intervention
14 mars 2018
- 28 déc. 2010 à 21:40
Bonjour à tous !

Je me présente, je m'appelle Mickaël et je suis étudiant en école d'ingénieurs. Je voudrais faire un code qui me permettrait d'extraire et de ranger suivant les caractères à partir d'une chaîne principale qui change:
En fonction d'une chaîne de caractère donnée par exemple: chaine1()= G1 X52.8 Y68
Z95
G1 X48 Y96
Z95
En supposant que chaine1() est un tableau de K-lignes.

Je voudrais extraire les fonctions G, X, Y, et Z dans 4 tableaux différents tout en conservant l'ordre.
En effet, je voudrai exploiter ce rangement pour "dessiner" un chemin d'outil.

Je pensais procéder ainsi, mais cela ne fonctionne pas du tout:
Dim chaine1(),chaine2,fonctionG(),fonctionX(),fonctionY(),fonctionZ() as string
For i=1 to k
chaine2=chaine(i).Split(" ")
If chaine2="G..." then
fonctionG()=chaine2
End If
If chaine2="X..." then
fonctionX()=chaine2
End if
If chaine2="Y..." then
fonctionY()=chaine2
End if
If chaine2="Z..." then
fonctionZ()=chaine2
End if
Next i

J'ai donc plusieurs problèmes, le premier étant que je n'arrive pas à exploiter la fonction Split...et je ne comprends pas pourquoi. Ensuite, je pensais utiliser les expressions régulières pour les conditions If mais je doute que celle que j'ai écrite soit bonne: "[G][0-99]"...

En espérant avoir un éclairage sur la fonction Split et sur les métacaractères ...

Merci d'avance !
Joyeux Noël à tous !
Afficher la suite 

Votre réponse

27 réponses

Meilleure réponse
cs_Galain
Messages postés
1270
Date d'inscription
mardi 11 novembre 2003
Dernière intervention
24 juillet 2013
- 28 déc. 2010 à 19:02
3
Merci
Salut Mickaêl
colles ce code pour ton bouton
Cela fonctionne
L'erreur vient de la fin du fichier .Txt qui contenait un espace. Et comme le séparateur est justement un espace le programme attendait après ce dernier espace des données iso pour former la dernière ligne. Et comme il n'y avait pas de données le programme plantait

        Dim chemin As String
        Dim line As String
        Dim j, c, k As Integer
        Dim iso() As String
        Dim chaine As String
        Dim Fiso() As String
        Dim Giso() As String
        Dim Miso() As String
        Dim Siso() As String
        Dim Xiso() As String
        Dim Yiso() As String
        Dim Ziso() As String
        Dim isochaine() As String
        Dim delimiter As Char
        Dim iter, iter1 As Long
        Dim gindex, mindex, findex, sindex, xindex, yindex, zindex As Long

        'chemin = "F:\Cours\Birse\SIM Info\Projet\Code.txt"
        chemin = "D:\Outil.txt"
        Dim stm As New IO.StreamReader(chemin)
        k = 0
        j = 0
        c = 0
        'Lecture et Chargement dans un tableau de chaînes
        ReDim iso(0)
        line = stm.ReadLine()
        While line <> Nothing
            iso(k) = line
            Console.WriteLine(line)
            k = k + 1
            ReDim Preserve iso(k)
            line = stm.ReadLine()
        End While
        ReDim Preserve iso(k - 1)

        'Ecriture du tableau de chaînes et vérification graphique
        chaine = ""
        For i = 1 To k - 1
            chaine = chaine & iso(i) & " "
            chaine = chaine & vbCrLf
        Next i
        MsgBox(chaine)
        gindex = 0
        mindex = 0
        findex = 0
        sindex = 0
        xindex = 0
        yindex = 0
        zindex = 0
        delimiter = " "
        For iter = 0 To iso.Length - 1
            isochaine = iso(iter).Split(delimiter)
            For iter1 = 0 To isochaine.Length - 1
                Select Case isochaine(iter1).Substring(0, 1)
                    Case "F" : ReDim Preserve Fiso(findex)
                        Fiso(findex) = isochaine(iter1).Substring(1) + " "
                        findex = findex + 1

                    Case "G" : ReDim Preserve Giso(gindex)
                        Giso(gindex) = isochaine(iter1).Substring(1) + " "
                        gindex = gindex + 1

                    Case "M" : ReDim Preserve Miso(mindex)
                        Miso(mindex) = isochaine(iter1).Substring(1) + " "
                        mindex = mindex + 1

                    Case "S" : ReDim Preserve Siso(sindex)
                        Siso(sindex) = isochaine(iter1).Substring(1) + " "
                        sindex = sindex + 1

                    Case "X" : ReDim Preserve Xiso(xindex)
                        Xiso(xindex) = isochaine(iter1).Substring(1) + " "
                        xindex = xindex + 1

                    Case "Y" : ReDim Preserve Yiso(yindex)
                        Yiso(yindex) = isochaine(iter1).Substring(1) + " "
                        yindex = yindex + 1

                    Case "Z" : ReDim Preserve Ziso(zindex)
                        Ziso(zindex) = isochaine(iter1).Substring(1) + " "
                        zindex = zindex + 1
                End Select
                MessageBox.Show("fonction Iso : " & isochaine(iter1))
            Next
        Next


La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain

Merci cs_Galain 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de cs_Galain
jordane45
Messages postés
23223
Date d'inscription
mercredi 22 octobre 2003
Statut
Contributeur
Dernière intervention
14 novembre 2018
- 24 déc. 2010 à 17:12
0
Merci
Bonjour,
Déjà pour tes IF, ce qui me gène ce sont les caractères utilisés :
If chaine2="G..." then


Les points ne sont pas des "jokers". A la rigueur une astérisque ou un '?' en fonction du langage;...

ensuite, pour indiquer que tu veux savoir si ta chaine commence par G, il faut que utilises une instruction qui regarde Le premier caractère de ta chaine à partir de la gauche. (un truc du genre If LEFT(MaChaine,1)="G" then..
(instruction a trouver en VB2005 car là je te donne ce qu'on utilise en VB6.

Bref.. voila l'idée.
Déjà avec ça tu devrais pouvoir avancer.

Cordialement,
Jordane,
______________________________________________________
Règles du forum à lire avant de poster une question : ICI
Commenter la réponse de jordane45
cs_Galain
Messages postés
1270
Date d'inscription
mardi 11 novembre 2003
Dernière intervention
24 juillet 2013
- 24 déc. 2010 à 17:30
0
Merci
Salut Mickaêl

tout sur Split : Découpe en plusieurs sous chaînes une chaîne de départ, cela par rapport à un séparateur.

Exemple :
Je récupère dans un fichier une chaîne de mots ayant pour séparateur « ; », je veux mettre chaque mot dans un tableau.
Chaîne contenant les mots séparés par « ; »

Dim s As String= "Philippe;Jean ;Toto"
Dim separateur As Char = ";"
Dim nom() As String
nom=s.Split(separateur)

Donne :

nom(0)= "Philippe"
nom(1)= "Jean"
nom(2)= "Toto"

Remarque: Quand on déclare le tableau nom(), on ne donne pas le nombre d'élément, c'est Split qui crée autant d'élément qu'il faut.
En Framework 2, on peut utiliser plusieurs séparateurs différents:

nom=s.Split( New Char() {" "c, ","c, "."c }) 'ici on a 3 séparateurs: l'espace, la virgule et le point.
le c après chaque séparateur veut dire Char, car les séparateurs sont des caractères.

On peut ajouter 2 paramètres permettant d'indiquer le nombre de ligne maximum et forcer l'élimination des lignes vides.

Dim sep() As Char={" "c, ","c, "."c}
Dim nom() As String = S.Split ( sep, 100, StringSplitOptions.RemoveEmptyEntries )

Allons encore plus loin: avant et après le séparateur il peut y avoir des espaces:
Il faut dans ce cas utiliser la méthode Split de la classe Regex:

Imports System.Text.RegularExpressions

Dim S As String = "abc ; def ; ghi"
' On crée un Regex
Dim R As New Regex("\s*;\s*")
' décomposition de ligne en champs
Dim Nom As String() = R.Split(S)

2) Le problème des If : Les points ne sont pas des "jokers"

Utilise la classe Substring pour extraire des morceaux de chaine dans une chaine de caractère

.Substring

Extrait une partie d'une chaîne.
Le premier paramètre indique la position de départ; le second, le nombre de caractères à extraire.

Dim a As String= "Informatique"
MessageBox.show(a.Substring(2,3)) 'Affiche for

Le premier paramètre indique la position du caractère où doit commencer la sous-chaîne, en commençant à la position 0. (les caractères sont comptés 0, 1, 2, 3....
Le second paramètre la longueur de la sous-chaîne.

Exercice 1: comment obtenir les 4 caractères de droite:

Dim a As String= "Informatique"
MessageBox.show(a.Substring(A.Length-4)) 'Affiche ique
Ici on omet le second paramètre,la longueur de la sous-chaîne, va jusqu'a la fin de la chaîne.

Exercice 2: comment obtenir les 3 caractères de gauche:
Dim a As String= "Informatique"
MessageBox.show(a.Substring(0, 3)) 'Affiche inf

3 ) un cours VB Net gratuit et en français : http://plasserre.developpez.com/cours/vb-net/

Bon développement et joyeux Noël

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
Commenter la réponse de cs_Galain
cs_Galain
Messages postés
1270
Date d'inscription
mardi 11 novembre 2003
Dernière intervention
24 juillet 2013
- 24 déc. 2010 à 18:25
0
Merci
Colles ce code dans une feuille dans un mini-projet et tu comprendras comment faire
Pour voir les variables exécutes le en pas à pas

        Dim fonctionG, fonctionX, fonctionY, fonctionZ As String
        Dim i As Integer
        Dim chaine As String = "G1 X52.8 Y68 Z95"
        Dim separateur As Char = " "
        Dim souschaine() As String

        souschaine = chaine.Split(separateur)
        For i = 0 To souschaine.Length
            Select Case souschaine(i).Substring(0, 1)
                Case "G"
                    fonctionG = souschaine(i)
                Case "X"
                    fonctionX = souschaine(i)
                Case "Y"
                    fonctionY = souschaine(i)
                Case "Z"
                    fonctionZ = souschaine(i)
            End Select
        Next i


La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
Commenter la réponse de cs_Galain
mikes32
Messages postés
11
Date d'inscription
lundi 20 décembre 2010
Dernière intervention
28 décembre 2010
- 25 déc. 2010 à 20:24
0
Merci
Merci beaucoup pour ces explications. J'ai rédigé mon programme comme-ceci, mais lorsque je le lance, il me dit que l'index se trouve en dehors des lignes du tableau(à la ligne mis en évidence par ). Je ne comprends pas pourquoi ...


Dim separ() As String
Dim fonctionGiso(), fonctionMiso(), fonctionXiso(), fonctionYiso(), fonctionZiso() As String
For i = 1 To k
separ = iso(i).Split(" ")
Next i

For i = 0 To separ.Length
Select Case separ(i).Substring(0, Len(separ(i)))
Case "G"
fonctionGiso(i) = separ(i)
Case "X"
fonctionMiso(i) = separ(i)
Case "Y"
fonctionXiso(i) = separ(i)
Case "Z"
fonctionZiso(i) = separ(i)
End Select
Next i
MsgBox(fonctionXiso(1))
Commenter la réponse de mikes32
cs_Galain
Messages postés
1270
Date d'inscription
mardi 11 novembre 2003
Dernière intervention
24 juillet 2013
- 26 déc. 2010 à 10:22
0
Merci
Salut Mickaël

Si je comprends bien tu as un tableau nommé iso qui contient des chaines de la forme "G1 X52.8 Y68 Z95"
Iso est le tableau des chaines et souschaine est celui des souschaines

1) En VB Net les tableaux commencent avec l'indice 0
donc : For i = 1 to k peut poser problème. De plus quelle est la valeur de k ?

2) Ta boucle For i = 1 to k
Tu ne traites que le dernier élément du tableau iso dans la seconde boucle : separ contient le tableau de iso(k) et tous les précédents iso sont passés à la trappe

3) Select Case separ(i).Substring(0, Len(separ(i)))
Pour avoir le premier caractère c'est : Select Case separ(i).Substring(0, 1)
De plus le mot clé Len est du VB 6 et non pas du VB Net

4) Msgbox est du VB 6.0. En VB Net on utilise MessageBox.Show

On suppose le tableau iso déjà créé
Testes ce code
Messagebox.Show affiche au fur et à mesure les différentes fonctions

Dim fonctionG, fonctionX, fonctionY, fonctionZ As String ' les 4 fonctions
Dim i As Integer , j as integer ' pour les 2 boucles
Dim separateur As Char = " " ' le séparateur
Dim souschaine() As String ' le tableau des sous-chaines

For i = 0 To iso.length ' on parcourt le tableau iso
    souschaine = iso(i).Split(" ") ' on crée le tableau souschaine
    For j = 0 To souschaine.Length ' pour chaque souschaine
            Select Case souschaine(j).Substring(0, 1) ' 1° caractère de souschaine
                Case "G"
                    fonctionG = souschaine(j)
                Case "X"
                    fonctionX = souschaine(j)
                Case "Y"
                    fonctionY = souschaine(j)
                Case "Z"
                    fonctionZ = souschaine(j)
            End Select
            MessageBox.Show ("Fonction : " & souschaine(j)) ' affichage
        Next j
Next i 


La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
Commenter la réponse de cs_Galain
cs_ShayW
Messages postés
3238
Date d'inscription
jeudi 26 novembre 2009
Dernière intervention
14 mars 2018
- 26 déc. 2010 à 14:39
0
Merci
Salut
Mickael a écrit
Dim fonctionGiso(), fonctionMiso(), fonctionXiso(), fonctionYiso(), fonctionZiso() As String


Alain a écrit
Dim fonctionG, fonctionX, fonctionY, fonctionZ As String ' les 4 fonctions


Il y a une différence
Commenter la réponse de cs_ShayW
cs_Galain
Messages postés
1270
Date d'inscription
mardi 11 novembre 2003
Dernière intervention
24 juillet 2013
- 26 déc. 2010 à 14:54
0
Merci
Merci ShayW

Mickaël utilise des tableaux pour ses fonctions
Moi en exemple je n'ai pas utiliser des tableaux de chaines mais uniquement des chaines de caractères
C'est facile à adapter


La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
Commenter la réponse de cs_Galain
mikes32
Messages postés
11
Date d'inscription
lundi 20 décembre 2010
Dernière intervention
28 décembre 2010
- 27 déc. 2010 à 19:15
0
Merci
Merci pour votre aide !

Mais j'ai toujours un problème qui subsiste:

souschaine = iso(i).Split(" ") ' on crée le tableau souschaine

Visual Studio me donne le message suivant: La référence d'objet n'est pas définie à une instance d'un objet.

Je ne comprends pas, pourtant, j'ai bien chargé le tableau iso() de chaînes de caractères...et en le vérifiant, j'ai toujours le même message d'erreur !
Commenter la réponse de mikes32
cs_Galain
Messages postés
1270
Date d'inscription
mardi 11 novembre 2003
Dernière intervention
24 juillet 2013
- 27 déc. 2010 à 20:28
0
Merci
Salut Mickaël

Rajoutes dans les déclarations : Dim separateur As Char = " " ' le séparateur
Modifie ta ligne ainsi : souschaine = iso(i).Split(separateur) ' on crée le tableau souschaine
Le séparateur doit être de type Char et non de type String

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
Commenter la réponse de cs_Galain
cs_ShayW
Messages postés
3238
Date d'inscription
jeudi 26 novembre 2009
Dernière intervention
14 mars 2018
- 27 déc. 2010 à 20:30
0
Merci
Bonsoir

Peux tu envoyer le bout de code que tu as écrit
Commenter la réponse de cs_ShayW
mikes32
Messages postés
11
Date d'inscription
lundi 20 décembre 2010
Dernière intervention
28 décembre 2010
- 27 déc. 2010 à 20:40
0
Merci
Oui, voilà mon code:

Dim fonctionGiso, fonctionX, fonctionY, fonctionZ As String ' les 4 fonctions
'Dim i As Integer, j As Integer ' pour les 2 boucles
Dim separateur As Char = " " ' le séparateur
Dim souschaine() As String ' le tableau des sous-chaines

For i = 1 To iso.Length ' on parcourt le tableau iso
souschaine = iso(i).Split(separateur) ' on crée le tableau souschaine
For j = 0 To souschaine.Length ' pour chaque souschaine
Select Case souschaine(j).Substring(0, 1) ' 1° caractère de souschaine
Case "G"
fonctionGiso = souschaine(j)
Case "X"
fonctionX = souschaine(j)
Case "Y"
fonctionY = souschaine(j)
Case "Z"
fonctionZ = souschaine(j)
End Select
MessageBox.Show("Fonction : " & souschaine(j)) ' affichage
Next j
Next i

J'ai bien une boucle correcte qui se fait(j'obtiens bien la Messagebox avec "M08", mais à la seconde, à la ligne Select Case souschaine(j).Substring(0, 1), il me dit que l'index se trouve en dehors du tableau... Je ne comprends pas comment celui ci peut être en dehors.

Je rappel, ma fonction iso() contient ce genre de caractères: M08
G1 X28 Y27
Commenter la réponse de mikes32
mikes32
Messages postés
11
Date d'inscription
lundi 20 décembre 2010
Dernière intervention
28 décembre 2010
- 27 déc. 2010 à 20:48
0
Merci
Ah oui, pour le For i=1 to iso.length, j'ai mis la valeur de départ de i=1 car iso() n'est pas défini pour la valeur 0. Donc cela ne fonctionne pas sinon. Par contre, la seconde erreur avec l'index en dehors du tableau je ne comprends toujours pas ...
Commenter la réponse de mikes32
cs_Galain
Messages postés
1270
Date d'inscription
mardi 11 novembre 2003
Dernière intervention
24 juillet 2013
- 27 déc. 2010 à 21:08
0
Merci
Salut Mickaël
J'ai testé ce code et il fonctionne correctement chez moi

 Dim iso() As String
        Dim fonctionGiso(), fonctionXiso(), fonctionYiso(), fonctionZiso() As String ' les 4 fonctions
        Dim i As Integer, j As Integer ' pour les 2 boucles
        Dim separateur As Char = " " ' le séparateur
        Dim souschaine() As String ' le tableau des sous-chaines

        ReDim iso(0 To 3) ' pour 4 chaines
        ReDim fonctionGiso(0 To 3)
        ReDim fonctionXiso(0 To 3)
        ReDim fonctionYiso(0 To 3)
        ReDim fonctionZiso(0 To 3)
        iso(0) = "G1 X52.8 Y68 Z95"
        iso(1) = "G4 X75.8 Y72 Z54"
        iso(2) = "G6 X89.8 Y79 Z78"
        iso(3) = "G9 X95.8 Y81 Z95"
        For i = 0 To iso.Length - 1 ' on parcourt le tableau iso
            souschaine = iso(i).Split(separateur) ' on crée le tableau souschaine
            For j = 0 To souschaine.Length - 1 ' pour chaque souschaine
                Select Case souschaine(j).Substring(0, 1) ' 1° caractère de souschaine
                    Case "G"
                        fonctionGiso(i) = souschaine(j)
                    Case "X"
                        fonctionXiso(i) = souschaine(j)
                    Case "Y"
                        fonctionYiso(i) = souschaine(j)
                    Case "Z"
                        fonctionZiso(i) = souschaine(j)
                End Select
                MessageBox.Show("Fonction : " & souschaine(j)) ' affichage
            Next j
        Next i


- autre chose en VB Net les tableaux commencent à l'indice 0. Dans l'exemple les tableaux ont 4 éléments indicés de 0 à 3

- autre chose les chaines iso() sont-elles toujours avec les mêmes lettres et dans le même ordre et toujours par groupe de 4( ici G X Y et Z) ?

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
Commenter la réponse de cs_Galain
mikes32
Messages postés
11
Date d'inscription
lundi 20 décembre 2010
Dernière intervention
28 décembre 2010
- 27 déc. 2010 à 21:30
0
Merci
Le programme à l'air de fonctionné...

sauf qu'à la ligne Case "G",si il ne trouve pas de fonctions G, cela ne fonctionne pas. J'aurai voulu mettre une condition avec un If, c'est à dire, si le premier caractère de la chaîne est un G, on met la chaîne dans fonctionGiso(), si c'est un M, et ainsi de suite...

Comment je pourrais faire ?


- Et malheureusement non, les chaînes iso() ne sont pas toujours identiques, puisqu'en fait ces chaînes représentent le code ISO (code que l'on donne à une machine à commande numérique) pour lui permettre d'usiner une pièce.

Voilà un exemple (très court et très simplifié), juste pour donner une idée de programme iso:
%2 (nom du programme)
G0 X24 Y24
Z68
S2156
M8
G1 X24 Y23 F100
Z66
G1 X24 Y0
Z66
M02
Commenter la réponse de mikes32
cs_Galain
Messages postés
1270
Date d'inscription
mardi 11 novembre 2003
Dernière intervention
24 juillet 2013
- 27 déc. 2010 à 23:45
0
Merci
Dans ton exemple ce qui t'intéresses c'est de savoir combien il y a de commandes G et leurs valeurs qui vont avec ( faire la même chose pour toutes les lettres de commandes iso qui apparaissent dans une ligne ou dans tout le programme)

Dans ton exemple dans la première ligne il y a un G, un X et un Y
Dans tout le programme il y a 3 G, 3 X, 3 Y, 3 Z, 1 S, 2 M et 1 F

Est le résultat d'une ligne ou d'un programme complet qui t'intéresse ?

Autre chose : les lettres qui peuvent apparaitre vont-elles de A à Z ?

Comment doit être présenté le résultat à l'écran ?

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
Commenter la réponse de cs_Galain
mikes32
Messages postés
11
Date d'inscription
lundi 20 décembre 2010
Dernière intervention
28 décembre 2010
- 28 déc. 2010 à 12:16
0
Merci
C'est le programme complet qui m'intéresse.

Les seuls lettres possibles sont: G,M,S,F,X,Y,Z

En fait, G1 X24 Y24 Z22 F100, donne comme ordre à la machine à commande numérique de se déplacer à vitesse travail=100 mm/min au point de coordonnées (24,24,22). C'est pourquoi je suis intéressé de récupérer toutes les chaînes de caractères puisque mon programme est un programme de test de ces programmes "ordres".

Je dois par exemple vérifier que lors d'un déplacement rapide, l'outil n'entre pas en collision avec le brut.

C'est pourquoi, je voudrai absolument tout mettre dans 7 tableaux pour les lettres G, M,S,F,X,Y,Z et dans l'ordre de la chaîne d'origine.De plus, si on reprends l'exemple précédent de programme:

G0 X24 Y24
Z68
M8
G1 X24 Y23 F100
Z66
G1 X24 Y0
Z66
M02

La 1er ligne contient un G, je veux ranger G0 dans le tableau G, 24 dans le tableau X,24 dans le tableau Y et 68 dans le tableau Z.
La 3 ligne contient M8, je veux ranger 8 dans le tableau M.
La 4 ligne contient G, je veux ranger G1 dans le tableau G, 24 dans le tableau X ...
Et ainsi de suite.
Commenter la réponse de mikes32
cs_ShayW
Messages postés
3238
Date d'inscription
jeudi 26 novembre 2009
Dernière intervention
14 mars 2018
- 28 déc. 2010 à 12:37
0
Merci
Salut
J 'essaye de comprendre
Selon l'exemple précedent on doit obtenir
ceci

F 100
G 0 1 1
M 8 02
S
X 24 24 24
Y 24 23 0
Z 68 66 66
Commenter la réponse de cs_ShayW
mikes32
Messages postés
11
Date d'inscription
lundi 20 décembre 2010
Dernière intervention
28 décembre 2010
- 28 déc. 2010 à 12:47
0
Merci
C'est tout à fait ça que je voudrai obtenir... ^^
Commenter la réponse de mikes32
cs_ShayW
Messages postés
3238
Date d'inscription
jeudi 26 novembre 2009
Dernière intervention
14 mars 2018
- 28 déc. 2010 à 14:22
0
Merci
Salut

pour dépanner

Public Class Formkk
    Private tableiso() As String
    Private Fiso() As String
    Private Giso() As String
    Private Miso() As String
    Private Siso() As String
    Private Xiso() As String
    Private Yiso() As String
    Private Ziso() As String
    Private Sub BuildTableIso()
        Dim k As Integer
        k = 7
        ReDim tableiso(k)
        tableiso(0) = "G0 X24 Y24"
        tableiso(1) = "Z68"
        tableiso(2) = "M8"
        tableiso(3) = "G1 X24 Y23 F100"
        tableiso(4) = "Z66"
        tableiso(5) = "G1 X24 Y0"
        tableiso(6) = "Z66"
        tableiso(7) = "M02"
    End Sub
    Private Sub ParsingIntoTableIso()
        Dim iso() As String
        Dim delimiter As Char
        Dim iter, iter1 As Long
        Dim gindex, mindex, findex, sindex, xindex, yindex, zindex As Long
        gindex = 0
        mindex = 0
        findex = 0
        sindex = 0
        xindex = 0
        yindex = 0
        zindex = 0
        delimiter = " "
        For iter = 0 To tableiso.Length - 1
            
            iso = tableiso(iter).Split(delimiter)
            For iter1 = 0 To iso.Length - 1
                Select Case iso(iter1).Substring(0, 1)
                    Case "F" : ReDim Preserve Fiso(findex)
                        Fiso(findex) = iso(iter1).Substring(1) + " "
                        findex = findex + 1

                    Case "G" : ReDim Preserve Giso(gindex)
                        Giso(gindex) = iso(iter1).Substring(1) + " "
                        gindex = gindex + 1

                    Case "M" : ReDim Preserve Miso(mindex)
                        Miso(mindex) = iso(iter1).Substring(1) + " "
                        mindex = mindex + 1

                    Case "S" : ReDim Preserve Siso(sindex)
                        Siso(sindex) = iso(iter1).Substring(1) + " "
                        sindex = sindex + 1

                    Case "X" : ReDim Preserve Xiso(xindex)
                        Xiso(xindex) = iso(iter1).Substring(1) + " "
                        xindex = xindex + 1

                    Case "Y" : ReDim Preserve Yiso(yindex)
                        Yiso(yindex) = iso(iter1).Substring(1) + " "
                        yindex = yindex + 1

                    Case "Z" : ReDim Preserve Ziso(zindex)
                        Ziso(zindex) = iso(iter1).Substring(1) + " "
                        zindex = zindex + 1
                End Select

            Next
        Next
    End Sub

    Private Sub Formkk_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        BuildTableIso()
        ParsingIntoTableIso()
    End Sub
End Class


Commenter la réponse de cs_ShayW

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.