none
visual basic 2008 tableau byte vers tableau byte partiel debutant RRS feed

  • Question

  • Bonjour

    à partir d'un tableau byte rempli automatiquement lors de la lecture d'un fichier (tableau à 1 index), je veux disposer d'un tableau byte qui ne contiendrait qu'une parti des bytes du numéro 100 au numéro 250 par exemple. Je sais le faire en "chargeant" chaque byte un à un mais c'est long. N'y a-t-il pas plus rapide ?

    merci à celui qui me donnera la réponse

    dimanche 6 février 2011 18:08

Réponses

  • Comment est déclaré "SubConstrainedCopy" ? Le message indique que l'on essaie d'utiliser une variable "tableau d'octet à une dimension" au lieu d'un entier. Je soupçonne que les arguments présents dans l'appel de SubConstrainedCopy ne sont pas dans le même ordre que celui utilisé dans l'appel.

    Sinon un example avec Array.Copy donne :

        Dim a(100) As Byte
        Dim b(10) As Byte
        For i As Integer = 0 To UBound(a)
          a(i) = i
        Next
        Array.Copy(a, 10, b, 0, b.Length)
        For i As Integer = 0 To UBound(b)
          MessageBox.Show(b(i))
        Next
    
    Le principe est que "My" donne un accès rapide aux fonctions de base. Il est bien sûr possible de lire un fichier partiellement en utilisant les classes de .NET Framework mais cela nécessite effectivement de se familiariser un peu avec les différents "espaces de nom" ce qui est un peu intimidant au départ. Voir par exemple http://msdn.microsoft.com/fr-fr/library/ms143295.aspx pour la lecture du nombre d'octets voulus depuis un fichier. Voir http://msdn.microsoft.com/fr-fr/library/d11h6832(v=vs.90).aspx pour une vue d'ensemble des espaces de noms mais pas de panique ;-) au bout d'un peu de temps on se repère et on utilise de toute façon souvent les mêmes (donc System.IO pour tout ce qui est "entrées/sorties").

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    • Marqué comme réponse Alaindebut lundi 7 février 2011 18:20
    lundi 7 février 2011 18:07
    Modérateur

Toutes les réponses

  • Bonjour,

    Avez vous fait du code déjà sur ce partiel ?

    Ses bytes son en mémoire ou pas ?


    Cordialement, Troxsa
    dimanche 6 février 2011 18:38
    Auteur de réponse
  • Bonjour,

    La doc http://msdn.microsoft.com/fr-fr/library/system.array_members.aspx montre qu'il existe une méthode Array.Copy pour copier des éléments d'un tableau vers un autre...


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    lundi 7 février 2011 11:43
    Modérateur
  • Bonsoir

    mes données byte sont le résultat de la lecture d'un fichier:

    dim  donneesFic () as byte

    sub ......

    donneesFic = My.Computer.FileSystem.ReadAllBytes ("chemin acces fichier")

    end sub...

    je voudraismaintenant créer une variable contenant une partie continue des donnes, de l'indice 100 à l'indice 250 par exemple

    merci pour votre aide


    debutant
    lundi 7 février 2011 16:49
  • mes données byte sont le résultat de la lecture d'un fichier:

    dim  donneesFic () as byte

    sub ......

    donneesFic = My.Computer.FileSystem.ReadAllBytes ("chemin acces fichier")

    end sub...

    je voudrais maintenant créer une variable contenant une partie continue des donnes, de l'indice 100 à l'indice 250 par exemple

    Je viens de rajouter l'instruction suivante:

    Dim

     

    SubConstrainedCopy(donnesFic, 5, dataversA3S, 0, 256)

    , et j'ai l'erreur suivante

    Erreur 1 Une valeur de type 'Tableau à 1 dimension(s) de Byte' ne peut pas être convertie en 'Integer'. 

    merci pour votre aide.

    C'est dommage qu'on n puisse pas lire les données par quantités limitées: il n'y a que Readallbyte !


    debutant
    lundi 7 février 2011 17:10
  • Comment est déclaré "SubConstrainedCopy" ? Le message indique que l'on essaie d'utiliser une variable "tableau d'octet à une dimension" au lieu d'un entier. Je soupçonne que les arguments présents dans l'appel de SubConstrainedCopy ne sont pas dans le même ordre que celui utilisé dans l'appel.

    Sinon un example avec Array.Copy donne :

        Dim a(100) As Byte
        Dim b(10) As Byte
        For i As Integer = 0 To UBound(a)
          a(i) = i
        Next
        Array.Copy(a, 10, b, 0, b.Length)
        For i As Integer = 0 To UBound(b)
          MessageBox.Show(b(i))
        Next
    
    Le principe est que "My" donne un accès rapide aux fonctions de base. Il est bien sûr possible de lire un fichier partiellement en utilisant les classes de .NET Framework mais cela nécessite effectivement de se familiariser un peu avec les différents "espaces de nom" ce qui est un peu intimidant au départ. Voir par exemple http://msdn.microsoft.com/fr-fr/library/ms143295.aspx pour la lecture du nombre d'octets voulus depuis un fichier. Voir http://msdn.microsoft.com/fr-fr/library/d11h6832(v=vs.90).aspx pour une vue d'ensemble des espaces de noms mais pas de panique ;-) au bout d'un peu de temps on se repère et on utilise de toute façon souvent les mêmes (donc System.IO pour tout ce qui est "entrées/sorties").

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    • Marqué comme réponse Alaindebut lundi 7 février 2011 18:20
    lundi 7 février 2011 18:07
    Modérateur
  • Bonsoir

    merci pour cet exemple

    j'expérimenterais ces possibilités, mais pour l'instant je viens de trouver une autre solution à mon problème: 

    SerialPort1.Write(donnesFic, i, 256)                  permet d'envoyer 256 bytes pris à partir de i dans donnéesfic()

    merci, mon besoin était de pouvoir envoyer une série de bytes définie


    debutant
    lundi 7 février 2011 18:23