+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 8 su 8

Discussione: VB.Net 10 Problemi per trasferire dati numerici di record da Textbox a file.dat

  1. #1
    luciano mancino non è in linea Novello
    Post
    4

    VB.Net 10 Problemi per trasferire dati numerici di record da Textbox a file.dat

    Ciao, ho un problema nel trasferire e visualizzare i dati numerici inseriti in un record tramite caselle di testo, all'interno di un file.dat. In altri termini dopo aver inserito i dati dal form, li visualizza regolarmente nelle liste, ma quando apro il file prodotti.dat, mentre i campi string sono regolarmente visibili, quello single relativo al prezzo me lo trasforma in caratteri strani. Ho riportato anche il codice inserito nel modulo.
    Grazie a chi volesse aiutarmi!

    codice:
    Public Class Form1
         Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            prodotti = FreeFile()
            If System.IO.File.Exists("C:\Users\Luigi\Desktop\prodotti.dat") Then
                MsgBox("il file esiste già e sarà eliminato")
                Kill("C:\Users\Luigi\Desktop\prodotti.dat")
    
            End If
            FileOpen(prodotti, "C:\Users\Luigi\Desktop\prodotti.dat", OpenMode.Random, , , Len(prod))
    
        End Sub
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            prod.cod = TextBox1.Text
            prod.desc = TextBox2.Text
            prod.prezzo = Val(TextBox3.Text)
            ' ora digito l'istruzione che mi permette di inserire all'interno di un file chiamato prodotti,
            ' il contenuto del record prod
            FilePut(prodotti, prod)
            TextBox1.Text = ("")
            TextBox2.Text = ("")
            TextBox3.Text = ("")
            TextBox1.Focus()
            FileClose()
        End Sub
        Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
            FileOpen(prodotti, "C:\Users\Luigi\Desktop\prodotti.dat", OpenMode.Random, , , Len(prod))
            ListBox1.Items.Clear()
            ListBox2.Items.Clear()
            ListBox3.Items.Clear()
            Do While Not (EOF(prodotti))
                FileGet(prodotti, prod)
    
                ListBox1.Items.Add(prod.cod)
                ListBox2.Items.Add(prod.desc)
                ListBox3.Items.Add(prod.prezzo)
            Loop
            FileClose()
        End Sub
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            FileClose()
            End
        End Sub
    
    End Class
    codice:
    Module Module1
        Public Structure t_prod
            <VBFixedString(5)> Public cod As String
            <VBFixedString(20)> Public desc As String
            Public prezzo As Single
        End Structure
        Public prod As t_prod
        Public prodotti As Integer
    End Module

  2. #2
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    15,434
    Blogs
    5
    I "caratteri strani" di cui parli sono i corrispondenti ASCII del valore binario dei singoli byte che compongono il numero. Così è anche per il valore Integer.

    Nulla di sbagliato, tutto regolare.
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

  3. #3
    luciano mancino non è in linea Novello
    Post
    4
    Ok ma come faccio a visualizzare correttamente il numero anzichè l'ASCII?

  4. #4
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    15,434
    Blogs
    5
    A che ti serve visualizzare il valore all'interno del file? Il file va letto e il contenuto visualizzato dal programma.

    Non è un problema ma una scelta progettuale.

    L'hai scritto tu quel codice? Sei tu che hai scelto questo formato per il file (in una modalità un po' vecchia peraltro, stile vb6 o anche precedente...).
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

  5. #5
    luciano mancino non è in linea Novello
    Post
    4
    Che formato avrei dovuto utilizzare?
    Mi stai dicendo che non esiste la possibilità di creare un file.dat, o txt o doc che permetta di visualizzare il valore numerico?

  6. #6
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    15,434
    Blogs
    5
    No non mi hai capito e non mi hai neanche risposto...

    Se usi una struttura con dei campi di tipo numerico e la Put/Get, allora stai operando in binario e quei valori saranno in binario.
    Se vuoi che i dati non siano in binario, definisci quei campi come VBFixedString e converti i valori in stringa quando scrivi, in numero quando leggi.

    Oppure non usare un file di quel tipo e non usare strutture. Usa un streamWriter e un file di testo in cui scriverai i dati con la WriteLine.

    Ripeto, sono metodi standard di gestione dei file, che si usano sin dai primi BASIC.

    Se non usi un libro leggi questo documento

    https://msdn.microsoft.com/it-it/lib...code-snippet-1

    In ogni caso ti consiglio di dimenticare eventuali nozioni di basic, vb6, vba e studiare le basi da un libro di vbnet.
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

  7. #7
    luciano mancino non è in linea Novello
    Post
    4
    Intanto ti ringrazio per le risposte.
    Provo a rispondere alle domande che mi avevi fatto, non volevo essere elusivo : il codice l'ho scritto io modificando qualcosa di simile copiato da un testo scolastico, probabilmente non in linea con il VB.Net comunemente e correntemente utilizzato. Per quanto riguarda invece l'utilità di visualizzare i valori all'interno del file, era solo per capire se la procedura di trasferimento era corretta, niente di più.
    Ho capito che probabilmente devo ripartire da zero o quasi se voglio utilizzare VBNet e parcheggiare nello scantinato il vecchio VB6.
    Grazie ancora per i consigli e per il link, mi rimetto a studiare e vediamo di tirare fuori qualcosa.
    Eventualmente richiedo aiuto

  8. #8
    L'avatar di AntonioG
    AntonioG non è in linea Moderatore Globale Ultimo blog: Commodore 64 e Codemotion
    Luogo
    Roma
    Post
    15,434
    Blogs
    5
    Il fatto è che anche con vb6 vedresti le stesse informazioni in un file così scritto.

    Ed è tutto corretto dato che il file è in binario, con vb6 e con vbnet.
    Avvisi generali e importanti, a pena CHIUSURA thread e/o BAN
    Il crossposting è vietato.
    Le richieste di "pappa pronta" sono vietate.
    Utilizzate i tag CODE per il codice.
    Leggere il Regolamento per chiarimenti PRIMA di creare nuovi thread.
    Utilizzare sempre i PM per comunicare con i moderatori.
    Non mi contattate in PM per problemi di software, usate il forum

+ Rispondi al Thread

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi