LECTEUR DE FICHIER TOMTOM BINARY EN VB 6.0

Tanaka56 Messages postés 124 Date d'inscription samedi 8 avril 2006 Statut Membre Dernière intervention 29 janvier 2009 - 10 sept. 2006 à 11:19
 Profil bloqué - 25 mars 2009 à 18:02
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/39506-lecteur-de-fichier-tomtom-binary-en-vb-6-0

Profil bloqué
25 mars 2009 à 18:02
C'est surtout Willi qu'il faut remercier car c'est lui qui a fait la version VB net. Je n'ai fait que retranscrire de VB Net vers VB 6.0 car cela avait été demandé par un membre si mes souvenirs sont bons.
A + et bonne prog
BILLOTmi Messages postés 13 Date d'inscription jeudi 27 novembre 2008 Statut Membre Dernière intervention 25 octobre 2018
25 mars 2009 à 09:06
Salut,
Bon programme VB fait par quelqu'un qui apparement connait aussi C++
Reactivité tres rapide.
Profil bloqué
24 mars 2009 à 18:29
Merci BillotMi pour le bug que tu as découvert.
vous avez le droit de mettre une note si vous le désirez
A+ et bonne prog
BILLOTmi Messages postés 13 Date d'inscription jeudi 27 novembre 2008 Statut Membre Dernière intervention 25 octobre 2018
24 mars 2009 à 12:13
Tres bon programme,
Juste deux petits bugs a signaler (si fichier.ov2 comportant des Skippers et si description POI > 255 octets) dont voici une correction.

' -----------------------------------------------
' récup de la longueur de l'enregistremant POI
' -----------------------------------------------
'iLength = HexFile(compteur + 1) ' Bug si longueur > 255
' Correction
If typenreg% = 1 Then
' SKIPPER POI: Occupe toujours 21 Octets
' détermine la zone couverte par une partie du fichier
' Permet de sauter d'un seul coup un bloc de points
' si celui que l'on cherche n'est pas dans la zone
' Il suffit alors d'ajouter la taille du bloc
' au pointeur. C'est un accelerateur de traitement
' pour les recherches.
' Longueur constante pour ce type d'enregistrement
iLength = 5 * 4 + 1
Else
' Longueur variable pour les autres types d'enreg
CopyMemory iLength, HexFile(compteur + 1), 4
End If

Juste une petite remarque, Pourquoi avoir utilisé deux gros blocs memoire (Chaine$ et hexFile) pour charger l'integralité du fichier et ne pas avoir utilisé GET pour charger directement les variables (sans passer par que l'API CopyMem) et SEEK pour se positionner dans le fichier ?

Tres cordialement
Encore bravo pour le travail accompli.
Profil bloqué
24 déc. 2007 à 17:41
sinon bonnes fêtes à tous et A+ ( erreur de frappe)
Profil bloqué
24 déc. 2007 à 17:40
Pour Roxa91
Pour pouvoir exploiter la source il faut posséder Visual Basic 6.0 qui est une interface de développement en Basic sous Windows
Le site est un site de sources de programmes en différents langages ( dont celui-ci en VB) et il est déconseillé de fournir les Exe à cause des possibilités de virus et pour respecter l'idée même du site : Codes-Sources

sinon bonns fêtes à tous et A+
roxa91 Messages postés 2 Date d'inscription dimanche 6 mai 2012 Statut Membre Dernière intervention 6 mai 2012
24 déc. 2007 à 15:47
Bien le bonjour a tous. Dites-moi, comment installent-ont ce logiciel, s'il vous plaît. Merci d'avance...
gallyhc Messages postés 386 Date d'inscription samedi 4 octobre 2008 Statut Membre Dernière intervention 19 février 2018 2
12 sept. 2006 à 09:53
Bonjour,

Cela est vrai, mais hier j'êtais tres fatiger ;-) Sinon bonne continuation.

A++
Profil bloqué
12 sept. 2006 à 07:21
Merci Brunews pour ces précisions
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
12 sept. 2006 à 01:14
Juste pour affiner le cas de "A = A + &H1':
le décodage ne se fait qu'en phase de compilation (fort heureusement), dans l'exécutable c'est toujours codé direct en binaire.
On peut aussi accorder que s'il y a 2 octets de préfixe à vérifier avant une valeur hexa pour le compilo, le décodage binaire de l'hexa est TRES nettement plus simple et rapide car pas une seule multiplication mais seulement du "shl 4", il n'y a pas photo sur le rendement.
Profil bloqué
11 sept. 2006 à 23:31
Salut Gally
Faire un programme de conversion VB net --> VB 6.0 : Ouahou !!!! Si tu y arrives tu as battu l'équipe Microsoft et envoie un CV à Bill Gates !!!!

Autre chose et ne le prends pas mal : le proc travaille en binaire et c'est l'homme qui travaille en décimal ou octal ou héxadécimal ; par contre le calcul n'est pas plus simple ou plus performant .
Un exemple prends le chiffre 1 dans A = A + 1
Toi tu écrit A = A + &H1 : le processeur décode le & puis le H , il en déduit que c'est de l'héxa , prends les chiffres héxa pour convertir le résultat dans le type de la variable A puis fait l'addition
Dans l'autre cas il déduit direct des chiffres décimaux
Pourquoi faire compliqué lorsque l'on peut faire simple ?
Allez bonne prog
gallyhc Messages postés 386 Date d'inscription samedi 4 octobre 2008 Statut Membre Dernière intervention 19 février 2018 2
11 sept. 2006 à 22:46
salut Galain,

