10 messaggi dal 03 luglio 2002
Salve come posso fare per cancellare, ad esempio, la quinta riga di un file di testo????


Grazie per l'aiuto




11.886 messaggi dal 09 febbraio 2002
Contributi
Putroppo non è così semplice...
Esistono tre modi per aprire un file di testo:
1 in sola lettura
2 in scrittura
3 for appending

quando apri un file di testo in scrittura (dato che devi cancellare una riga...), il file viene immediatamente CANCELLATO!!
Quindi se lo apri in scrittura, e immediatamente lo richiudi, ti troverai un file di testo vuoto. *sigh*

La modalità forappeding non ti aiuta, serve ad aggiungere righe alle preesistenti, non a cancellarle.
Quindi l'unico modo è questo:
-aprire il file in sola lettura e, riga per riga, copiatelo in un array:

Dim mioarray()
contatore=0
while not file.atEndofStream
Redim Preserve mioarray(contatore)
mioarray(contatore) = file.ReadLine
contatore = contatore + 1
wend

Così avrai riempito un array in cui ogni elemento è una riga del file di testo. Ora cancella l'elemento che ti interessa. Vuoi cancellare la riga 5? fai:
mioarray(4)=""

Ora bisogna riaprire il file di testo per la scrittura e ricopiarci dentro tutto l'array.

for i = 0 to Ubound(mioarray)
if not mioarray(i)="" then file.Writeline(mioarray(i))
next

avrai notato l'if, che scrive una riga solamente se l'elemento dell'array non è vuoto (cioè se non è stato cancellato)

-----------------------
Da una perla dal saggio:
Quando non hai capito, devi dire "non ho capito", no che dici che hai capito e invece non hai capito un cavolo. Hai capito?
-----------------------

Enjoy learning and just keep making
10 messaggi dal 03 luglio 2002
Dunque ricapitoliamo:

apro il file e ci scrivo...

<%
Set FileObject=CreateObject("Scripting.FileSystemObject")
IP=Request.ServerVariables("REMOTE_ADDR")
col ="co"

Set InStream=FileObject.OpenTextFile(Server.MapPath(IP),8,true)
InStream.WriteLine col
Set objTextFile = Nothing
%>

Poi..... lo apro in sola lettura... e copio il tutto nell'array.....

<%
Set FileObject=CreateObject("Scripting.FileSystemObject")
IP=Request.ServerVariables("REMOTE_ADDR")
col ="co"

Set InStream=FileObject.OpenTextFile(Server.MapPath(IP),1,true)

Dim mioarray()
contatore=0
while not file.atEndofStream
Redim Preserve mioarray(contatore)
mioarray(contatore) = file.ReadLine
contatore = contatore + 1
wend

' ----------- cancello la riga che mi interessa------------

mioarray(4)=""


Set objTextFile = Nothing
%>

'------------------- lo riapro in scrittura ------------------

<%
Set FileObject=CreateObject("Scripting.FileSystemObject")
IP=Request.ServerVariables("REMOTE_ADDR")
col ="co"

Set InStream=FileObject.OpenTextFile(Server.MapPath(IP),2,true)

for i = 0 to Ubound(mioarray)
if not mioarray(i)="" then file.Writeline(mioarray(i))
next
' ------------ci scrivo l'array ------------

Set objTextFile = Nothing
%>

'chiudo il file








ti sembra corretto???










10 messaggi dal 03 luglio 2002
tra l'altro mi da anche errore:

Errore di run-time di Microsoft VBScript errore "800a01a8'

Necessario oggetto: 'file'

/IISSamples/Default/gruppo90/elimina.asp, riga 10




11.886 messaggi dal 09 febbraio 2002
Contributi
si, perchè dovevi sostituire
file.writeline
con
inStream.writeline

avevo assunto che file era il tuo file di testo, mentre tu l'hai chiamato instream, sostituisci dappertutto file con instream e vedrai che funziona.

Una piccola cosa: è buona norma chiudere il file prima di riaprirlo in un'altra modalità.
basta che fai:

inStream.Close
Set objTextFile = Nothing


il codice corretto dovrebbe essere:
<code>
&lt;%
Set FileObject=CreateObject("Scripting.FileSystemObject")
IP=Request.ServerVariables("REMOTE_ADDR")
col ="co"

Set InStream=FileObject.OpenTextFile(Server.MapPath(IP),8,true)
InStream.WriteLine col
InStream.Close
set InStream = nothing
%&gt;

Poi..... lo apro in sola lettura... e copio il tutto nell'array.....

&lt;%
IP=Request.ServerVariables("REMOTE_ADDR")
col ="co"

Set InStream=FileObject.OpenTextFile(Server.MapPath(IP),1,true)

Dim mioarray()
contatore=0
while not inStream.atEndofStream
Redim Preserve mioarray(contatore)
mioarray(contatore) = inStream.ReadLine
contatore = contatore + 1
wend

' ----------- cancello la riga che mi interessa------------

mioarray(4)=""

inStream.Close
set inStream = nothing
%&gt;

'------------------- lo riapro in scrittura ------------------

&lt;%
IP=Request.ServerVariables("REMOTE_ADDR")
col ="co"

Set InStream=FileObject.OpenTextFile(Server.MapPath(IP),2,true)

for i = 0 to Ubound(mioarray)
if not mioarray(i)="" then inStream.Writeline(mioarray(i))
next
' ------------ci scrivo l'array ------------

inStream.Close
set InStream = nothing
set FileObject = nothing
%&gt;


</code>


copialo esattamente così, vedi se funziona
-----------------------
Da una perla dal saggio:
Quando non hai capito, devi dire "non ho capito", no che dici che hai capito e invece non hai capito un cavolo. Hai capito?
-----------------------

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.