Aide: lire un fichier binaire (structure connue)

forzacodm - 1 avril 2013 à 19:03
 Utilisateur anonyme - 2 avril 2013 à 20:13
bonjour tout le monde,
je travaille sur une application en VB.net en relation avec mes études. au stade où je suis, je dois lire le contenu d'un fichier .his (binary file) dont la structure m'a été donnée par son éditeur (voir en bas). je voudrai donc stocker les données qui s'y trouve dans un fichier excel.

structure du fichier .HIS:

(HIS): Type de fichier binaire est utilisé pour stocker des données thématiques qui doit être liée à des couches de carte. L'ensemble de données dans un fichier HIS peut être en trois dimensions, c'est à dire qu'il peut avoir un ou plusieurs paramètres, la localisation et l'extension du fichier est timestep. Une description du fichier est donné ci-dessous.

1.1 En-tête
Le fichier contient un en-tête, qui est constitué de:
• trois fois 40 caractères ASCII comme des lignes de commentaires
• Exactement 40 caractères ASCII, afin d'indiquer l'heure de début de pas de temps = 0 de la manière suivante:
T0: ~ ~ aaaa.mm.jj hh: mm: (! ~ Désigne un espace) ss ~ ~ (scu = ~ ~ ~ ~ ~ ~ ~ 1s)

