Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di escocat
    Registrato dal
    Feb 2012
    Messaggi
    308

    [VB10] WindowsForm - Funzione FileGet

    Salve a tutti. Sto cercando di dimostrare a me stesso che è possibile vivere senza usare le strutture
    In VB10 uso le funzioni FilePut e FileGet con un record dichiarato a livello di struttura, senza problemi. In VB5 il mio record per la lettura/scrittura di un file random era una semplice variabile dichiarata a lunghezza fissa con la sua brava istruzione

    Dim rec As String*100

    ad esempio. Sto cercando di "forzare" il VB10 per fare lo stesso, in questo modo:

    codice:
    Public Class Form1
    
        <VBFixedString(15)> Public rec As String
    
        Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As _
        System.EventArgs) Handles Button1.Click
    
            FileOpen(1, "esempio.dat", OpenMode.Random, , , 15)
            rec = "1" + Space(14)
            FilePut(1, rec, 1, True)
            rec = "2" + Space(14)
            FilePut(1, rec, 2, True)
            rec = "3" + Space(14)
            FilePut(1, rec, 3, True)
            rec = "4" + Space(14)
            FilePut(1, rec, 4, True)
            rec = "5" + Space(14)
            FilePut(1, rec, 5, True)
    
            FileClose(1)
    
         End Sub
    End Class
    Fin qui niente di particolare, il Button1 fa il suo dovere, se apro in BlockNotes il file esempio.dat mi ritrovo 5 campi di 15 caratteri ciascuno, che iniziano per 1,2,3,4,5.
    Il "True" come parametro a FilePut imposta StringIsFixedLength in modo che non scriva il descrittore a due byte della lunghezza della stringa (ma questo lo sapete meglio di me). Il problema nasce quando vado a leggere un record con la funzione FileGet. Io faccio così:

    codice:
    Public Class Form1
        
        <VBFixedString(15)> Public rec As String
    
        Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As _     
        System.EventArgs) Handles Button1.Click
    
            FileOpen(1, "esempio.dat", OpenMode.Random, , , 15)
    
            FileGet(1, rec, 1, True)
    
            MsgBox(rec & Len(rec))
    
            FileClose(1)
    
    
    
        End Sub
    End Class
    Risultato: il nulla totale per 'rec', e 0 per il valore di len(rec). E nessun messaggio di errore da parte del compilatore. Come mai FilePut capisce e FileGet no? Dove sbaglio?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Manca questa

    rec = Space(15)

    prima della FileGet
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di escocat
    Registrato dal
    Feb 2012
    Messaggi
    308
    E' vero! Voleva essere inizializzata! Forse perchè FileGet non sa nulla della lunghezza di 'rec', dato che <VBFixedString(15)> dà solo indicazioni a FilePut ma non imposta la lunghezza della stringa.
    Grazie Oregon.

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.