Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

Messages recommandés

Posté(e) (modifié)

Bonjour,

 

Je commence à "programmer" des fichiers .bat sous Windows et j'aimerais récupérer octet par octet des données présentes dans un ficher binaire (enregistrement de données).

J'ai essayé en renommant ce fichier en fichier binaire mais Windows transforme mes données en code ASCII et donc les données ayant des valeurs dont le codes correspond à des commandes (retour chariot, espace, ...) ne sont pas prises en compte; de même avec les caractère à accent et autre... bref tout ce qui n'est pas alphanumerique compréhensible par le DOS.

Pourriez-vous me dire comment lire un fichier de ce type et renvoyer dans un variable la valeur des octets un à un.

 

Merci.

Modifié par Lucier

Posté(e)
J'ai essayé en renommant ce fichier en fichier binaire
Hah ! Comme si changer le nom d'un fichier allait modifier quoi que ce soit à son contenu...

 

Windows transforme mes données en code ASCII
Windows ne transforme rien, Windows affiche ce que tu lui dis d'afficher sous la forme que tu lui demandes...

 

Pourriez-vous me dire comment lire un fichier de ce type et renvoyer dans un variable la valeur des octets un à un.
Tu stockes quoi dans ce fichier binaire ? Tu crées ce fichier avec quel outil ? Tu veux y récupérer quoi ? Tu veux traiter ce "quoi" de quelle manière ?

Actuellement tu utilises quelle méthode pour lire ce fichier et afficher son contenu ?

Posté(e)

Ce fichier binaire est issu d'un enregistreur.

Il est composé d'une entete et de données séparer par des tags. J'ai plusieurs champs à récupérer dans ce fichier qui sont soit des caractères ASCII, soit des nombres soit la valeur de bit (bref un peu de tout).

J'ai essayé la fonction findstr ou type avec des boucles "for /f avec tokens skip, etc..." mais rien n'y fait. Je suis toujours en cours de recherche.

J'aimerais découpé ce fichier en fonction de sa structure.

J'utilise un logiciel HexEdit pour LIRE ce fichier et lui donner la structure afin qu'il m'affiche la valeur de chaque champ. Je veux faire la même chose sauf que j'aimerais travailler ces valeurs.

  • Modérateurs
Posté(e)

Bonjour Lucier,

 

Qu'entends-tu par “tag” de séparation ? S'agit-il de balises (XML et autres langages dérivés), ou d'un caractère séparateur à valeur convenue (comme par exemple le classique point-virgule des fichiers CSV pour EXCEL) ?

 

Parce que pratiquement tous les langages possèdent des instructions de dégroupage d'un enregistrement à séparateurs, le transformant en une table de valeurs qu'il ne te reste plus ensuite qu'à analyser une par une.

 

Je ne connais pas HexEdit, mais tu auras du mal à aboutir si c'est un éditeur de texte.

 

Un langage comme Perl (interpréteur free) saurait traiter, par exemple. Et j'imagine que Java (langage free, avec compilateur) aussi, bien sûr.

Posté(e)

Sans taper dans Java ou dans Perl, avec les outils en ligne de commande d'Unix (les classiques grep, cut, awk, sed, tr, etc. dont il existe des portages sous Windows) on peut très bien s'en tirer. Ici je crois qu'il est question de faire ça en batch avec cmd (ce que désormais tout le monde appelle à tort "DOS"), et je crains que niveau manipulation de fichiers binaires on ne soit limité (à moins que ce ne soient mes connaissances des outils en ligne de commande qui sont à disposition sous Windows, qui soient limitées)...

  • Modérateurs
Posté(e)
Ici je crois qu'il est question de faire ça en batch avec cmd […] et je crains que niveau manipulation de fichiers binaires on ne soit limité

C'est bien pourquoi je proposais l'utiliation d'un programme écrit par exemple en PERL, dont l'appel serait effectué dans le fichier de commandes xxx.bat :

 

...
perl   transco.pl   adresse-fichier-entree   adresse-fichier-sortie
...

L'avantage d'un langage comme PERL, c'est qu'on n'a pas besoin de beaucoup s'investir pour réaliser rapidement des traitements assez sophistiqués.

Posté(e)

Bonjour,

 

Kewlcat a plutot bien cerné mon problème. Je me dois d'éviter d'utiliser différents outils. C'est pourquoi j'aimerais le faire en BATCH (commandes DOS); et puis c'est aussi surtout une question de temps comme je enc onanis rien en PERL.

Pour répondre à la question concernant les tags il s'agit en fait d'un suite de 4 caractères ASCII.

En gros j'aimerais savoir s'il existe un moyen de lire tant d'octet à partir de telle position dans un fichier binaire. Bref me créer un masque et lire dans des variable les valeurs.

Invité j'aime pas le batch
Posté(e)
Bonjour,

 

Kewlcat a plutot bien cerné mon problème. Je me dois d'éviter d'utiliser différents outils.

 

Je crois que c'est plutôt toi qui n'a pas cerné les réponses. Kewlcat préconise l'utilisation d'un outil dédié tandis que dylav lui recommande un langage de programmation interprêté...ce qui revient à peu près au même en terme de déploiement.

Posté(e)

Bonjour,

 

j'ai trouvé la solution barbare de le faire en batch, fallait juste y penser :P .

 

:P Pour ceux que ça peut intéresser:

- je crée un fichier binaire composé d'un unique caractère plus grand que les fichiers à comparer

- je fais une comparaison binaire et j'envoie vers un fichier texte le résultat sachant que ne sera inscrit dans ce fichier que les différences

- il me suffit ensuite de lire ce fichier et de recopier en fonction des adresses les valeurs souhaitées et s'il y a un trou dans la liste d'adresse c'est qu'il n'y avait pas de différence donc j'inscrit à cette adresse le caractère de mon fichier de référence.

- J'obtiens ainsi un fichier texte contenant les valeurs de mes données (en code ASCII) :P .

Travailler sur des caractères ASCII ou leur code revient au même, suffit juste de le savoir mais le travail reste le même.

 

Merci pour votre aide

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...