Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1

    Stringhe a lunghezza fissa in file random

    Ciao a tutti è la prima volta che mi trovo quì.
    Ho un problemone di compatibilità fra VB5 e .NET ora vi dico:
    In Vb5 avevo un programma che scriveva e leggeva un file ad accesso casuale. Il record era formato da due vettori a lunghezza fissa, uno di stringhe a lunghezza fissa e l'altro di single.
    Ora riesco a scrivere il file con .Net in modo che da Vb5 posso leggerlo ma non lo leggo con . Net perchè genera errore.
    Allego il codice e la segnalazione di errore.

    Module Module1

    Public Structure record

    <VBFixedArray(23), VBFixedString(16)> Public CampoStringa() As
    String

    <VBFixedArray(159)> Public CampoSingle() As Single

    Public Sub Initialize()
    ReDim CampoStringa(23)
    ReDim CampoSingle(159)
    End Sub
    End Structure

    Public MachineRecord As New record()

    End Module

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As
    System.EventArgs) Handles MyBase.Load

    MachineRecord.Initialize()

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
    System.EventArgs) Handles Button2.Click

    Dim aa As Integer = (MachineRecord.CampoSingle.Length * 4) +
    (MachineRecord.CampoStringa.Length * 16)

    FileOpen(1, "readers.vbnet", OpenMode.Random, , ,
    Len(MachineRecord)) 'apro il file da visualizzare

    Dim a As Int16

    For a = 0 To 159
    MachineRecord.CampoSingle(a) = a * 10
    Next

    FilePut(1, MachineRecord, 1)

    FileClose(1)

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As
    System.EventArgs) Handles Button1.Click

    FileOpen(1, "readers.vbnet", OpenMode.Random, , ,
    Len(MachineRecord)) 'apro il file da visualizzare

    FileGet(1, MachineRecord, 1)

    Label1.Text = Str(MachineRecord.CampoSingle(Val(TextBox1.Text)))

    Label2.Text = MachineRecord.CampoStringa(Val(TextBox2.Text))

    FileClose(1)

    End Sub

    Messaggio di errore su Fileget(....):

    Eccezione non gestita di tipo "System.IO.IOException" in
    microsoft.visualbasic.dll

    Informazioni aggiuntive: Lunghezza del record non valida.

  2. #2
    Temo non vi siano soluzioni ho provato di tutto ....AIUTO!!!!!

  3. #3
    Utente di HTML.it L'avatar di darkblOOd
    Registrato dal
    Jul 2001
    Messaggi
    2,212

    Re: Stringhe a lunghezza fissa in file random

    Originariamente inviato da PapaIndia
    Ciao a tutti è la prima volta che mi trovo quì.
    Ho un problemone di compatibilità fra VB5 e .NET ora vi dico:
    In Vb5 avevo un programma che scriveva e leggeva un file ad accesso casuale. Il record era formato da due vettori a lunghezza fissa, uno di stringhe a lunghezza fissa e l'altro di single.
    Ora riesco a scrivere il file con .Net in modo che da Vb5 posso leggerlo ma non lo leggo con . Net perchè genera errore.
    Allego il codice e la segnalazione di errore.
    codice:
    Module Module1
    
       Public Structure record
    
          <VBFixedArray(23), VBFixedString(16)> Public CampoStringa() As 
    String
    
          <VBFixedArray(159)> Public CampoSingle() As Single
    
          Public Sub Initialize()
             ReDim CampoStringa(23)
             ReDim CampoSingle(159)
          End Sub
       End Structure
    
       Public MachineRecord As New record()
    
    End Module
    
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As 
    System.EventArgs) Handles MyBase.Load
    
          MachineRecord.Initialize()
    
    End Sub
    
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As 
    System.EventArgs) Handles Button2.Click
    
          Dim aa As Integer = (MachineRecord.CampoSingle.Length * 4) + 
    (MachineRecord.CampoStringa.Length * 16)
    
          FileOpen(1, "readers.vbnet", OpenMode.Random, , , 
    Len(MachineRecord)) 'apro il file da visualizzare
    
          Dim a As Int16
    
          For a = 0 To 159
             MachineRecord.CampoSingle(a) = a * 10
          Next
    
          FilePut(1, MachineRecord, 1)
    
          FileClose(1)
    
    End Sub
    
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As 
    System.EventArgs) Handles Button1.Click
         
          FileOpen(1, "readers.vbnet", OpenMode.Random, , , 
    Len(MachineRecord)) 'apro il file da visualizzare
          
          FileGet(1, MachineRecord, 1)
    
          Label1.Text = Str(MachineRecord.CampoSingle(Val(TextBox1.Text)))
    
          Label2.Text = MachineRecord.CampoStringa(Val(TextBox2.Text))
    
          FileClose(1)
    
    End Sub
    
    Messaggio di errore su Fileget(....):
    
    Eccezione non gestita di tipo "System.IO.IOException" in 
    microsoft.visualbasic.dll
    
    Informazioni aggiuntive: Lunghezza del record non valida.
    intanto riscrivo con i tag per leggere meglio, adesso do uno sguardo e vedo se posso darti qualche dritta

  4. #4
    Utente di HTML.it L'avatar di darkblOOd
    Registrato dal
    Jul 2001
    Messaggi
    2,212
    la prima cosa che mi viene in mente è:
    hai controllato che la lunghezza del record sia giusta per la struttura?

    potrebbe non interpretare il carattere di EOF

    e poi perchè dichiari così?:
    <VBFixedArray(23), VBFixedString(16)> Public CampoStringa() As String

    o string o array ... o no?

  5. #5
    Grazie per aver smosso la discussione

    Il file lo genero e poi lo leggo utilizzando la stessa structure quindi non dovrebbe generare errore.

    La dichiarazione è un po' strana ma si tratta di un array a lunghezza fissa di stringhe a lunghezza fissa. Siccome entrambi non sono più supportate da .Net credo occorra utilizzare entrambi gli attributi.

    E complimentoni per la foto...:-)

  6. #6
    come metti i tag tu.....:-)

  7. #7
    Utente di HTML.it L'avatar di darkblOOd
    Registrato dal
    Jul 2001
    Messaggi
    2,212
    Originariamente inviato da PapaIndia
    Grazie per aver smosso la discussione

    Il file lo genero e poi lo leggo utilizzando la stessa structure quindi non dovrebbe generare errore.

    La dichiarazione è un po' strana ma si tratta di un array a lunghezza fissa di stringhe a lunghezza fissa. Siccome entrambi non sono più supportate da .Net credo occorra utilizzare entrambi gli attributi.

    E complimentoni per la foto...:-)
    mi sembra di ricordare di aver avuto un problema analogo, ma non ne sono certo...

    in pratica non mi riconosceva il carattere di fine file e di conseguenza in lettura non mi si fermava dopo l'ultimo record e quindi la file get andava in errore (proprio perchè non incontrava l'EOF e tirava dritto )

    Prova a sostituire il ciclo di lettura con un for next per la lunghezza del file. Se non sai a priori la quantità di record presenti dovrebbe esserci un metodo per calcolarlo prima di iniziare la lettura, ma adesso non ricordo ed ho poco tempo, se mi salta davanti agli'occhi lo posto

    Ciao

  8. #8
    Un modo per sapere il num di record credo sia:

    Public Structure record

    <VBFixedArray(23), VBFixedString(16)> Public CampoStringa() As
    String

    <VBFixedArray(159)> Public CampoSingle() As Single

    Public Sub Initialize()
    ReDim CampoStringa(23)
    ReDim CampoSingle(159)
    End Sub
    End Structure

    Public MachineRecord As New record()


    num_rec = FileLen("c:\mioFile")/len(MachineRecord).

    però il problema credo sia sulla lunghezza del record non del file

    grazie darkblOOd almeno tu m'aiuti

  9. #9
    Utente di HTML.it L'avatar di darkblOOd
    Registrato dal
    Jul 2001
    Messaggi
    2,212
    Originariamente inviato da PapaIndia
    Un modo per sapere il num di record credo sia:

    Public Structure record

    <VBFixedArray(23), VBFixedString(16)> Public CampoStringa() As
    String

    <VBFixedArray(159)> Public CampoSingle() As Single

    Public Sub Initialize()
    ReDim CampoStringa(23)
    ReDim CampoSingle(159)
    End Sub
    End Structure

    Public MachineRecord As New record()


    num_rec = FileLen("c:\mioFile")/len(MachineRecord).

    però il problema credo sia sulla lunghezza del record non del file

    grazie darkblOOd almeno tu m'aiuti
    giusto!! ecco il metodo che avevo usato...prova e fammi sapere
    se poi pensi che sia un problema del tracciato dei record al limite fai qualche controllo approfondito, io mi son dovuto passare anche file a manina, carattere per carattere, per verificare i record presenti :quipy:

    beh, per quello che posso...

  10. #10
    Giovani programmatori e non vi sprono perdinci, non si può lasciare senza soluzione un così bel quesito. A proposito i miei ultimi tentativi, per trovare una soluzione, sono caduti nel vuoto più assoluto, sono sull'orlo del precipizio AIUTO!!!!!!!!!!

    PS mi accontento anche di sapere che non si può fare così almeno la smetto di arrovellarmi il cervello, anche perchè se continuo così i miei due neuroni fonderanno.

    Saluti al forum

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.