Débutant qui n'arrive pas à manipuler des tableaux

Treleau Messages postés 84 Date d'inscription mardi 25 janvier 2011 Statut Membre Dernière intervention 9 février 2011 - 25 janv. 2011 à 18:57
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 - 9 févr. 2011 à 17:52
Bonjour,
Je débute avec visual basic express 2010 et malgré des jours entier à me débattre avec le code je suis incapable de faire un truc tout simple.

Je souhaite découper un texte (un Gcode pour CNC) et réorganiser, dans un certain ordre, les éléments découpés.

J'ai réussi à découper le texte en sous ensembles grâce à :


colUsinages = BlocsGcodesText.Split(SeparateurUsi)

Mais ensuite je ne comprend pas comment manipuler les éléments du tableau pour les remettre dans un ordre précis.
Je bute toujours sur une erreur où VB me dit qu'il est impossible de convertir un Array en String

Je précise que ne comprend rien a la doc de Microsoft sur la classe Array

Merci infiniment de toutes réponses que vous m'apporterez car je suis en grande souffrance

157 réponses

Treleau Messages postés 84 Date d'inscription mardi 25 janvier 2011 Statut Membre Dernière intervention 9 février 2011
2 févr. 2011 à 09:19
Bien, je progresse, les noms de boutons sont acceptés. cependant, à chaque foi qu'ils apparaisent dans le code ils sont soulignés en bleu avec le message suivant :

Une référence à un membre non partagé requière une référence d'objet.


Par exemple :

Private Sub readfile()

Try
listitems = System.IO.File.ReadAllLines( OpenFileDialog1 .FileName)
Codein.Items.Clear()
Codein.Items.AddRange(listitems)
proceed.Enabled = True
Catch ex As Exception
MessageBox.Show("fichier introuvable")
End
End Try

End Sub

Qu'est ce que j'ai fait de mal ?
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
2 févr. 2011 à 11:26
As tu placé tous les autres controls à part
les boutons
2 listbox et un openfiledialog
0
Treleau Messages postés 84 Date d'inscription mardi 25 janvier 2011 Statut Membre Dernière intervention 9 février 2011
2 févr. 2011 à 11:33
Oui, j'ai placé et nommé les deux listbox ainsi que l'openfiledialog
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
2 févr. 2011 à 12:44
il est capricieux le vb
on va encore bricoler autre chose
comment est nommé ta form
qu'est il écrit dans le code ?

Public Class ????
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Treleau Messages postés 84 Date d'inscription mardi 25 janvier 2011 Statut Membre Dernière intervention 9 février 2011
2 févr. 2011 à 14:15
j'ai laissé le nom par défaut :

