Fichier .dat illisible exporté d'un afficheur Magelis (Schneider)

Résolu
moimatthieu Messages postés 68 Date d'inscription jeudi 17 juillet 2008 Statut Membre Dernière intervention 6 mars 2010 - 11 sept. 2008 à 15:07
 Whismeril - 13 oct. 2022 à 20:18

52 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
11 sept. 2008 à 17:05
le fichier semble encodé (spirituel comme phrase hein ^^)

reste à savoir si c'est un format propriétaire ou... une logique facile à retrouver

visuellement on dirait :
date sur 4 carac
données sur 2 carac
qualité sur 1 carac

tu peux mettre un exemple de fichier complet? contenant aussi des dates et qualités différentes
++


<hr size="2" width="100%" />
Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp

 
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
11 sept. 2008 à 19:14
alors t'en es où?

j't'attends hein ^^







�5;ˆHÁXô�1;   Date 09/05/2008   Heure 18:06:12    Data = 1416   Qté = 1
   ---------------------------------------
�5;ˆHÁY�12;�1;   Date 09/05/2008   Heure 18:06:42    Data = 1416   Qté = 1
   ---------------------------------------
�5;‰HÁY0�1;   Date 09/05/2008   Heure 18:07:12    Data = 1417   Qté = 1
   ---------------------------------------
�5;‰HÁYN�1;   Date 09/05/2008   Heure 18:07:42    Data = 1417   Qté = 1
   ---------------------------------------
�5;‰HÁYl�1;   Date 09/05/2008   Heure 18:08:12    Data = 1417   Qté = 1
   ---------------------------------------
�5;ŠHÁYŠ�1;   Date 09/05/2008   Heure 18:08:42    Data = 1418   Qté = 1
   ---------------------------------------
�5;ŠHÁY¨�1;   Date 09/05/2008   Heure 18:09:12    Data = 1418   Qté = 1
   ---------------------------------------
�5;‹HÁYÆ�1;   Date 09/05/2008   Heure 18:09:42    Data = 1419   Qté = 1
   ---------------------------------------
�5;ŒHÁYä�1;   Date 09/05/2008   Heure 18:10:12    Data = 1420   Qté = 1
   ---------------------------------------
�5;ŒHÁZ�2;�1;   Date 09/05/2008   Heure 18:10:42    Data = 1420   Qté = 1
   ---------------------------------------
�5;HÁZ �1;   Date 09/05/2008   Heure 18:11:12    Data = 1421   Qté = 1
   ---------------------------------------
�5;HÁZ>�1;   Date 09/05/2008   Heure 18:11:42    Data = 1421   Qté = 1
   ---------------------------------------
�5;ŽHÁZ\�1;   Date 09/05/2008   Heure 18:12:12    Data = 1422   Qté = 1
   ---------------------------------------
�5;ŽHÁZz�1;   Date 09/05/2008   Heure 18:12:42    Data = 1422   Qté = 1
   ---------------------------------------
�5;HÁZ˜�1;   Date 09/05/2008   Heure 18:13:12    Data = 1423   Qté = 1
   ---------------------------------------
�5;HÁZ¶�1;   Date 09/05/2008   Heure 18:13:42    Data = 1423   Qté = 1
   ---------------------------------------
�5;HÁZÔ�1;   Date 09/05/2008   Heure 18:14:12    Data = 1424   Qté = 1
   ---------------------------------------
�5;HÁZò�1;   Date 09/05/2008   Heure 18:14:42    Data = 1424   Qté = 1
   ---------------------------------------

un indice?
le rèpère T0 de la date est codée sur la base du 1er janvier 1970 à 2h

le reste suit la même logique
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
12 sept. 2008 à 14:00
la freetextbox a légèrement modifié l'affichage mais.... ce n'est que de l'affichage
et compare avec ta capture, il y a peu de différence.
il faut travailler sur la valeur ascii des caractères, avec les infos que j'avais "supposé" (puisque c'est bien çà )

en décodant j'ai vu le décalage qu'il y avait entre le résultat date et l'heure de ton CSV. à la base je supposais bien une différence, à savoir depuis 1990, mais j'avais encore 20ans et 2 heures d'erreur, donc...

une fois que tu as la bonne date de départ et que tu sais que seuls les caractères 3 4 et 7 ne changent pas, c'est même plus amusant ^^

(c'est plus des indices là..., t'as directement la réponse )

ps :
la totalité du code (dont des morceaux
inutiles + debug.print) fait moins de 50 lignes, et je ne pense
vraiment pas que çà soit alors une source qui vaille la peine d'être
déposée




++
(ps : lien signature corrigé )

