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
31 janv. 2011 à 14:22
Oui et j'ai même pas oublié le .txt
j'ai essayé avec plusieurs chemins, mais rien.


 Private Sub showlist()
        Dim path As String = "C:\Documents and Settings\JUGUET\coussin_base_sandy_result.txt" ' à modifier selen le fichier
        System.IO.File.WriteAllLines(path, newlistitems)
    End Sub
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
31 janv. 2011 à 15:00
quand tu dis rien
le fichier coussin_base_sandy_result.txt
n'existe pas dans le répertoire C:\Documents and Settings\JUGUET\

ou est il vide ?
0
Treleau Messages postés 84 Date d'inscription mardi 25 janvier 2011 Statut Membre Dernière intervention 9 février 2011
31 janv. 2011 à 17:14
Je le cherche avec l'explorateur Windows et rien, nada, que dalle ?
même pas un petit fichier vide.
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
31 janv. 2011 à 20:51
ajoutes ces quelques lignes à la sub showlist

Try
            System.IO.File.Exists(path)
            Console.WriteLine("fichier existe")
        Catch ex As Exception
            Console.WriteLine("fichier n'existe pas")
        End Try


qu'as tu obtenu comme message
0

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

Posez votre question
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
31 janv. 2011 à 20:53
pour ne pas se tromper
Private Sub showlist()
        Dim path As String = "E:\resulttest.cnc" ' à modifier selen le fichier
        System.IO.File.WriteAllLines(path, newlistitems)
        Try
            System.IO.File.Exists(path)
            Console.WriteLine("fichier existe")
        Catch ex As Exception
            Console.WriteLine("fichier n'existe pas")
        End Try

    End Sub
0
Treleau Messages postés 84 Date d'inscription mardi 25 janvier 2011 Statut Membre Dernière intervention 9 février 2011
31 janv. 2011 à 21:40
Je te remercie de cette nouvelle tentative, j'ai copier collé dans le sub...
Je suis véritablement désolé, je dois être nul, mais je n'ai pas d'amélioration.
Il y à forcément un truc que j'ai loupé, je cherche encore.
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
31 janv. 2011 à 22:11
quel message as tu reçu dans la console ?
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
31 janv. 2011 à 22:49
encore une tentative
c'est pas logique

mets un point d'arret à la ligne try dans la
sub showlist
lances le prog et quand ça atteindra le point
d'arret continues step by step touche F8 et regardes quelle ligne est executée
0
Treleau Messages postés 84 Date d'inscription mardi 25 janvier 2011 Statut Membre Dernière intervention 9 février 2011
1 févr. 2011 à 08:30
Je parcour le code pas à pas avec la touche f8 et j'ai juste ce message d'erreur : Le format de la chaîne d'entrée est incorrect. au niveau dee la ligne Catch ex As Exception (je l'ai reproduit en commentaire)


 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                             ' Le format de la chaîne d'entrée est incorrect.
                    Console.WriteLine("ERROR CODE G0")
                    End
                End Try
            End If
        Next


j'espère que cela pourra aider.
0
Treleau Messages postés 84 Date d'inscription mardi 25 janvier 2011 Statut Membre Dernière intervention 9 février 2011
1 févr. 2011 à 08:34
Je rajoute que le Private Sub showlist() n'est pas exécuté.
0
Treleau Messages postés 84 Date d'inscription mardi 25 janvier 2011 Statut Membre Dernière intervention 9 février 2011
1 févr. 2011 à 10:39
J'ai tenté autre chose. J'ai copié collé le g-code que j'ai posté plus haut, je l'ai enregistré sur mon disque et j'ai copié le chemin dans ton code. J'ai lancé le débogage et j'ai obtenu ce message :

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




 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



Si ça peut t'aider.
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
1 févr. 2011 à 11:11
Salut
on va mener une enquete Agatha Christie
ABC contre CNC
tout d'abord envoies le dernier code de la
console qui ne marche pas
envoies le meme si c'est le meme que le mien
0
Treleau Messages postés 84 Date d'inscription mardi 25 janvier 2011 Statut Membre Dernière intervention 9 février 2011
1 févr. 2011 à 11:50
indice n° 1
Voici le code copier coller de ma console.