Public Class Form1
Public Class Form1


  Public Class Formcnc
        Dim listitems() As String
        Dim enditems() As String
        Dim vectorZn() As Double
        Dim newlistitems() As String

        Private Sub readfile()

            Try
                listitems = System.IO.File.ReadAllLines(OpenFileDialog1.FileName)
                Codein.Items.Clear()
                Codein.Items.AddRange(listitems)
                proceed.Enabled = True
            Catch ex As Exception
                MessageBox.Show("fichier introuvable")
                End
            End Try

        End Sub

        Private Sub SearchEndCode()
            Dim array1() As String
            Dim iter As Integer
            iter = listitems.Length - 1
            Do Until listitems(iter).IndexOf("G0 Z") >= 0
                iter -= 1
            Loop
            ReDim array1(iter)
            ReDim enditems(listitems.Length - 1 - iter)
            Array.Copy(listitems, iter, enditems, 0, listitems.Length - iter)
            Array.Copy(listitems, 0, array1, 0, iter - 1)
            ReDim listitems(iter - (listitems.Length - iter))
            Array.Copy(array1, listitems, iter - 2)
        End Sub
        Private Sub CreateZvector()

            'vectorZn contient tous les cotes des GO Z 

            Dim zn As Double
            Dim iterzn As Integer

            Dim iter As Long

            Dim iternewlist As Long
            iternewlist = 0
            iterzn = 0
            ReDim vectorZn(iterzn)
            For iter = 0 To listitems.Length - 1
                If listitems(iter).IndexOf("G0 Z") >= 0 Then
                    'zn le nombre du Go Z
                    Try
                        zn = Double.Parse(listitems(iter).Substring("G0 Z".Length))
                        If Not vectorZn.Contains(zn) Then
                            ReDim Preserve vectorZn(iterzn)
                            vectorZn(iterzn) = zn
                            iterzn += 1
                        End If
                    Catch ex As Exception
                        MessageBox.Show("ERROR CODE G0")
                        End
                    End Try
                End If
            Next
            Array.Sort(vectorZn)
        End Sub


        Private Sub GroupGoZ()
            Dim iterz As Integer
            Dim iterlist As Integer
            Dim itergroup As Integer
            Dim start As Integer
            Dim flagfirst As Boolean
            Dim str As String
            flagfirst = False
            For iterz = 0 To vectorZn.Length - 1
                str = "G0 Z" & vectorZn(iterz) & ".0"
                start = 0
                iterlist = 0
                Do Until iterlist > listitems.Length - 1
                    If listitems(iterlist).IndexOf(str) >= 0 Then
                        If Not flagfirst Then
                            ReDim Preserve newlistitems(iterlist + 1)
                            System.Array.Copy(listitems, newlistitems, iterlist)
                            flagfirst = True
                            newlistitems(iterlist) = "*".PadLeft(60, "*")
                            newlistitems(iterlist + 1) = listitems(iterlist)
                        End If
                        itergroup = iterlist + 1
                        newlistitems(newlistitems.Length - 1) = str
                        Do While listitems(itergroup).IndexOf("G0 Z") < 0
                            ReDim Preserve newlistitems(newlistitems.Length)
                            newlistitems(newlistitems.Length - 1) = listitems(itergroup)
                            itergroup += 1
                            If itergroup = listitems.Length Then
                                Exit Do
                            End If
                        Loop
                        ReDim Preserve newlistitems(newlistitems.Length)
                        newlistitems(newlistitems.Length - 1) = "-".PadLeft(60, "-")
                        iterlist = itergroup
                        ReDim Preserve newlistitems(newlistitems.Length)
                    End If
                    iterlist += 1
                Loop
            Next
            ReDim Preserve newlistitems(newlistitems.Length - 1 + enditems.Length - 1)
            Array.Copy(enditems, 0, newlistitems, newlistitems.Length - enditems.Length, enditems.Length)
        End Sub
        Private Sub showlist()
            Dim path As String = "E:\resulttest.txt" ' à modifier selen le fichier
            System.IO.File.WriteAllLines(path, newlistitems)
            Try
                System.IO.File.Exists(path)
                'messagebox.show("fichier existe")
            Catch ex As Exception
                'messagebox.show("fichier n'existe pas")
            End Try

        End Sub

        Private Sub GcodeIn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FileGcodeName.Click
            OpenFileDialog1.Filter = "Text files (*.txt)|*.txt"
            If OpenFileDialog1.ShowDialog() = DialogResult.OK Then
                readfile()

            End If
        End Sub

        Private Sub Formcnc_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            With FileGcodeName
                .Left = Me.Width / 2 - FileGcodeName.Width / 2
                .Top = Me.Top + FileGcodeName.Height
            End With

            With proceed
                .Enabled = False
                .Left = Me.Width / 2 - proceed.Width / 2
                .Top = FileGcodeName.Bottom + 2
            End With

            With Codein
                .Visible = True
                .Left = Me.Location.X + 6
                .Top = FileGcodeName.Top
                .Width = Me.Width / 2 - 3 * FileGcodeName.Width / 4
                .Height = Me.Height - FileGcodeName.Height * 2
            End With
            With codeout
                .Left = FileGcodeName.Right + 3
                .Top = FileGcodeName.Top
                .Width = Me.Width / 2 - 3 * FileGcodeName.Width / 4
                .Height = Me.Height - FileGcodeName.Height * 2
                codeout.Visible = False
            End With

        End Sub


        Private Sub proceed_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles proceed.Click
            SearchEndCode()
            CreateZvector()
            GroupGoZ()
            codeout.Visible = True
            codeout.Items.Clear()
            codeout.Items.AddRange(newlistitems)
            proceed.Enabled = False

        End Sub
    End Class




 

