Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Ottenere dati da file binary (con struct) con VB6

    Salve a tutti, sono un nuovo iscritto, e sono un po' alle corde. Ho una discreta esperienza in Visual Basic 6 e assolutamente nulla in C e similari.
    Per questioni di laurea mi trovo a dover estrarre dei dati da file binary di cui conosco il metodo di immagazzinamento che fa riferimento ad una struct di C che ho. Il problema è che in C sono a zero. Ho letto vari tread su come aprire questi file con VB ma non so come definire una classe o un type in VB che sia assimilabile alla struct che ho. Mi spiego meglio.
    una serie di record ognuno dei quali è una struct fatta come segue:

    struct RecordTelemetria
    {
    float pos[3];
    float speed;
    float rpm;
    char marcia;
    unsigned char acc;
    unsigned char freno;
    unsigned char volante;
    unsigned char caricoASx;
    unsigned char caricoADx;
    unsigned char caricoDSx;
    unsigned char caricoDDx;
    };

    I primi 12 byte del file sono usati per la stringa identificativa del formato. In pratica i primi 12 byte contengono la stringa "FileTelem1.0".
    Dopo questi 12 byte seguono un numero imprecisato di struct RecordTelemetria fino alla fine del file.
    Come faccio a trasformarli in un file di testo tabulato o in una matrice dinamica o qualunque altro metodo che mi faccia accedere ai valori di ogni campo? Si può fare in VB6?
    Ringrazio chiunque voglia rispondermi in merito...

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non pretendo che funzioni a primo colpo, ma ho scritto qualche linea da cui puoi prendere spunto, modificandola dove non va ...

    codice:
    Private Type rec
        rpos(1 To 3) As Single
        speed As Single
        rpm As Single
        marcia As Byte
        acc As Byte
        freno As Byte
        volante As Byte
        caricoASx As Byte
        caricoADx As Byte
        caricoDSx As Byte
        caricoDDx As Byte
    End Type
    
    Private Sub Command1_Click()
        Dim ir As Long
        Dim nr As Long
        Dim r As rec
        
        Open "C:\file.bin" For Binary As #1
        Open "C:\file.txt" For Output As #2
        
        nr = (LOF(1) - 12) / LenB(r)
        Seek #1, 12
        
        For ir = 1 To nr
            Get #1, , r
            
            Print #2, rpos(1)
            Print #2, rpos(2)
            Print #2, rpos(3)
            Print #2, speed
            Print #2, rpm
            Print #2, marcia
            Print #2, acc
            Print #2, freno
            Print #2, volante
            Print #2, caricoASx
            Print #2, caricoADx
            Print #2, caricoDSx
            Print #2, caricoDDx
            Print #2, ""
        Next ir
        
        Close
    End Sub

  3. #3

    Grandissimo

    Mitico, mi hai già portato dove non pensavo di arrivare. Tranne un with r mancante funziona tutto, però ho provato a confrontare i dati che mi visualizza il visualizzatore di quel tipo di file ma non coincidono, comunque provo meglio e ti faccio sapere. Grazie per la solerzia. Non ci sarei proprio riuscito. Grazie comunque poi ti faccio sapere, Michele

  4. #4
    Ecco trovato, nel seek bisognava puntare al 13° byte, ora è ok... praticamente mi laureerò grazie a te... ti citerò tra i ringraziamenti..
    Grazie ancora, Michel Nostradamus

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.