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

Ciao a tutti.
So benissimo che questo argomento è stato trattato tante volte, che
però non ho trovato quello che mi serviva, che ho bisogno, bla bla bla
bla.
Ok, dopo aver fatto la solita lagna iniziale (cavolo quasi tutti i
post iniziano così...) di espongo il mio sempliccissimo problema.
Stò facendo delle prove (i file di testo riguardano marginalmente) e
per necessità ho trovato (su questo NG) modificandolo questo codice
che mi permette prima di scrivere in un file "io.txt" e poi di fare
una riceca dentro di esso:
Private Sub scrittura
Dim numero_chiave As Long  'la prima che mi è capitata
numero_chiave = 97001586
Open "c:\io.txt" For Append As #1
Print #1, numero_chiave
MsgBox ("Chiave scritta " & numero_chiave)
Close #1
End Sub
Private Sub ricerca
 
    Dim numero_chiave As Long
    numero_chiave = 97001577
 
    sParola = numero_chiave
    ff = FreeFile
    Open "c:\io.txt" For Input As #ff
    Do While Not EOF(ff)
       Line Input #ff, sBuff
       i = InStr(1, sBuff, sParola, vbTextCompare)
       If i Then
           MsgBox ("Chiave trovata  " & numero_chiave)
       End If
    Loop
    Close #ff
End Sub
Fino a qua tutto ok.
Però dovrei anche aver la possibilità di eliminare solamente una riga
del mio file di testo, e se possibile di fare in modo che questo
spazio che si è venuto a creare sparisca.
La struttura del mio file di testo è così:
chiave1
chiave2
chiave3
etc
Grazie a tutti se mi rispondete, se non lo fate... cavoli miei!!!
bai bai.

Gianmaria wrote:
un file di testo è una "roba" sequenziale...non hai la possibilità di fare
un "garbage collection"!
deve copiare tutto il "prima"  e tutto il "dopo" in un altro
file....cancellare  il vecchio e rinominare il nuovo come il vecchio!
questa sarebbe la "compattazione"
Una idea alternativa...se lo hai random(random EH!)...
Una matrice Indice(che potrebbe essere appoggiata anche ad un file) dove hai
memorizzato i seek
se normalmente sarebbe
(1)=0
(2)=10
(3)=20
se cancelli il record 2 diventerebbe
(1)=0
(2)=20
Ogni tanto poi lo compatti!
In pratica ti sei reinventato un rudimentale motoreDB
--
Il Wodkino Nazionale è a : 
www.martek.it
Pagina Vb/Bestiario/Lamer Experience :
http://www.martek.it/go.asp?portamia=2
 Quotefix e altro:
http://www.martek.it/go.asp?portamia=4
Usr: ICLVB Pw: amici

 spazio che si è venuto a creare sparisca.
E io ti dò una risposta che - fra le seimila che potrebbero darti -
certamente nessuno ti darà:
FAI TUTTO IN MEMORIA.
I casi sono due: se le chiavi sono migliaia, ti conviene
andare (ma DI CORSA !!!...) verso i database - "perfino"
Access, in prima battuta), ma se - come penso - sono
molte di meno, le puoi caricare in una matrice in memoria,
all'inizio del programma, fare tutte le ricerche e modifiche
che vuoi, e poi scrivere tutto il file ex-novo.
I tempi sono irrisori. L'unico può essere un problema
di "integrità" che in caso di blocco del programma ti
potrebbe far perdere le modifiche che hai in memoria,
ma a seconda del caso specifico, puoi decidere di fare
la scrittura su disco quando lo ritieni più opportuno.
Al limite, anche ogni volta che c'è una singola modifica.
--
Er Roscio.

Vi ringrazio per le risposte, al di la delle soluzioni grazie per lo
sbattimento.
Comunque visto che è solo un test (devo fare così fino a quando non mi
arriva il programmatore Notes) devo "emulare" questo salvataggio dati
all'esterno, e penso di ricreare il file ogni volta.
Poi quando arriverà il programmatore gli passo il dato dopo la
connessione notes... e il resto se lo gestisce lui.
W la comodità!
Oi!