Module Module1
    Dim listitems() As String
    Dim enditems() As String
    Dim vectorZn() As Double
    Dim newlistitems() As String

    Private Sub readfile()
        Dim path As String = "C:\Documents and Settings\JUGUET\testGcode.txt" ' à modifier selen le fichier
        Try
            listitems = System.IO.File.ReadAllLines(path)
        Catch ex As Exception
            Console.WriteLine("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
                    Console.WriteLine("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 = "C:\Documents and Settings\JUGUET\testGcodeResult.txt" ' à modifier selen le fichier
        System.IO.File.WriteAllLines(path, newlistitems)
        Try
            System.IO.File.Exists(path)
            Console.WriteLine("fichier existe")
        Catch ex As Exception
            Console.WriteLine("fichier n'existe pas")
        End Try

    End Sub
    Sub Main()
        readfile()
        SearchEndCode()
        CreateZvector()
        GroupGoZ()
        showlist()
    End Sub

End Module




   
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
1 févr. 2011 à 14:22
j'ai testé tout marche
donc le problème n'est pas le code
le fichier testGcode.txt est le meme que le mien ?
c'est le meme de celui du 1er post ?
par précaution je l'ai copié collé de nouveau
dans un text document notepad
testé de nouveau tout marche

l'enquete est dans l'impasse
0
Treleau Messages postés 84 Date d'inscription mardi 25 janvier 2011 Statut Membre Dernière intervention 9 février 2011
1 févr. 2011 à 14:45
Je me doutai bien que ton code n'est pas en cause.

Effectivement,j'ai testé avec le g-code que j'ai posté pus haut. Par précaution, je précise qu'il s'agit de la version [u]sans
les séparateurs/u (la première partie).

Je ne voudrais pas abusé de ta patience, mais serait-il possible d'exécuter ton code à partir d'un Window form ?
Pour que je puisse vérifier si ça fonctionne de cette manière. Indique moi la marche à suivre, si ce n'est pas trop dur.

je suis véritablement désolé de ne pas y arriver
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
1 févr. 2011 à 18:37
Oui bien sur
comme ça une proposition
1 créer un projet windows application

avec le ide (l'environment la form où tu places
les controls) places

1 button nommé FileGcodeName
j'ai defini son text
Entrée Gcode fichier

1 button nommé proceed
son text Procéder

1 listbox nommé Codein
1 listbox nommé codeout

1 OpenFileDialog qui sera nommé par défaut
OpenFileDialog1

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

0
Treleau Messages postés 84 Date d'inscription mardi 25 janvier 2011 Statut Membre Dernière intervention 9 février 2011
1 févr. 2011 à 19:04
C'est génial, je le test de suite.
0
Treleau Messages postés 84 Date d'inscription mardi 25 janvier 2011 Statut Membre Dernière intervention 9 février 2011
1 févr. 2011 à 20:57
Bon, ça commence bien, quand j'ai voulu nommer le premier bouton


1 button nommé FileGcodeName
j'ai defini son text
Entrée Gcode fichier


J'ai eu le message d'erreur suivant :

L'identificateur 'FileGcodeName ' n'est pas valide.

Je me demande si ma version de Visual Basic est compatible avec celle que tu utilise ? serait-ce là, la cause de nos
problèmes ?
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
1 févr. 2011 à 21:45
alors si tu places un bouton sur la form
son nom par défaut est button1
si tu changes son nom (pas l'attribut texte)
avec FileGcodeName il y a une erreur
si tu définis un autre non ça marche ?
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 à 08:53
Je viens de réaliser un truc qui pourrait être intéressant.

si je fait un copier-collé du mot FileGcodeName VB le refuse comme nom; mais si je le tape avec
le clavier (FileGcodeName), alors, pas de problème.

Sais-tu, ce qui pourrait clocher dans dans le fait de copier-coller ? Un problème avec le presse-papier ? Devrais-je retaper intégralement ton code à la main ?

Je reprend tout, avec cette nouvelle méthode.
0
Rejoignez-nous