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

Signaler
Messages postés
11
Date d'inscription
lundi 20 décembre 2010
Statut
Membre
Dernière intervention
28 décembre 2010
-
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
-
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 !

27 réponses

Messages postés
11
Date d'inscription
lundi 20 décembre 2010
Statut
Membre
Dernière intervention
28 décembre 2010

Merci pour ce code !

Mais une fois adapté, j'ai une erreur à chaque fois ici:

isochaine = iso(iter).Split(delimiter)

Il me dit que: "La référence d'objet n'est pas définie à une instance d'un objet."

Et je ne comprends toujours pas ....
Messages postés
11
Date d'inscription
lundi 20 décembre 2010
Statut
Membre
Dernière intervention
28 décembre 2010

Je met tout le code en rapport :

Public Sub ChargerUnFichierToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ChargerUnFichierToolStripMenuItem.Click
Dim chemin As String
chemin = "F:\Cours\Birse\SIM Info\Projet\Code.txt"
Dim stm As New IO.StreamReader(chemin)
Dim line As String
Dim j, c As Integer
k = 0
j = 0
c = 0
'Lecture et Chargement dans un tableau de chaînes
line = stm.ReadLine()
While line <> Nothing
Console.WriteLine(line)
k = k + 1
ReDim Preserve iso(k)
iso(k) = line
line = stm.ReadLine()
End While

'Ecriture du tableau de chaînes et vérification graphique
chaine = ""
For i = 1 To k
chaine = chaine & iso(i) & " "
chaine = chaine & vbCrLf
Next i
MsgBox(chaine)



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
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 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

Voilà, voilà ...
Messages postés
11
Date d'inscription
lundi 20 décembre 2010
Statut
Membre
Dernière intervention
28 décembre 2010

Merci beaucoup !

Je n'aurai jamais pensé que l'erreur pouvait venir du chemin d'accès au fichier !
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
Tu peux lire tout le fichier d'un coup
Dim chemin As String = "D:\Outil.txt"
Dim iso As List(Of String) = System.IO.File.ReadAllLines(chemin).ToList
Messages postés
1263
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
24 juillet 2013
6
Salut Mickaël

L'erreur que j'ai signalée au post précédent était une erreur sur mon fichier exemple
L'erreur que toi tu as commise est ici dans cette partie de code

delimiter = " "
For iter = 0 To iso.Length - 1

isochaine = iso(iter).Split(delimiter)
For iter1 = 0 To iso.Length - 1 <---- ici
Select Case iso(iter1).Substring(0, 1) <--- ici aussi
Case "F" : ReDim Preserve Fiso(findex)
Fiso(findex) = iso(iter1).Substring(1) + " " <--- ici aussi
findex = findex + 1

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

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

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

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

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

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

Next
Next

il faut remplacer iso(iter1).substring(1) par isochaine(iter1).substring(1)

iso() est le tableau des lignes du fichier et isochaine est le tableau des commandes iso contenues dans une ligne du fichier

Pour supprimer l'erreur due à l'espace rajoute cette ligne

For iter = 0 To iso.Length - 1
iso(iter) = iso(iter).Trim(delimiteur) <----- à rajouter
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

Trim supprime les caractères en début et en fin de chaine et comme on demande de supprimer le délimiteur espace on supprime les espaces de début et de fin de chaine

Je te remets ici le code complet qui gère les 2 erreurs
 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 delimiteur 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
        delimiteur = " "
        For iter = 0 To iso.Length - 1
            iso(iter) = iso(iter).Trim(delimiteur)
            isochaine = iso(iter).Split(delimiteur)
            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
Messages postés
1263
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
24 juillet 2013
6
Avec la méthode de lecture du fichier donné par ShayW c'est encore plus simple
Cette fois on tient le bon bout
Merci ShayW pour ton bout de code

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 delimiteur As Char
        Dim iter, iter1 As Long
        Dim gindex, mindex, findex, sindex, xindex, yindex, zindex As Long

        'Lecture et Chargement dans un tableau de chaînes
        Dim chemin As String = "D:\Outil.txt" ' à modifier selen le fichier
        Dim iso As List(Of String) = System.IO.File.ReadAllLines(chemin).ToList
        'Ecriture du tableau de chaînes et vérification graphique
        chaine = ""
        For i = 0 To iso.Count - 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
        delimiteur = " "
        For iter = 0 To iso.Count - 1
            iso(iter) = iso(iter).Trim(delimiteur)
            isochaine = iso(iter).Split(delimiteur)
            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
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
De rien
ça me permet d'apprendre

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.