Convertir une string "spéciale" en double

Résolu
kirby18 Messages postés 11 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 11 mai 2006 - 11 mai 2006 à 09:12
kirby18 Messages postés 11 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 11 mai 2006 - 11 mai 2006 à 12:32
Bonjour, je travaille sur un petit projet en VB6. Je dois récupérer les données du fichier texte ci-joint.

A l'emplacement 135 et ce sur 8 caracteres ( 64 bits ), il doit y avoir un double à virgule. A la place, je trouve une string de caracteres speciaux.

J'ai essayé de convertir cette string en hexa ou en binaire avant de la caster double, mais rien n'y fait. Il trouve un entier à énorme exposant.
J'ai vérifier les doubles des enregistrements grace à Hew WorkShop. Le double du 1er enregistrement est : 3,13. Je cherche maintenant un automatisme car il y a beaucoup d'enregistrements.

Donc je cherche un algo me permettant de convertir directement en double.
Merci de m'aider.

23 réponses

Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
11 mai 2006 à 12:11
pour open en binary:

Get/Put numérofichier, position, variable

ça lit/écrit dans le fichier, à la position donnée, les caractères contenus dans la variable

position par défaut = position courante.

pour CopyMemory, il vaut mieux passer par un tableau de Bytes.




Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)



Dim var As Double

ReDim B(7) As Byte

Open Nomfichier For Binary As #1

Get #1, , B

Close #1

CopyMemory var, B(0), 8

MsgBox var


Daniel
3
kirby18 Messages postés 11 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 11 mai 2006
11 mai 2006 à 09:13
ah excusez moi je pensais qu'on pouvait rajouter une pièce jointe mais non en fait :p
0
malhivertman1 Messages postés 489 Date d'inscription mardi 16 novembre 2004 Statut Membre Dernière intervention 22 novembre 2007 1
11 mai 2006 à 09:47
Essaye avec CDbl(tavariable)
0
kirby18 Messages postés 11 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 11 mai 2006
11 mai 2006 à 09:56
ça ne marche pas ! :(
0

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

Posez votre question
malhivertman1 Messages postés 489 Date d'inscription mardi 16 novembre 2004 Statut Membre Dernière intervention 22 novembre 2007 1
11 mai 2006 à 10:00
Dim var as double
var = CDbl(tavariable) peut etre
0
kirby18 Messages postés 11 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 11 mai 2006
11 mai 2006 à 10:20
euh ... non
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
11 mai 2006 à 10:34
Tente asc(carac)
Cette fonction te renvoie le code ASCII du 1ér carac de la chaine passer en paramètre

D'oh! Nuts!
Mmmmm...
DONUTS
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
11 mai 2006 à 10:40
Heeee oups c'est un bouble que tu veut, et je ne sait pas command reconaitre la virgule.
A tu tenter d'ouvrir ton fichier en binary (je dit ça même si je ne me souvien plus de la diferance) mais la donnée de ton double doit étre enregistrer en donée brut, soit on ecrit la valeur des octect, et un carac c'est un octect, donc 8 carac = 8 octect et un double fait 8 octect (ca me paraiterai logique)

D'oh! Nuts!
Mmmmm...
DONUTS
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
11 mai 2006 à 10:44
Command lit tu ton fichier avec :
input #x, NomVariable
Ou tu recup toute le ligne de texte et tu extrait les donée ensuite? (avec "Line Input #x,NomVarString")

D'oh! Nuts!
Mmmmm...
DONUTS
0
kirby18 Messages postés 11 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 11 mai 2006
11 mai 2006 à 10:51
Effectivement. Les 8 octets valent les 64 bits que je mentionnais.

En ce qui concerne l'ouverture de fichier en binary, je l'ai fait même si je ne vois pas trop la différence ( en tout cas, quand je récupère d'autres données ).

J'ai trouvé ce morceau de code sur le net mais je ne le comprends pas et j'ai peur qu'il ne soit pas complet. Pourriez vous m'aider ?

dim dNumber as double
open {somefile} for binary as #Handle
get #Handle,,dNumber
close #Handle
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 mai 2006 à 10:52
salut,
c'est quoi la question? :$

tu veux convertir "3,13" (string) en 3,13 (double) ?

Dim dConv As Double
dConv = CDbl(Val(Replace("3,13", ",", ".")))
0
kirby18 Messages postés 11 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 11 mai 2006
11 mai 2006 à 11:01
je récupère tout dans une string avant de traiter :s

euh c'est peut etre pas clair en haut mais j'essaie de récupérer un double affiché sous forme de caractères spéciaux dans un fichier, mais le cdbl ne marche pas
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 mai 2006 à 11:11
on a pas ton fichier texte, ni tes méthodes d'accès (fonctions). en plus tu parles de VB6 et de WorkSop, donc VBA?
plus tu seras flou et plus tu risques de le rester ;)
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
11 mai 2006 à 11:19
Qelqu'un connais une fonction pour converir une valeur numeric en un string mais binaire soit
2 -> "10"
5 -> "101"
Je pense que c jouable en convertisant une à une les carac spéciau en valeur, puis en binaire, concaténer tout cas et reconvertire en double.
Voillez ce que je veut dire?

D'oh! Nuts!
Mmmmm...
DONUTS
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
11 mai 2006 à 11:24
Salut,

si c'est du binaire, faut que tu le lise en binaire directement dans un Double,

sinon tu le lit en chaîne et tu le copie dans un Double avec copymemory.


Daniel
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
11 mai 2006 à 11:29
copymemory?????? Je trouve pas dans l'aide (je suis en VBA sur Word avec Office 2003, et Win XP Sp2) et losque j'execute "Sub ou Fonction non défini"
CA A L'AIRE VACHEMENT BIEN COMME FONCTION!!!
Command ça marche????

D'oh! Nuts!
Mmmmm...
DONUTS
0
kirby18 Messages postés 11 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 11 mai 2006
11 mai 2006 à 11:34
PCPT > Désolé mais j'arrive pas à mettre des pièces jointes
Ensuite ma fonction d'accès : Open strNom For Binary Access Read As #lngFileNum pris sur le code source xedit trouvé sur ce site.

Après je parle de Hex Workshop, éditeur hexa qui n'a rien à voir avec vb6. Il me servait juste à vérifier que le double existe vraiment. Donc je suis bien sur VB6

Est ce que ça ira ...?

Polack77 > non justement j'ai essayé de convertir directement le binaire de 64 bits ( valant la string de 8 caracteres ) en un double mais ça ne marche pas.
Imposssible de convertir les caracteres en hexa puis en binaire également car il y a "overflow" surement dû au traitement de 64 bits.
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
11 mai 2006 à 11:35
bon je fais un essai,

écriture d'un Double = 3.13

visu avec un éditeur hexa: 0A D7 A3 70 3D 0A 09 40




Daniel
0
kirby18 Messages postés 11 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 11 mai 2006
11 mai 2006 à 11:51
exactement ça !
la fonction copymemory marche si je prends comme 2e argument ( la source ) la string qui a copié toutes les données du fichier ?

je suis en train de chercher la dll pour copymemory. j'essaye et je te dis ça !
0
Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
11 mai 2006 à 11:55
tu peux lire directement dans un Double:

Dim var As Double

Open Nomfichier For Binary As #1

Get #1, , var

Close #1


Daniel
0
Rejoignez-nous