bonjour,
voici mon soucis.
J'ai un fichier crée par un programme, il a sa propre extension (.mdp).
Le programme en question stock des informations fournies par une sonde .
On a 2 type de données :
-les données qui caractérise le survey (nom du projet, nombre de stations etc ...)
toutes ces infos sont lisible dans une fichier texte
-et on a les données enregistrées par la sonde--MDL data boundary
Content-type: text/xml; charset=utf-8; boundary="MDL data boundary"
<project sites="1">
<GUID>def5020f-4953-40dc-8a29-6a1925cb58f3</GUID>
<name>faches sd308</name>
<absoluteProjectBasePath></absoluteProjectBasePath>
<jobName></jobName>
<notes></notes>
<siteGUID>2a8f4b43-bfd1-4729-9e6b-c2a80f8d5452</siteGUID>
</project>
--MDL data boundary
Content-type: text/xml; charset=utf-8; boundary="MDL data boundary"
<site stations="1">
<GUID>2a8f4b43-bfd1-4729-9e6b-c2a80f8d5452</GUID>
<name>Site 1</name>
<client></client>
<address></address>
<magneticDeviation>0</magneticDeviation>
<metricType>Metres</metricType>
<coordinateType>ENZ</coordinateType>
<grid>NotSet</grid>
<stationGUID>e7bbfbac-f26e-4753-9593-3a73ef996802</stationGUID>
<deploymentGUID>40b31c90-67fc-4fee-a687-84ef1d6a034a</deploymentGUID>
</site>
dans le logiciel, c'est lisible sous forme de tableau avec X, Y, Z ...)
dans le fichier texte, ça donne ça :
vu qu'il est marqué application/octet-stream</station>
--MDL data boundary
Content-type: application/octet-stream; boundary="MDL data boundary"
MDLScanData z¼¢¸ê DI´±Oã†
ÀCALS_Ring_01 ÿWóCRE¹h@í*. q*'/eÂ’A³‡ånïVÀäCALS 1 ü©ñÒMbP?ü©ñÒMbP?ü©ñÒMbP?Fr‰
m(@ÌÈuå3÷&Àµo<Ä‚À³ÓB/þ4p@΂cîcØ`À¾¥å,‚ÀlÿÜÚuŒ‚À.s߶¯^@+ì¿M¶öqÀ#ýÿÿ³4 ”Þÿÿl ’þÿÿ´4 ”Þÿÿv …< ©Þÿÿr p œ8 ŸÞÿÿw ç k@ ´Þÿÿy Q š8 ŸÞÿÿx Å0 ŠÞÿÿˆ â í( uÞÿÿ” u *4 ”Þÿÿ‘ / Å, Þÿÿ‘ Á Ž4 ”Þÿÿ‚ D n8 ŸÞÿÿw
v4 ”Þÿÿ Î$ jÞÿÿ‡ " 2< ©ÞÿÿŠ ¨ f0 ŠÞÿÿ† W )8 ŸÞÿÿ} Ç 8 ŸÞÿÿu \ ö; ©Þÿÿp € 4 ”Þÿÿk ï 4 ”Þÿÿl 4" 0 ŠÞÿÿi u# , Þÿÿc ì% 0$ jÞÿÿc „' ( uÞÿÿh »(
$ jÞÿÿi î) `Þÿÿk ‰+ ç# jÞÿÿk ¹, í `Þÿÿr . Ù `Þÿÿt ¬0 È UÞÿÿu Ð1 Ì KÞÿÿy ò2 Ð @Þÿÿu 5 j `Þÿÿr ~6 R `Þÿÿq 7 ‰ @Þÿÿp : < KÞÿÿm ›: r +Þÿÿm Ý< KÞÿÿn ?> ë
je suis parti sur les moyens de lire du binaire, et c'est là qu'est mon problème :/
je n'arrive a pas transformer ce charabia en quelque chose de cohérent.
en fin de fichier j'ai un truc comme ça : <index numberOfEntries="18">
sachant que la longueur de mon reader 4008295 et que dans le fichier j'ai un 4005722 qui ressort, je me dit que ça doit bien est du binaire<entry>
<type>Project</type>
<fileId>0</fileId>
<location>221</location>
<size>343</size>
</entry>
<entry>
<type>Site</type>
<fileId>0</fileId>
<location>587</location>
<size>501</size>
</entry>
<entry>
<type>Deployment</type>
<fileId>0</fileId>
<location>1111</location>
<size>1464</size>
</entry>
<entry>
<type>Station</type>
<fileId>0</fileId>
<location>2598</location>
<size>757</size>
</entry>
<entry>
<type>Station</type>
<fileId>0</fileId>
<location>3378</location>
<size>757</size>
</entry>
....
<type>ScanReport</type>
<fileId>0</fileId>
<location>4005722</location>
<size>199</size>
</entry>
</index>
Si on s'amuse a faire la différence entre la "<location>" + le "<size>" de tous les "<type>" on a toujours 23 (je sais pas si ça peut aider, mais ça montre une structure)
voici le bout de code que j'ai pondu :
quand on est sur du texte cohérent, si je fais un
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 using (BinaryReader b = new BinaryReader(File.Open("C:\\Cavity Profiler Projects\\CALS\\faches sd308\\faches sd308-horizonral.bak", FileMode.Open,FileAccess.Read ))) { b.BaseStream.Position = 10003; // 2A. // Use BaseStream. int length = (int)b.BaseStream.Length; while (b.BaseStream.Position < length) { //var v = b.ReadString(); var u = b.BaseStream.ReadByte(); Console.WriteLine(u); } }
j'ai bien le bon texte qui apparait comme par magie,
Code : Sélectionner tout - Visualiser dans une fenêtre à part Console.WriteLine(Convert.tochar(u));
mais pour le reste, j'ai essayé en double, single, etc ... rien a faire ...
si quelqu'un a une idée
Partager