Cela est peu être une erreur de ma par mais je travail depuis kelke année en hexa dans toute mais source et ce juste parce que le proc travail comme cela et donc je penses ke c'est calcul plus simple pour le proc.

sinon j'ai encore un peu modifier ton code mais rien de très important...

Sinon le conversion du code est plutot bien et c'est la que je voudrais rebondir. Pourait on faire un programme de conversion .net VB6?

Sinon bonne prog
A++
[Gally Home Corp]
Profil bloqué
11 sept. 2006 à 21:15
Merci Gally d'avoir corriger les petites erreurs
1° Le i% est resté car avant je récuperais la valeur de la longitude ou de la latitude autrement ( je n'utilisais pas copymemory)
2) J'ai modifié la récupération de la taille du fichier avec un LOF
3) J'ai rajouté le Erase pour le tableau

Par contre tu peux éviter de mettre les valeurs constantes numériques avec le &H : ce n'est à utiliser que lorsque l'on travaille vraiment au niveau de l'héxadécimal

Pour Drissou merci pour l'astuce du table.redraw

bonne prog à tous et vive VB France et Codes Sources
gallyhc Messages postés 386 Date d'inscription samedi 4 octobre 2008 Statut Membre Dernière intervention 19 février 2018 2
11 sept. 2006 à 09:25
Bonjour,

Deja merci pour ta reponse même si celle-la ne m'aide pas beaucoup ;-).

Sinon j'ai regarder le code du format "OV2" avec attention et j'ai remarqué quelque petites erreurs (rien de grave non plus).

1. Tu declare quelque variable et beaucoup de le sont pas et comme tu n'es pas en option explicit cela fait que d variable ne serve a rien en fait.

2. Tu recuperes la taille de ton fichier par la taille physique de celui-ci, mais en plus simple tu prend la taille du chargement en cours par:

taille& FileLen(sFilename) REMPLACER PAR lngWidht LOF(lngCanal)

3. Les erreur de variables ce retrouve par exemple dans la fonction "CopyMemory longitude, HexFile(i% + compteur + 5), 4"

- A quoi sert le i%, en lecture qu code source cela ne sert a rien.

4. Pour aider au maximum a l'evolution de ce code source je me suis permit de refaire une version (plus propre), j'ai mis entre () parce que tout est relatif. Il y a surement d'autre domification a faire peu être?

' DECLARATION DES VARIABLES.
Dim lngI As Long
Dim lngJ As Long
Dim lngCount As Long
Dim lngCanal As Long
Dim lngWidht As Long
Dim lngILength As Long
Dim strTemps As String
Dim strFileName As String
Dim tabHEXFile() As Byte

' CHARGEMENT DES FICHIERS OV2.
Dialogue.ShowOpen
strFileName = Dialogue.FileName
If strFileName <> vbNullString Then
lngCanal = FreeFile
Open strFileName For Binary As lngCanal
lngWidht = LOF(lngCanal)
strTemps = Space$(lngWidht)
Get #lngCanal, , strTemps
Close #lngCanal

ReDim tabHEXFile(&H0 To lngWidht - &H1)
For lngI = &H1 To lngWidht
tabHEXFile(lngI - &H1) = Asc(Mid$(strTemps, lngI, &H1))
Next lngI
lngJ = &H1

Table.Row = &H1
While (Not lngWidht <= lngCount + &H1)
lngILength = tabHEXFile(lngCount + &H1)

Table.Col = &H0
Table.Text = Str$(lngJ)

strTemps = ""
For lngI = (lngCount + &HD) To (lngCount + lngILength - &H1)
strTemps = strTemps + Chr$(tabHEXFile(lngI))
Next lngI
Table.Col = &H1
Table.Text = strTemps

Call CopyMemory(lngCanal, tabHEXFile(lngCount + &H5), &H4)
Table.Col = &H2
Table.Text = Virgule(Str$(lngCanal))

Call CopyMemory(lngCanal, tabHEXFile(lngCount + &H9), &H4)
Table.Col = &H3
Table.Text = Virgule(Str$(lngCanal))

Table.Rows = Table.Rows + &H1
Table.Row = Table.Row + &H1
lngCount = lngCount + lngILength
lngJ = lngJ + &H1
Wend
End If
Erase tabHEXFile()

Voila j'espere avoir un peu aider et @++
[Gally Home Corp]
cs_drissou Messages postés 160 Date d'inscription dimanche 7 décembre 2003 Statut Membre Dernière intervention 14 janvier 2009
11 sept. 2006 à 09:24
Bonjour,
super ce prog
rajoute seulement, avant le remplissage de Table
Table.redraw=false

et à la fin
table.redraw = true
tu n'auras plus d'effet de clignotement et le chargement se fera plus vite..
Drissou
Tanaka56 Messages postés 124 Date d'inscription samedi 8 avril 2006 Statut Membre Dernière intervention 29 janvier 2009
10 sept. 2006 à 11:19
Vraiment très bien.
Bien sur dirons certains "Dommage que l'on ne puisse pas faire de modification, d'adjonction ou de suppression", mais si ça se trouve ce n'est peut être qu'une ébauche et comme je le disais : De plus en plus, on commence à s'équiper de GSM. Ce "source" pourrait presque concurrencer le logiciel "PoiEdit". Merci à Willy et à toi Galain. Je vous mets un 10 à tous les deux, pour y avoir pensé et pour la modif. Bonne continuation.
Rejoignez-nous