- Un exemple (SCU = secondes d'horloge système unitaires):
T0: 01/01/1990 12:00:00 (scu = 1s)


1.2 Description des paramètres et des lieux
La partie suivante du fichier indique le nombre de paramètres et de segments, suivis par les noms de paramètres et par les noms de lieux:
• des nombres entiers de 4 octets, ce qui représente le nombre de paramètres de sortie (NOout) et le nombre d'emplacements (NOseg);
• NOout chaînes de 20 caractères ASCII, contenant une description de chacun des paramètres de sortie. l'unité est ajoutée entre parenthèses, par exemple:

Res.time [d]
Volume [m3]

• NOseg * (nombre de 4 octets + une chaîne de 20 caractères). Le nombre est un entier et la chaîne contient une description pour chacun des emplacements de sortie (par exemple les identifiants de branche ou un segment identifiants, etc.) Par exemple:
emplacement 1
- Branche 26
- Noeud 89

1.3 La partie "données":
La prochaine partie du fichier contient (NOout * NOseg +1) chiffres par pas de temps:

• un nombre entier de 4 octets représentant le temps. L'appareil est en unités d'horloge du système. Si votre unité d'horloge du système est égal à 1 seconde comme dans l'exemple ci-dessus, puis donner le temps en secondes. Si votre unité d'horloge système est de 86400 secondes ( = 1 jour), puis votre temps sera en jours.
• NOout * NOseg réel de 4 octets représentant les valeurs des paramètres de sortie dans le segment NOout 1, les valeurs des paramètres de sortie dans le segment NOout 2, etc
• Cette opération est répétée pour tous les pas de temps (temps NOstep)

S'il vous plaît noter que les chiffres vont commencer à la position (168 + 20 + NOout * NOseg * 24). L'unité de temps est unités d'horloge de système.
La longueur totale d'un fichier d'historique peut être calculé comme suit:
Longueur totale = 168 + 20 + NOout * NOseg * 24 + 4 * NOTIM * (* NOout NOseg +1)

merci pour votre aide.

slt tout le monde

22 réponses

j'attend votre aide, je suis vraiment bloqué
0
Utilisateur anonyme
1 avril 2013 à 20:21
Bonjour,

Et quelle est la question ?
Est-ce en rapport avec ce sujet laissé en plan ?
0
Utilisateur anonyme
1 avril 2013 à 20:33
Pardon, j'avais zappé une partie de ton post.
Il faudrait :
1 / Ouvrir le fichier avec IO.FileStream
2 / Dimensionner des variables de type Byte selon les données à récupérer
(voir la méthode Read de IO.FileStream)
3 / Les convertir le cas échéant avec les méthodes de System.Text.Encoding ou de Convert.
Remarque : Voir aussi Integer.TryParse, Double.TryParse, DateTime.TryParse etc...
0
merci banana32 pour ton aide, mais je suis novice en vb.net. peux-tu m'expliquer un peu plus? surtout la syntaxe du code à utiliser.
merci

slt tout le monde
0

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

Posez votre question
Utilisateur anonyme
1 avril 2013 à 21:55
Tu trouveras ces syntaxes sur msdn (à consulter sans modération). Par exemple pour IO.FileStream c'est ici. Avec ses méthodes, propriétés etc... Il suffit de suivre les liens et de consulter les exemples de code en général au bas des pages.
0
j'ai essayé avec ceci:

Dim stReader As StreamReader
Dim str As String
Dim sw As New StreamWriter("C:\Test.txt")

stReader = New StreamReader("mon_fichier.his")
str = stReader.ReadToEnd
sw.WriteLine(str)
sw.Close()

mais je reçoit une écriture chiffrée comme ceci:


SW reservoir node results T0: 1939. 8. 1 00:00:00 (scu= 86400s)M  Flow: into reservoirFlow: net evaporatioFlow: evaporation (mFlow: rainfall (m3/sFlow: seepage (m3/s)Flow: downstream (m3Flow: downstream tarFlow: full reservoirFlow: turbine (m3/s)Flow: main gate (m3/Flow: backwater gateFlow: backwater gateFlow: backwater gateFlow: backwater gateFlow: backwater gateLevel: actual at endLevel: full reservoiLevel: flood controlLevel: target (m) Level: turbine intakLevel: backwater gatLevel: backwater gatLevel: backwater gatLevel: backwater gatLevel: backwater gatLevel: firm (m) Level: hedging 1 (m)Level: hedging 2 (m)Level: hedging 3 (m)Level: hedging 4 (m)Level: hedging 5 (m)Level: dead (m) Storage: actual at eStorage: full reservStorage: flood contrStorage: target (McmStorage: turbine intStorage: backwater gStorage: backwater gStorage: backwater gStorage: backwater gStorage: backwater gStorage: firm (Mcm) Storage: hedging 1 (Storage: hedging 2 (Storage: hedging 3 (Storage: hedging 4 (Storage: hedging 5 (Storage: dead (Mcm) Storage: Filling perArea: Surface at endEnergy: Generated (GEnergy: Firm demand Energy: Firm shortagEnergy: Firm productEnergy: Number (-) oEnergy: Number (%) oEnergy: Tailrace levEnergy: Tail head loEnergy: Power generaEnergy: Power generaFlow: Sum of backwatFlow: Sum of lateralFlow: Sum of lateralWb: + Flow into reseWb: + Rainfall (Mcm)Wb: + Sum lateral inWb: + Decrease of stWb: - Evaporation (MWb: - Seepage (Mcm) Wb: - Main gate (McmWb: - Turbine (Mcm) Wb: - Full reservoirWb: - Sum backwater Wb: - Sum lateral ouWb: - Increase of stBalance check (must  barrage boukhmiss  Barrage SMBA  Barrage tiddas �Cf��Cf��Cf��C �C �C �C �C �C �C �C �C 4C�(HC�(HC�(HC �� �@ �@ �@ �@ �@ �@ �@ r�B @lD �G`B �B �B �B�ݷA �A �A �A �A �A �A �A�D��sD��sD��sD �� �сA�сA�сA�сA�сA�сA�сA��B��XE �C ��C ��C ��C �`� ��C ��C ��C ��C ��C ��C ��C ��C ��C ��C ��C �� \��A\��A\��A\��A\��A\��A\��A���B ��D  ף�? ף�? ף�? �Cf��Cf��Cf��C �C �C �C �C �C �C �C �C 4C�(HC�(HC�(HC �� �@ �@ �@ �@ �@ �@ �@ r�B �B t;@ t;@ D��@|
@|
@ D�4AD�4A D�4A ^�]B �B �B �B�ݷA �A �A �A �A �A �A �AajD��sD��sD��sD �� �сA�сA�сA�сA�сA�сA�сA�MyBRgTE �B �dA t�A�y�@ +��A 7^��? ^��? ^��? �C ��C ��C ��C �`� ��C ��C ��C ��C ��C ��C ��C ��C ��C ��C ��C �� \��A\��A\��A\��A\��A\��A\��A���B �B �p@ �p@ = �r�? �r�? �r�? �Cf��Cf��Cf��C �C �C �C �C �C �C �C �C 4C�(HC�(HC�(HC �� �@ �@ �@ �@ �@ �@ �@ r�B �B ��@ ��@ A4�?4�? �";A�";A �";A 1.\B �B �B �B�ݷA �A �A �A �A �A �A �ARID��sD��sD��sD �� �сA�с
0
Utilisateur anonyme
2 avril 2013 à 02:49
Bonjour,

Je pense que Banana32 t'a malheureusement envoyé au mauvais endroit à l'insu de son plein gré. La classe StreamReader est conçue pour lire/écrire les fichiers textes. J'ai l'impression que tu aurais plus de chance avec la classe Stream.
0
Utilisateur anonyme
2 avril 2013 à 02:53
Bonjour,

Ou encore, la classe BinaryReader
0
Utilisateur anonyme
2 avril 2013 à 07:08
Je pense que Banana32 t'a malheureusement envoyé au mauvais endroit à l'insu de son plein gré.

Je n'ai nulle part parlé de StreamReader mais de FileStream
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
2 avril 2013 à 08:06
Bonjour,
Un coup d'oeil au message dans lequel forzacodm montre le contenu du fichier en cause === >>
- Il ne s'agit pas d'un fichier texte structuré en données séquentielles
- forzacodm nous parle de structure
- le problème n'est pas la structure de CE fichier, mais le format d'UN fichier .his

Le format .his étant un format propriétaire, je vois mal comment il pourrait être lu sans utiliser l'éditeur qui lui correspond.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
je vois ce que tu veux dire ucfoutu. qu'est ce que je dois chercher au juste auprès de l'editeur de ce type de fichier?

cordialement
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
2 avril 2013 à 10:30
Ce n'est pas "auprès", mais "à l'aide" de l'éditeur !
L'éditeur n'est pas une personne (physique ou morale), mais un outil !


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
2 avril 2013 à 10:35
Je te rappelle enfin tout ce que je t'en ai dit dans ton autre discussion : ===>>
Tapez le texte de l'url ici.
Notamment sur le fait que ton éditeur/appli supporte ou non l'automation. Et seul don créateur pourra t'éclairer sur ce point.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
merci ucfoutu

en disant "editeur", je faisais réference à la boite de développement qui a créé ce type de fichier, c'est eux qui m'ont remis la description que j'ai postée dans ma première question.

comme on parle là d'éditeur (en d'autres termes lecteur de fichier), et connaissant la description du contenu du fichier (voir ma 1ère question), est ce qu'il n'est pas possible de créer mon propre éditeur?

cordialement
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
2 avril 2013 à 10:46
est ce qu'il n'est pas possible de créer mon propre éditeur?

Oui, avec beaucoup de patience et uniquement si le concepteur t'en communique le format !
Cette discussion s'arrête là en ce qui me concerne !

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
2 avril 2013 à 10:57
Ce que l'on peut deviner (sans la MOINDRE certitude), c'est que ce fichier est celui d'une matrice, précédée de titres (en clair, eux) de colonnes. Que sont utilisés des séparateurs divers (apparemment précédés du signe #) entre lesquels figurent des données numériques (probablement en format hexadécimal ... probablement, hein ... sans certitude ...)
Sans connaître le format, ce ne sera qu'à tâtons, que tu auras une petite chance de le "lire" en "clair".


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Utilisateur anonyme
2 avril 2013 à 12:31
La description de la structure de ce fichier 'his' a l'air assez complet. Comme le précise ucfoutu que je salue, tu peux y arriver à tâtons. Ceci dit, il est fort possible que ce fameux concepteur possède un outil de conversion '.his to .csv' par exemple. Ce format là est facilement exploitable à la fois par vb et par excel. Tu pourrais tenter de te mettre en relation avec ce concepteur par mail, ou bien le télécharger sur leur site si cet outil existe...
0
j'ai trouvé une application conçue par le meme concepteur et qui arrive à lire les fichier .his en format clair (fichier de données en trois dimmensions comme excel):



l'application s'appelle HISeditor, elle permet d'ouvrir le fichier et de l'enregistrer sous format excel



le problème, c'est que comme l'application est inconue, je n'ai pas trouvé de moyen pour la manipuler depuis VB.net à moins de la lancer comme process et laisser l'utilisateur faire la conversion à chaque fois, ce qui est moche, vu qu'on doit ouvrir le fichier une multitude de fois pour chaque utlisation.
0
j'ai trouvé une application conçue par le meme concepteur et qui arrive à lire les fichier .his en format clair (fichier de données en trois dimmensions comme excel):



l'application s'appelle HISeditor, elle permet d'ouvrir le fichier et de l'enregistrer sous format excel



le problème, c'est que comme l'application est inconue, je n'ai pas trouvé de moyen pour la manipuler depuis VB.net à moins de la lancer comme process et laisser l'utilisateur faire la conversion à chaque fois, ce qui est moche, vu qu'on doit ouvrir le fichier une multitude de fois pour chaque utlisation.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
2 avril 2013 à 20:01
le problème, c'est que comme l'application est inconue, je n'ai pas trouvé de moyen pour la manipuler depuis VB.net

Dit et redit (lis et relis donc les réponses) : ce que tu appelles "manipuler" s'appelle "piloter". Et pas de pilotage possible si ne supporte pas l'automation. Et si supporte l'automation, le concepteur de cette appli est le seul a pouvoir te dire s'il l'a prévue et s'il a fait ce qu'il fallait pour ! La baguette magique n'existe pas.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Rejoignez-nous