Oppure

Loading
02/01/20 9:55
ArturoC
Ciao,

Sono passto da poco tempo a VB.NET.
Ho un problema nel leggere un file scritto in VB6.
Utilizzando quesoa codice


Libero = FreeFile()
FileOpen(Libero, NomeFileArchivio, OpenMode.Binary)

FileGet(Libero, RitardiEstrattiPrecedentiTutte)
FileGet(Libero, RitardiEstrattiPrecedentiSingola)
FileGet(Libero, RitardiEstrattiTutte)
FileGet(Libero, RitardiEstrattiSingola)
FileGet(Libero, RitardoEstrattiStoricoTutte)
. .. . . . . . .

il caricamente si blocca ad un certo punto e restituisce il messaggio:
System.IO.EndOfStreamException: 'Impossibile leggere oltre la fine del flusso.'
"RitardiEstrattiPrecedentiTutte" ecc. sono tutti Array e/o Type:

Es.:
*) Public RitardiEstrattiPrecedentiTutte(0 To 90) As Integer

*) Public QuadroGemelli As TQuadroGemelli

*) Public Structure TQuadroGemelli
Dim RitardoStoricoAmbo(,) As Integer '1 To 10, 0 To 5
Dim RitardoAttualeAmbo(,) As Integer '1 To 10, 0 To 5
Dim FrequenzaAmbo(,) As Integer '1 To 10, 0 To 5
End Structure

Grazie dell'aiuto...
Arturo.








aaa
03/01/20 13:07
nessuno
In VB6 gli integer erano a 16 bit ma in VB.NET sono a 32 bit quindi devi dichiarare il vettore con Short

Public RitardiEstrattiPrecedentiTutte(0 To 90) As Short

E fai attenzione in modo simile per i dati contenuti nelle strutture

P.S. Perché da 0 a 90 se i numeri del lotto sono da 1 a 90?
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
03/01/20 17:13
ArturoC
Grazie Guru :-)

Farò come mi dici... e ti farò dapere...

Da 0 a 90 perchè se imposto da 1 a 90 VB mi dice che "i limiti inferiori della matrici possono essere solo "0""...
Io vengo da VB6... :-(

Grazie.... ;)

aaa
04/01/20 8:34
nessuno
Ti volevo dire che non puoi in VB.NET (a meno di non creare un'apposita classe) ma potevi in VB6.

Quindi, se in VB6 hai salvato su file il vettore da (1 a 90) non potrai rileggerlo con il VBNET con un vettore da (0 a 90).

Ok?
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
04/01/20 9:50
ArturoC
Ah ok.. ecco... ho capito...
Quindi devo ricreare tutto da zero...
E' un lavoro troppo grande... era grande già in VB6, ma qui credo lo sia ancora di più.
Non so se ne vale la pena...
E' un mio software dal 1999 e non faccio il nome per non fare pubblicità... peccato... poteva diventare ancora più versatile...
Grazie di tutto... e Buon anno! :-)
aaa
06/01/20 20:39
Carlo
Non gettare la spugna, così presto.

Le matrici che hai salvato in binario da VB6, anche se le hai dichiarate integer (1 to 90), sono salvate (0 to 89).

In VBNET per ricaricarle dichiarale:
Public RitardiEstrattiPrecedentiTutte(0 To 89) As Short

Naturalmente poi da codice dovrai sistemare gli indici aggiungendo -1 tutte le volte che accedi, oppure correggere il codice pensando che le matrici partono da 0

Non ho fatto una prova perché non posso usare VB6 velocemente, potresti avere anche altri problemi, non è detto che l'organizzazione dei Bytes nel salvataggio binario tra i due linguaggi siano identici.

Se avessi ancora problemi e dovessi risolvere un problema come il tuo, salverei due matrici singole identiche con pochi elementi facilmente identificabili, una con VB6 e una con VBNET, con un HEX Editor confronterei i due contenuti in modo da identificare eventuali discrepanze tra le due versioni.

altra prova da fare è non caricare tutte le matrici

FileGet(Libero, RitardiEstrattiPrecedentiTutte)
FileGet(Libero, RitardiEstrattiPrecedentiSingola)
FileGet(Libero, RitardiEstrattiTutte)
FileGet(Libero, RitardiEstrattiSingola)
FileGet(Libero, RitardoEstrattiStoricoTutte)

caricane solo una

FileGet(Libero, RitardiEstrattiPrecedentiTutte)

non dovresti avere più l'errore 'Impossibile leggere oltre la fine del flusso.'

controlla il contenuto della matrice caricata, ragiona in bytes e in esadecimale per capire le differenze.



in programmazione tutto è permesso