End Class
0
Treleau Messages postés 84 Date d'inscription mardi 25 janvier 2011 Statut Membre Dernière intervention 9 février 2011
2 févr. 2011 à 14:42
Quel imbécile je fait, j'avais pas compris qu'il fallait renommé le windows form en formcnc.
je suis vraiment désolé à ce rythme ,on est pas sorti de sable.
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
2 févr. 2011 à 14:44
Effaces
Public Class Form1


et aussi le
end class
(le dernier)

c'est tout le problème

ABRACADABRA
0
Treleau Messages postés 84 Date d'inscription mardi 25 janvier 2011 Statut Membre Dernière intervention 9 février 2011
2 févr. 2011 à 15:00
Donc, j'ai réussis à lancer ton application.
J'ai aussi réussis à charger un G-code.
Mais... Quand j'ai cliqué le bouton procéder...

J'ai eu le try catch suivant :

ERROR CODE G0

Alors j'ai testé un autre fichier et là l'exception na pas été géré et j'ai eu, de nouveau,le message suivant :

Le tableau de destination n'est pas assez long. Vérifiez destIndex et la longueur, ainsi que les limites inférieures du tableau.

Au sujet de la ligne :

Array.Copy(array1, listitems, iter - 2)

 Private Sub SearchEndCode()
        Dim array1() As String
        Dim iter As Integer
        iter = listitems.Length - 1
        Do Until listitems(iter).IndexOf("G0 Z") >= 0
            iter -= 1
        Loop
        ReDim array1(iter)
        ReDim enditems(listitems.Length - 1 - iter)
        Array.Copy(listitems, iter, enditems, 0, listitems.Length - iter)
        Array.Copy(listitems, 0, array1, 0, iter - 1)
        ReDim listitems(iter - (listitems.Length - iter))
        Array.Copy(array1, listitems, iter - 2)'Le tableau de destination n'est pas assez long. Vérifiez destIndex et la longueur, ainsi que les limites inférieures du tableau.
    End Sub
0
Treleau Messages postés 84 Date d'inscription mardi 25 janvier 2011 Statut Membre Dernière intervention 9 février 2011
2 févr. 2011 à 15:47
Entre-autres bizarreries, à chaque foi Que je lance l'application, la taille et la position de la listbox est différente.
Quant aux boutons , ils se promènent derrière la listbox et ce, d'une manière différente, à chaque ouverture.
je n'en suis plus à me formaliser pour si peu et qu'importe l'apparence si le code fonctionne. mais peut-être que ce comportement pourra te mettre sur une piste.
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
2 févr. 2011 à 15:57
Private Sub SearchEndCode()
        Dim array1() As String
        Dim iter As Integer
        iter = listitems.Length - 1
        Do Until listitems(iter).IndexOf("G0 Z") >= 0
            iter -= 1
        Loop

        ReDim enditems(listitems.Length - 1 - iter)
        Array.Copy(listitems, iter, enditems, 0, listitems.Length - iter)
        ReDim array1(iter - 1)
        Array.Copy(listitems, 0, array1, 0, array1.Length)
        ReDim listitems(array1.Length - 1)
        Array.Copy(array1, listitems, array1.Length)
    End Sub



