IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Problème d'écriture après une boucle


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Août 2013
    Messages : 6
    Par défaut Problème d'écriture après une boucle
    Salut à tous,

    Je suis actuellement en train de développer une application en VB qui permet de manipuler des données issues de capteurs, lesquelles sont ensuite consignées dans un fichier dans un format bien particulier (MoTeC pour ceux qui connaissent). Après avoir réussi à "décrypter" le fichier avec un éditeur hexadécimal, j'ai pu reconstituer les données qui transitent dans les différents canaux d'un réseau CAN, et les écrire ensuite dans un fichier texte (je précise que ce sont des fichiers assez lourds de plusieurs dizaines de milliers de lignes, je ne sais pas si ça a un rapport avec le problème que je vais décrire...).

    Le problème que je rencontre est que, lorsque j'écris ces données dans mon fichier texte, les données sont absentes pour certains canaux. J'ai bien le "header" du canal (avec son numéro, son identifiant, l'adressage du canal suivant, l'unité du canal mesuré etc.), il manque juste les mesures. J'ai observé que je ne rencontrais le problème que sur certains canaux, qui ont tous en commun d'avoir le même nombre de mesures (les canaux ont différentes fréquences, donc pas le même nombre de mesures effecutées), en gros, les données sont réparties sur le même nombre de caractères. A noter que le nombre de mesures pour lesquelles je rencontre ce bug est différent suivant les fichiers d'entrée, et ne touche qu'un seul nombre de mesures.

    Pour donner un exemple simple, j'ai 10 canaux avec 50 mesures effecutées (bon en réalité c'est bien plus mais là n'est pas le sujet je pense), 10 avec 100 mesures et 10 avec 200, et pour je ne sais quelle raison, pour les 10 canaux ayant 10 mesures, les mesures ne vont pas être écrites dans le fichier texte de sortie. Aucun souci pour tous les autres canaux. Et pour un autre fichier d'entrée, ça sera encore un nombre de mesures différent (par exemple pour un autre fichier ça sera sur les 10 canaux ayant 200 mesures, ou 50, bref ça dépend)...

    Voici le code de la boucle qui permet de récupérer les données :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim nb1 As Long = (2 * Val("&H" & DataAddr) + 1)
            Dim nb2 As Long = (2 * Val("&H" & DataAddr) + 1 + 2 * Val("&H" & DataLength) + 1)
     
            For i = nb1 To nb2 Step 4
                Data = Mid(hexFile, i, 4)
                Data2 = inversion_data(Data)
                Data3 = Data3.Append(Data)
            Next
            Data = Data3.ToString
    DataAddr est l'emplacement (en hexadécimal) à partir duquel les données sont écrites dans le fichier source, DataLength est le nombre de bits sur lesquels s'étendent ces données (dans l'éditeur hexadécimal, c'était regroupé 2 par 2, c'est la raison pour laquelle je multiplie par 2). inversion_data est une fonction permettant d'écrire les données en hexadécimal dans le bon sens (le but final étant ensuite de les convertir en décimal bien entendu).

    Dans mon fichier de sortie, je vais par exemple avoir ça, pour schématiser (bon en réalité dans mon fichier texte tout est encore en hexadécimal...) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    Canal 1
    Nom du canal : Régime moteur
    Adressage des mesures : 003D4569
    Longueur du bloc de mesures : 0002F5689
     
    Mesures
     
    Canal 2
    Nom du canal : Rapport enclenché
    Adressage des mesures : 004D6547
    Longueur du bloc de mesures : 0002F5689
     
    Mesures
     
    Canal 3
    Nom du canal : Température pneu avant gauche
    Adressage des mesures : 004F9832
    Longueur du bloc de mesures : 0001D5678
     
    Pas de mesures écrites
     
    Canal 4
    Nom du canal : Angle volant
    Adressage des mesures : 00569874
    Longueur du bloc de mesures : 0001F5647
     
    Mesures
     
    Canal 4
    Nom du canal : Température d'huile
    Adressage des mesures : 005A6511
    Longueur du bloc de mesures : 0001D5678
     
    Pas de mesures écrites
    Voilà, désolé pour le pavé mais j'ai essayé d'être le plus clair possible. Merci d'avance pour votre aide, car je ne vois vraiment pas d'où peut venir le problème...

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    je ne pense qu'on puisse beaucoup t'aider avec si peu de code et un problème si générique

    c'est à toi de faire du debug, un point d'arret puis du pas à pas en vérifiant le contenu des variables, en cherchant où est ton bug ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Août 2013
    Messages : 6
    Par défaut
    Bon bah problème réglé, en fait il me renvoyait des longueurs négatives lors de la conversion d'hexadecimal à décimal (donc forcément aucune donnée n'était écrite), il suffit de rajouter & à la fin du nombre hexa pour lui préciser que c'est un Long...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XSLT 1.0] Problème d'écriture d'une transformation XSLT avec les boucles de conditions
    Par aladin1984 dans le forum XSL/XSLT/XPATH
    Réponses: 24
    Dernier message: 11/06/2012, 12h52
  2. Problème d'écriture d'une boucle
    Par Runsh63 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 29/09/2011, 16h13
  3. Problème d'écriture dans une boucle for
    Par manaliac dans le forum Général Python
    Réponses: 1
    Dernier message: 13/07/2010, 16h46
  4. [Conception] Problème de test dans une boucle while
    Par Cyrius dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/11/2005, 18h07
  5. Problème avec TNMSMTP dans une boucle.
    Par Orgied dans le forum Web & réseau
    Réponses: 3
    Dernier message: 07/04/2004, 10h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo