Newsgroup: it.comp.lang.visual-basic
Titolo: BINARY

Ciao a tutti,
Ho la necessita' di risolvere il problema
spiegato qui di seguito.
Anticipo, comunque, che in precedenza ho gia' proposto
questo problema , ma per diversi motivi
(tra i quali il fatto che qualcuno
ha inviato un messaggio con la data fasulla)
il mio messaggio e' rimasto molto indietro ed e'
passato inosservato.
Il problema e' il seguente:
Ho bisogno di leggere una stringa che alloggia in file EXE
(Con il QBasic lo facevo agevolmente.)
Es.
File.EXE contiene  la string "AAAAAA"
        'apro il file  per cercare la stringa
testo1="AAAAAA"
Open File.Exe for binary as 1 L=100
NumeroRecord=0
Do while not eof(1)
NumeroRecord=NumeroRecord+1
Puntatore=(NumeroRecord-1)*100+1
        ' uso questo metodo per conoscere
        ' il byte iniziale e accedere, in seguito,
        ' direttamente alla stringa
Seek 1,puntatore
StringaLettura=space(100)
get 1, ,StringaLettura
        'supponendo di essere arrivato
        'al record contenente la stringa desiderata
debug.print StringaLettura
        'evidenziera':  -- A.A.A.A.A.A.
esistestringa=instr(StringaLettura,testo1) 'avra' valore 0
        'la stringa von viene riconosciuta
        'non verra' riconosciuta neppure
        'se testo1="A A A A A A" o simili
loop
close
Ho provato a predisporre una stringa intercalando spazi o Null
testo2=""
for index=1 to len(testo1)
testo2=testo2+chr(65)+"&H00"  ' (????) oppure chr(0)
next index
il risultato e' sempre quello di esistestringa=0
cosa sbaglio???
come posso risolvere il problema??
Ciao e grazie a tutti
Tommaso

Usa un array di byte invece che una stringa, per la lettura.
Dopo avere letto i byte che ti interessano, assegni l'array
ad una stringa.
es.
Dim bytBuffer(99) As Byte
Dim StringaLettura As String
Dim FileNum As Integer
    FileNum = FreeFile(0)
    StringaLettura = String(100, 0)
[...]
    Get #FileNum, , bytBuffer
    StringaLettura = bytBuffer
    esistestringa=Instr(StringaLettura, testo1)
[...]

 ha scritto nel messaggio
news:90j5jt$1c0nb$1...@ID-51240.news.dfncis.de...


OK.  ti ringrazio.
ora un'altra domanda.
Poichč il File EXE e' lungo anche piů di 2 mega
lo leggo con records di 100-200 byte.
Se la stringa cade a cavallo di due records non potrň leggerla
Come si puň ovviare ???
Grazie
Tommaso
P.S.
Ho fatto confusione nell'INVIO di questo messaggio

 Se la stringa cade a cavallo di due records non potrò leggerla
Supponiamo che la stringa da leggere sia lunga 10 byte.
Impostiamo un buffer di lettura che sia [n] volte la dimensione
della stringa cercata.
La procedura di ricerca deve tenere conto della dimensione
di tale stringa. Quando leggo [Buffer], la prossima posizione
di lettura sarà [Buffer] +1, usando le impostazioni automatiche.
Occorre invece specificare da programma la posizione iniziale
della lettura successiva, indicando [Buffer] - Len[Stringa].
Ossia, se leggo 200 byte e la stringa da cercare è lunga 10 byte,
la successiva posizione della ricerca sarà [200 - 10] = 190.
(Occhio che il pseudo-codice che segue lo sto scrivendo
qui direttamente. Quindi da verificare).
Dim bytBuffer(199) as Byte
Dim strBuffer As String
Dim RecordLen = 200
Dim FileLen As Long
Dim SearchStringLen As Integer
Dim SearchString As String
Dim FileNum As Integer
Dim FilePosition As Long
Dim Counter As Integer
    SearchString = [Stringa da cercare]
    SearchStringLen = Len(SearchString)
    strBuffer = String(100, 0)
    FileNum = Freefile(0)
    '===Aperturta del file==
     FileLen = LOF(FileNum)
    Do
        'Definisce la posizione di lettura
        FilePosition = Counter * (RecordLen - SearchStringLen) + 1
        Get #FileNum, FilePosition, bytBuffer
        strBuffer = bytBuffer
        If Instr(strBuffer, SearchString) Then
            'Processi
            Exit Do
        End If
        Counter = Counter + 1
        If FilePosition >= FileLen Then
            Exit Do
        End If
    Loop

 la successiva posizione della ricerca sarà [200 - 10] = 190.
ottimo. anch'io stavo dando questa risposta, ma mi hai
preceduto.
--
Fibia "Sakamoto" FBI
URL: 
www.geocities.com/fibiafbi
E-Mail: 
fibi...@hotmail.com
ICQ UIN 63586057
Membro #25 delle Brigate Takahashi Sez. Sud