un peu embrouiller avec les index
0
Treleau Messages postés 84 Date d'inscription mardi 25 janvier 2011 Statut Membre Dernière intervention 9 février 2011
2 févr. 2011 à 16:11
C'est beaucoup mieux je n'ai plus que le try catch ERROR CODE GO pour tous mes exemples de g-code.
Je reprend espoir.
0
Treleau Messages postés 84 Date d'inscription mardi 25 janvier 2011 Statut Membre Dernière intervention 9 février 2011
2 févr. 2011 à 16:53
J'ai parcouru le code pas à pas(avec F8)et je tombe toujours sur cet os dans le Private Sub CreateZvector()
au niveau du try catch :

Catch ex As Exception
MessageBox.Show("ERROR CODE G0")
End
End Try

Le format de la chaîne d'entrée est incorrect.

Si ça peut aider ?

J'ai aussi corrigé la version Console et je tombe sur le même problème.
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
2 févr. 2011 à 17:28
oui je sais
dans ton code d'entré y a t'il une chaine
G0 Z et après le Z une lettre pas un chiffre

mets un point d'arret à la ligne
zn = Double.Parse(listitems(iter).Substring("G0 Z".Length))


lances le prog et verifie le contenu de
listitems(iter).Substring("G0 Z".Length)
0
Treleau Messages postés 84 Date d'inscription mardi 25 janvier 2011 Statut Membre Dernière intervention 9 février 2011
2 févr. 2011 à 17:47
Alors, pour :

zn : 0.0
listitem(iter) : "G0Z3.0"
iter : 4
"G0Z".length : 4

Je me demande, le 3.0 dans G0Z3.0 c'est un string et pas un integer ?
0
Treleau Messages postés 84 Date d'inscription mardi 25 janvier 2011 Statut Membre Dernière intervention 9 février 2011
2 févr. 2011 à 17:50
Pardon ,j'ai dit une bêtise, je voulais dire un double et pas integer.
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
2 févr. 2011 à 18:26
dans le fichier d'entrée
y a t'il un espace entre G0 Z
ou as tu des G0Z quelque part

la question est peut il avoir un fichier avec
une chaine comme ça G0Z3.0 ou c'est incorrect
au niveau cnc
seulement G0 un espace Z12.0 correct ?
0
Treleau Messages postés 84 Date d'inscription mardi 25 janvier 2011 Statut Membre Dernière intervention 9 février 2011
2 févr. 2011 à 18:50
En effet G0(lire : G,zéro) est un code qui et séparé de Z3.0 par un espace.
cambam l'écrit comme ça, mais je ne peut pas affirmer que ça ne fonctionnerait pas si on écrit G0Z3.0(bien que j'en doute)
Mais normalement il ne doit pas avoir de G0Z dans le G-code(seulement G0 et Z3.0).
0
Treleau Messages postés 84 Date d'inscription mardi 25 janvier 2011 Statut Membre Dernière intervention 9 février 2011
2 févr. 2011 à 19:01
Attend , je dit n'importe quoi!
Effectivement quand j'ouvre un g-code avec ton code ou avec ma version l'espace entre le G0 et le Z3.0 n'apparait plus
alors que dans un bloc-note il apparait bel et bien.

cela pourrait-il être un problème ?
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
2 févr. 2011 à 19:13
je sais quelle est l'erreur
c'est vraiment bizarre dans un post précedent
tu as écrit
listitem(iter) : "G0Z3.0"
ce n'est pas plutot "G0 Z3.0"

j'explique la soi disante erreur
je cherche toutes les chaines contenant le
string G0 Z
s'il trouve donc logiquement ça doit etre
une chaine G0 ZK.0 (k est un chiffre)
maintenant je veux séparer le k.0 (la cote)
j'écris
zn = Double.Parse(listitems(iter).Substring("G0 Z".Length))

qui signifie prend la sous chaine k.0
(il doit contenir seulement des chiffres avec
le point décimal) et convertit la en double
mais si la chaine de conversion contient une lettre c'est l'erreur
Pour cela je ne comprend pas parce que tous
les G0 Z du fichier contiennent que des chiffres
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
2 févr. 2011 à 19:19
c'est le problème
c'est pas possible que l'espace disparait
0
Rejoignez-nous