<hr size="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
3
moimatthieu Messages postés 68 Date d'inscription jeudi 17 juillet 2008 Statut Membre Dernière intervention 6 mars 2010
12 sept. 2008 à 16:39
La 6ème colonne est bien celle du temps : +30 à chaque fois mais ma table à partir de 0x80 n'est pas bonne donc je peux pas faire la conversion.
PCPT tu te bases sur quelle table ? Pour 0x8D j'ai un "" alors que je penses que je devrais avoir un "?"
3

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

Posez votre question
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
12 sept. 2008 à 17:03
Salut.0x80 (b16) 0 *(16^0) + <gras>8*(16^1) </gras> 128 (b10)
chr(128) = €

arrête de comparer avec le caractère AFFICHé, tant dans ta fenêtre que dans ma trace....
on parle directement du fichier, et pas non plus de l'affichage sous notepad ou sous fenêtre MSDOS......

tu étais bien parti avec ta 2e capture :

les premières lignes ne sont pas utiles à ton export, c'est le header du fichier....

on commence à la ligne 19
tu vois que tous les enregistrement sont séparés par 00
donc tu enlèves les 19 premiers, et tu coupes par tranche de 00

ta première parcelle est bien :
5, 135, 72, 193, 88, 214, 1


la seconde parcelle est bien :


5, 136, 72, 193, 88, 244, 1

tu as ici les valeur en BASE10

1er j'avais dis 0x05 ou 0x06 (plus bas dans le fichier c'est 0x06)
5(b16) = 5(b10)

en 4ème position on a bien 193(b10), notre fameux Á

tu as bien le codage sur 7 caractères représentant chacun  une valeur
et le dernier semble toujours être le même....

çà devrait plus que t'aider là

<hr size="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
3
moimatthieu Messages postés 68 Date d'inscription jeudi 17 juillet 2008 Statut Membre Dernière intervention 6 mars 2010
15 sept. 2008 à 14:25
Pour les données, c'est Ok. J'avais pas vu que une fois arrivé à 5 255 il passe à 6 1 :D
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
15 sept. 2008 à 16:02
arrggg c'est pas fini? ^^

tu as pourtant tous les éléments...

reprenons :

tu as besoin de trouver :
date = > MM/DD/YY HH:NN:SS
valeur => plus ou moins entre 1400 et 1800
quantité => apparemment = 1

tu arrives à isoler les bons groupes, c'est à dire ne pas tenir compte du header, et découper par paquets de 7 caractères

exemple :

5, 135, 72, 193, 88, 214, 1




réprésentés :

a, b, c, d, e, f, g




nous donne :
09/05/08 18:05:12, 1415, 1

encore des indices? OK :

la valeur est composée par
a, b


la date (complète) est composée par un calcul entre
c, d, e, f
  et le
#1/1/1970 02:00:00#


la quantité est la VALEUR ASCII ETENTUE (tu le savais déjà) de
g




si dans un fichier tu devais écrire que des valeurs comprises entre 1 et 255 , et que tu voulais que le fichier prenne le moins de place, comment ferais-tu?

tu enregistrerais avec un carac de séparation?
genre...


5:1:98:254:28:44:7



ici 7 "valeurs" prennent 18 "carac". ces 7 valeurs pourraient occuper de 13 (

1:


1:


1:


1:


1:


1:


1

) à 27(

255:


255:


255:


255:


255:


255:


255

) caractères..., peu judicieux

ce qui a été fait dans le fichier est non pas de stoquer une valeur mais le caractère acsii représentant la valeur
donc ta chaine de 7 valeurs, composées de 1 ou 255 ou 133 ou autre, ne prend QUE 7 caractères. pas besoin de séparateur....

seulement on a des valeurs plus grandes que 255, ce qui donne des groupes, comme
a, b




reprenons le :

a, b (5, 135)
doit nous donner
1415
(cf fichier)
comment représenter une valeur > 255 ?
de la même manière
256 par exemple, c'est 255 + 1
mais en sachant la position, on sait que la valeur de gauche sert à factoriser celle de droite
donc 1 sert à nous dire qu'on a déjà 1 fois la valeur max du précédent
donc 1 + 1 nous suffit à savoir que c'est 1*255   & 1
pourquoi?
pour représenter une valeur encore plus grande
si on veut représenter 511, on ne va pas mettre 255 & 255 & 1 (qui prend alors 3 caractères)
juste 2 & 1

on détaillant encore plus, çà veut dire que chaque valeur prend le facteur 255 selon sa position
2 & 1, c'est
2* (255^1)   => 2*255 = 510
+
1*  (255^0)   => 1*1 = 1
=                                      511

même démarche avec tes
a, b (5, 135) = 1415




5* (255^1) = 1275
135 * (255^0) = 135
1275+135 =
1410




alors pourquoi ici a-t'on une erreur?
rien n'oblige à ce que 255 çà soit la bonne référence :)

