ciao vuott , la sequenza dei 5 byte da me indicati sono posti precisamente in ordine uno dopo l'altro !
0 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 240 98 1 1 1 xxxxxxxxxxxxxx 1FFFFF
ahh, e allora non è difficile: qualcosa te l'ha già accennata md9327. Puoi anche provare un percorso del genere:
Public Sub Button1_Click()
Dim fl As File
Dim by As Byte
Dim a As New Integer[] ' prima avevo commesso un grave errore scrivendo "New Byte[]", non va bene: il perché è spiegato in un successivo messaggio.
Dim j As Integer
fl = Open "percorso del mio file" For Read
' Procedo con il caricarmi nell'array ogni singolo byte del file:
While Not Eof(fl)
Read #fl, by
a.Add(by)
Wend
fl.Close
' Compie un ciclo contando dall'indice 3 (altrimenti avrò un errore "Out of Bounds") fino all'ultimo indice dell'array:
For j = 3 to a.Max
' Il "senso" del seguente IF è questo: se l' elemento dell'attuale indice è 1,
' e l'elemento immediatamente precedente è anch'esso 1, ed il terzultimo è uguale a 98,
' ed il quartultimo è uguale a 240...... e quindi sommati = 340...
If a[j] + a[j - 1] + a[j - 2] + a[j - 3] = 340 then
'...allora....
Print "Il 2° byte num. 1 della *sequenza dei cinque* si trova all'interno del file nella posizione n. "; j
' Esce dal ciclo, così risparmiamo tempo:
Exit
Endif
Next
End
Scusa vuott, ma
If a[j] + a[j - 1]...
nel caso di j=0 ti dovrebbe generare l'errore "out of Bound", forse volevi scrivere If a[j] + a[j + 1]...
Sì, infatti mi hai anticipato, poiché stavo appena andando a correggere l'inizio del conteggio.
Quindi sarà
....oppure - come suggerisce l'amico sotema - "guardi" agli elementi successivi rispetto all'elemento che si sta considerando, e puoi così partire con il ciclo For da 0:
però in questo caso, ovviamente, l'elemento che stai considerando è il primo della "sequenza dei cinque", ossia quello contenente il valore 240 ( e non più il secondo 1 come era nella precedente soluzione che "guardava" agli elementi retrostanti). Anche la riga del Print con tale soluzione ovviamente cambierà:
Print "Il 2° byte num. 1 della *sequenza dei cinque* si trova all'interno del file nella posizione n. "; j + 3
Io farei così:
Public Sub Button1_Click()
Dim fl As File
Dim a, c As Byte
Dim b As New Integer[]
Dim d As Integer
fl = Open "percorso_e_nome_del_file" For Read
' Punterò successivamente con Seek nell'intervallo di byte del file
' compreso fra il byte 534896 ed il byte 535465:
For a = 534896 To 535465
' Pattino con grazia lungo quel tratto di file con Seek:
Seek #fl, a
' Leggo il byte di ciascun indice toccato dal puntatore Seek,
' e lo carico nella variabile "c"....
Read #fl, c
'...nonché nell'array "b[]":
b.Add(c)
' La variabile "d" deve essere > 2, altrimenti dopo avremo un errore
' del tipo "Out of Bounds". Infatti dovremo avere almeno effettuato 4 cicli.
' Il 4° ciclo del For ci consentirà di verificare l'elemento "b[d - 3]":
If d > 2 Then
' Se la somma...etc...etc... (vedi mio intevento precedente):
If b[d] + b[d - 1] + b[d - 2] + b[d - 3] = 340 Then
'...allora....
Print "Il 2° byte num. 1 della *sequenza dei cinque* si trova all'interno del file nella posizione n. "; a
Exit
Endif
Endif
' Incrementiamo la variabile "d" per effettuare il conteggio "parallelo" d'appoggio:
Inc d
Next
End