Imports System.IO
Imports System.Runtime.InteropServices
Public Class frmPOI
Private Sub ButtonLoadFile_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonLoadFile.Click
Dim fDialog As New OpenFileDialog
Dim sFilename As String
Dim j As Integer = 1
fDialog.Filter = "Fichier TomTom Binary (*.ov2)|*.ov2"
'si ok sur boite de dialogue
If fDialog.ShowDialog = Windows.Forms.DialogResult.OK Then
sFilename = fDialog.FileName
Me.Text = "Editeur POI pour TomTom" & " - [" & sFilename & "]"
'variables
Dim Octets() As Byte = Nothing
Dim c As Integer = 0 'compteur
Dim sName As String
Dim cWatch As New Stopwatch
Dim sValue As Integer
Dim iLength As Integer
cWatch.Start() 'démarre le chrono
'lecture du fichier en hexa
Octets = My.Computer.FileSystem.ReadAllBytes(sFilename)
ListView1.Items.Clear()
ListView1.SuspendLayout()
'------------------------------
'traitement...."
'------------------------------
While (Not Octets.Length <= c + 1)
ListView1.Items.Add(j.ToString)
'récupération de la longeur du POI
iLength = Marshal.ReadInt32(Octets, c + 1)
'recuperation de la description
sName = ""
For i As Integer = (c + 13) To (c + iLength - 2)
sName += Convert.ToChar(Octets(i))
Next
ListView1.Items(j - 1).SubItems.Add(sName)
'récuperation de la longitude (4 octets; position du 6ième au 9ième octets dans chaque POI)
sValue = Marshal.ReadInt32(Octets, c + 5)
ListView1.Items(j - 1).SubItems.Add((Convert.ToDouble(sValue) / 100000).ToString)
'recuperation de la latitude (idem pour la latitude sur 4 octets; du 10ième au 13ième)
sValue = Marshal.ReadInt32(Octets, c + 9)
ListView1.Items(j - 1).SubItems.Add((Convert.ToDouble(sValue) / 100000).ToString)
'compteurs
c += iLength 'du pointeur dans le fichier
j += 1 'nombre de points
End While
'affichage des resultats
ListView1.ResumeLayout()
StatusStrip1.Items(0).Text = "Durée du chargement: " & cWatch.ElapsedMilliseconds.ToString & " millisecondes"
StatusStrip1.Items(1).Text = ListView1.Items.Count & " points trouvés"
End If
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'dimension des colonnes
ListView1.Columns(0).Width = 30
ListView1.Columns(1).Width = 390
ListView1.Columns(2).Width = 70
ListView1.Columns(3).Width = 70
End Sub
End Class
9 sept. 2015 à 21:08
J'avais consulté la page de Microsoft, mais cela ne me renseigne pas sur la manière de récupérer les différents enregistrements contenus dans les différentes lignes du fichier.
En gros, j'aimerais récupérer chaque donnée et la stocker dans un tableau, mais je n'arrive pas récupérer ces données.