à savoir qu'ici c'est presque quand même le cas ^^
le 0 pouvant être représenté, il faut le compter....., ce qui fait 256 (table ascii étendue)
255 était mon exemple au dessus seulement...., cf "
si dans un fichier tu devais écrire que des valeurs comprises entre 1 et 255
"


5* (256*1) = 1280
135 * (256^0) = 135
1275+135 =
1415


çà c'est bon

prenons
g (1)
pour dire de...

on récupère déjà 1, donc c'est réglé
mais en réalité c'est 1* (256^0), ce qui donne aussi 1

il ne te reste plus que
c, d, e, f




rappel :


la date (complète) est composée par un calcul entre
c, d, e, f
  et le
#1/1/1970 02:00:00#







me semble qu'on a largement fait le tour là non?
plus qu'à appliquer pour la date...., en 3 pages c'est plus que du pré-machage hein

++

<hr size="2" width="100%" />
POST ré-édité, une petit erreur d'explication entre * et ^, désolé ^^




<hr size ="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
3
moimatthieu Messages postés 68 Date d'inscription jeudi 17 juillet 2008 Statut Membre Dernière intervention 6 mars 2010
16 sept. 2008 à 12:06
Bon ben je suis un très gros boulet :( °_°" : depuis hier je confond MM/JJ/AA (09/05/08) et JJ/MM/AA (05/09/08) donc maintenant je me retrouve avec le 257ème jour (13 septembre) au lieu du 05 septembre. Problème des années bisextiles ? J'ai compté 10 années bisextiles depuis 1970 alors que je n'ai qu'une différence de 8. bizarre !!!
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
16 sept. 2008 à 13:00
je n'ai pas open office...



pars de l'exemple
72, 193, 88, 214
pour trouver

09/05/08 18:05:12




<hr size="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
3
moimatthieu Messages postés 68 Date d'inscription jeudi 17 juillet 2008 Statut Membre Dernière intervention 6 mars 2010
16 sept. 2008 à 13:48
Si je compte 8 jours en plus pour les années bissextiles, je retombe bien sur le 09/05/08. Sinon j'arrive au 09/13/08 à la bonne heure (-2h du T0 : 16 --> 18)

Tu t'es basé sur 365 jours dans l'année ou sur 365,25 ?
Moi j'ai pris 365.
Voici la version Excel :
http://www.cijoint.fr/cjlink.php?file=cj200809/ciji8y7W2S.xls
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
17 sept. 2008 à 18:20
bon çà me chagrinait un peu quand même....

j'ai refais le code











il n'y a plus aucune erreur. le bug venait du fait que certains groupes contiennent des "00", ce qui coupe alors la chaine à tort

il faut donc compter par groupes de X carac, et non couper selon ces "00"...

tu devrais ne plus avoir aucun bug de cette manière

ps : code refait => 18 lignes :p
ps : pense à valider la ou les réponses qui t'ont permis de résoudre ton problème (s'il est maintenant résolu ^^)
ps : tu trouveras des exemples de recherche récursive sur www.codyx.org

++

<hr size="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
3
moimatthieu Messages postés 68 Date d'inscription jeudi 17 juillet 2008 Statut Membre Dernière intervention 6 mars 2010
11 sept. 2008 à 15:11
Bonjour à tous

Mon message précédent semble ne pas être corectement passé donc je le remets :

Je vais essayer d'être clair dans mes explications :
Je travail sur une application indutrielle qui comporte un afficheur Magelis XBT qui stocke ses données que nous exportons ensuite via une clé USB. Nous récupérons ainsi des fichiers .dat que nous devons convertir en format .csv via un logiciel sous Copyright Schneider. Ce que nous souhaitons faire c'est faire un programme VB qui convertisse les données afin de pouvoir faire tourner ce logiciel qui n'aura pas les logiciels Télémécanique installés.
Le problème que j'ai est au niveau du format du fichier .dat. Si j'ai réussi a mettre la photo ci-dessous, vous pouvez voir à droite ce que j'obtiens quand je lis le fichier .dat (des trèfles, coeurs, apostrophes, etc) à partir de mon programme et à gauche le résultat que j'aurai du obtenir.
Je penses que j'ai un problème de formatcde fichier. Je lis mon fichier via les les commandes suivantes :
Dim readText() As String = File.ReadAllLines(lieu, Encoding.UTF8)

For Each s In readText

J'ai essayé les codages ASCII, UTF7, UTF8, UTF32, Unicode et BigEndianUnicode mais je n'ai pas trouvé mon bonheur.
Quelqu'un peut'il m'aider ?

Désolé je peux plus remettre l'image :(. Je peux toute fois l'envoyer par mail à tous ceux qui me le demanderont.

Merci d'avance de votre aide.
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
11 sept. 2008 à 16:17
salut,

