Newsgroup: it.comp.lang.visual-basic
Titolo: Cerca & Sostituisci ancora!!

Salve a tutti!
Giorni fa qualcuno chiedeva circa una funzione di cerca e
sostituisci....Anche io ho sviluppato tale funzione ma risulta lenta su file
di grandi dimensioni e quando ci sono da fare parecchie sostituzioni.
In piu' puo' fallire nel caso che il buffer assegnato vada a spezzare
l'eventuale stringa presente...ummm esempio:
Contenuto del file= 0123456789
Stringa da cercare = 45
Buffer = a 5 caratteri
Legge i primi 5 caratteri (01234)  e non trova 45
legge i secondi 5 (56789) e non 45
(qui il buffer e' piccolo pero' la stessa cosa puo' succedere con un buffer
di 64kb; il buffer e' di tipo string)
ecco che fallisce nella sua operazione...
Suggerimenti?
Si puo' rendere la funzione mooolto piu' veloce?
Si puo' evitare che salti una stringa presente come ho mostrato qui sopra?
Grazie a tutti
Saluti
Simone
-------------------
Private Sub sostituisci(a As String, cosa As String, con As String)
  Dim buffer As String
  Dim idx As Integer
  Dim start As Integer
  Dim count As Long
  Open a For Input As #60
  Open "temp.tmp" For Output As #61
  count = LOF(60)
  Do Until EOF(60)
 If count < 30000 Then
        buffer = Input(count, #60)
      Do
        idx = InStr(buffer, cosa)
       If idx <> 0 Then
            buffer = Left(buffer, idx - 1) & con & Mid(buffer, idx +
Len(cosa))
       End If
       DoEvents
        Loop Until idx = 0
      Print #61, buffer;
      Close #61
      Close #60
     Exit Do
Else
      buffer = Input(30000, #60)
      count = count - 30000
       Do
       idx = InStr(buffer, cosa)
      If idx <> 0 Then
             buffer = Left(buffer, idx - 1) & con & Mid(buffer, idx +
Len(cosa))
      End If
       DoEvents
        Loop Until idx = 0
   Print #61, buffer;
End If
  Loop
  Close #61
  Close #60
  Kill a
  Name "temp.tmp" As a
End Sub
Private Sub VAI_Click()
   Dim n As String
   Dim c As String
   Dim a As String
   n = "pallo"         'stringa sostituta
   c = "pippo"      'stringa da cercare
   a = Dir("prova.txt")
   Do While a <> ""
   sostituisci a, (c), (n)
   a = Dir
   DoEvents
   Loop
End Sub

 Si puo' evitare che salti una stringa presente come ho mostrato qui sopra?
Ti ho gia' risposto.
-- 
Hi, Ciao
Ettore                 By -MES-
http://freeweb.aspide.it/freeweb/ilmes
 
(con OCX per stampare i Recordset)
Il sito comune di programmatori VB
http://members.xoom.com/it_lang_vb

Si puo' rendere la funzione mooolto piu' veloce?
C'è un algoritmo molto carino che si chiama Boyer-Moore. Esempio: devo
cercare la stringa PAOLO. Invece di cercare una P in prima posizione, cerco
una O in quinta. Se c'è provo a confrontare all'indietro il resto della
stringa: poi continuo a cercare un'altra O, stavolta in sesta posizione.
Se non c'è la O posso saltare dei caratteri: 4 se c'é una P, 3 se c'è una A,
1 se c'è una L, 5 in ogni altro caso. La complessità media dell'algoritmo è
n/m (n è il numero di caratteri in cui cercare, m il numero di caratteri
nella stringa da cercare).
Provaci, è molto più semplice di quel che sembra. Basta farsi una tabella
(prima di iniziare la ricerca) che associ il numero di caratteri da saltare
ad ogni codice ASCII.
Paolo