Newsgroup: it.comp.lang.visual-basic
Titolo: Cercare una riga in un file di testo

Come si fa a cercare una riga in un file di testo!?!
Grazie

 Come si fa a cercare una riga in un file di testo!?!
In che senso? Se ho capito bene potresti leggere il file riga per riga e ad
ogni riga fare il confronto con la riga che cerchi. Ma tu, esattamente, cosa
hai difficolta' a gestire? Le operazioni coi file? La gestione delle
stringhe?
--
Ciao.
Maurizio

 wrote in message
89k2tg$kkn$1...@nslave2.tin.it...


Se ho capito, il problema e': come rimuovere/modificare una riga in un file
sequenziale (di testo, suppongo).
Immagino che tu non conosc la posizione della riga nel file, ma solo il suo
numero o il suo contenuto.
Non c'e' un metodo, ma ci sono diverse soluzioni che si differenziano per la
velocita'.
(a) puoi caricare tutto il testo in memoria con un get da file aperto come
binary in una variabile stringa dimensionata (con space o string) al numero
di byte contenuti nel file (ritornato da LOF). Questa tecnica e' bruttina ma
velocissima. Se il file e' molto esteso (tipo svariate decine di MB: se sei
sicuro che non si vada oltre 1-2 MB direi che non ci sono problemi)
chiaramente non e' un metodo ortodosso.
(b) se il file e' sequenziale e composto da righe terminate da CR-LF (un
file di testo) puoi aprire il file sorgente in input e un file temporaneo in
output: leggi tutte le righe del primo (fino a EOF) e le scrivi nel secondo
eccetto quella che ti interessa (verificando numero o contenuto). Questo e'
un metodo lento, ma semplice e sicuro. Se nella open del primo file imposti
LEN (dimensioni del buffer di lettura) ad una valore abbastanza alto (
p.es
.
32767) puoi velocizzare di molto la procedura.
(c) puoi aprire il file sorgente come binary e un file temporaneo sempre
come binary. Leggi il sorgente a blocchi di una dimensione ragionevole
(
p.es
. 32KB) e analizzi il contenuto del buffer (
p.es
. cerchi tutti i CRLF
per identificare i fine linea e/o il testo incluso) e scrivi il buffer nel
file di destinazione. Questa tecnica e' veloce ma abbastanza complessa
perche' devi tener conto del residuo (un file non sara' per forza multiplo
di 32KB), perche' devi tenerti puntatori a linee troncate nel buffer e
perche' devi scrivere il buffer a sezioni interpretate (cioe' in modo che la
fie del buffer di output contenga la fine di una riga, se e' cosi' fatto,
che potrebbe essere piu' grande del buffer stesso).
----------------------------------------------------------------------
Stefano Minardi
zet...@mclink.it
----------------------------------------------------------------------

 Cercare una porala
E' un po' difficile, per me, dialogare con un interlocutore come te: cerca
di aiutarmi/ci ad aiutarti essendo piu' esplicito e piu' chiaro.
--
Ciao.
Maurizio

Cercare una porala
Se devi semplicemente cercare una parola in un file di testo (cioč con linee
terminate da cr+lf) puoi scorrere il file con Line input e cercare nelle
singole linee che ti vengono ritornate fino a che non raggiungi la fine del
file.
P.es.
Dim sParola As String, sBuff As String
Dim ff as Long, i As Long
sParola="Parola da cercare"
ff=Freefile
Open "Miofile.Txt" For Input As #ff
Do While Not Eof(ff)
    Line Input #ff, sBuff
    i = Instr(1, sBuff, sParola, vbTextCompare)
    If i Then
        'Qui hai trovato la parola: se non devi andare oltre fai un Exit Do
    End If
Loop
Close #ff
Non č il metodo piů veloce, ma funziona.
(NB: non tiene conto del fatto che la parola possa comparire piů volte nella
stessa linea o possa essere divisa in due linee diverse e inoltre cerca
l'inzio della parola, non una parola completa. Inoltre presuppone che il
file sia di testo: per una ricerca su un file con struttura sconosciuta
dovresti aprire il file come binary e leggerlo a blocchi, tenendo conto del
fatto che una parola puň trovarsi a cavallo di due buffer.)