héberge ton image sur cijoint.fr par exemple, çà nous aidera
++


<hr size="2" width="100%" />
Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp

 
0
moimatthieu Messages postés 68 Date d'inscription jeudi 17 juillet 2008 Statut Membre Dernière intervention 6 mars 2010
11 sept. 2008 à 16:46
Je ne connaissais pas ce site, c'est super pratique.
L'image est ici : http://www.cijoint.fr/cjlink.php?file=cj200809/cijTkRdMGf.jpg
0
moimatthieu Messages postés 68 Date d'inscription jeudi 17 juillet 2008 Statut Membre Dernière intervention 6 mars 2010
11 sept. 2008 à 16:51
J'ai également esayé un affichage par byte, ça m'a donné ça :
http://www.cijoint.fr/cjlink.php?file=cj200809/cijN2kOUC9.jpg
J'ai essayé d'analyser ces données en regardant une table ascii en parallèle mais ça ne m'a rien donné de concluant
0
moimatthieu Messages postés 68 Date d'inscription jeudi 17 juillet 2008 Statut Membre Dernière intervention 6 mars 2010
11 sept. 2008 à 17:11
Voilà : http://www.cijoint.fr/cjlink.php?file=cj200809/cijZDAmSDu.zip
J'y ai mis le fichier .dat (source à convertir) et le fichier .csv (fichier converti)

je vais regarder ce que tu as dit :4carctères, 2car, 1car


PS : ton sondage dans ta signature ne marche plus
0
moimatthieu Messages postés 68 Date d'inscription jeudi 17 juillet 2008 Statut Membre Dernière intervention 6 mars 2010
12 sept. 2008 à 10:56
Salut

A l'heure où tu as envoyé ton précédent message j'étais dans le car entre mon boulot et mon domicile (1h30), voilà pourquoi je n'ai pas répondu.

Merci pour l'aide que tu m'as déjà apporté mais il y a encore plusieurs choses que je ne comprends pas :

Comment as-tu obtenu ce type d'affichage : ^HÁXô ?? ça ne vient pas de chez moi et je n'arrive pas à afficher de telles choses.
Comment sais-tu que la base c'est celle du 1er jnvier 1970 à 2h ??? Il faut que je compte d'un coté le nombre de jour depuis le 1er janvier 1970 et de l'autre les secondes à partir de 2h jusqu'à mon heure ?
Je n'ai toujours pas réussi à comprendre le codage. Les seules choses que je penses avoir vu ce sont les 2èmes et les 6èmes caractères qui semblent varier respectivement en fonction de l'unité de la donnée et des secondes. J'ai remarqué également le changement du 4ème caractère passant de X à Y au début puis à Z un petit peu plus tard, mais sur quel changement, mystère !

Si j'arrive à recréer ce convertisseur de m**** et que mon patron est d'accord, je déposerais ici le code.
0
moimatthieu Messages postés 68 Date d'inscription jeudi 17 juillet 2008 Statut Membre Dernière intervention 6 mars 2010
12 sept. 2008 à 14:33
Heu ... je débutes en VB enfin plutôt VB.NET puisque j'utilise Visual Studio 2008 donc il risque plutôt d'y avoir 150 à 200 lignes avant que ça ne fonctionne et que je ne fasse le ménage :$.

Tu dis la "freetextbox", c'est pas du VB.NET ça ? Si ? Je la trouve pas dans l'aide.
Le problème que j'ai depuis le début c'est que je n'arrive pas à trouver les bonnes valeurs ascii puisque je n'ai pas la bonne table : dans la mienne je n'ai pas les coeurs, carrés, etc. J'utilisais celle-ci jusque là : http://www.table-ascii.com/ mais on est pas en ascii, c'est ça ?*

Un très très grand merci déjà de ton aide .... même si sans la bonne table j'arrive pas à avancer :(
0
moimatthieu Messages postés 68 Date d'inscription jeudi 17 juillet 2008 Statut Membre Dernière intervention 6 mars 2010
12 sept. 2008 à 14:45
Je viens de trouver certains caractères dans "l'alphabet" tchèque (norme unicode) °_°" : http://bohemica.free.fr/caracteres/caracteres2.htm

Avec cette table je trouve les valeurs suivantes :
 --> 127
Š --> 154
H
Á --> 193
Y
?

je suis pas certain que mes valeurs soient les bonnes
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
12 sept. 2008 à 14:57
freetextbox c'est la zone ici dans laquelle je te réponds en html ^^
elle a pu changer l'affichage puisque çà dépend de la typo, mais comme dit, on est bien en ASCII standart 

donc ton 4e caractère
Á --> 193
, oui
par contre il n'y a aucun
127
en 1er carac...

<hr size="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
Rejoignez-nous