Newsgroup: it.comp.lang.visual-basic
Titolo: Pensavo di esserci riuscito e invece niente! Vi prego aiuto!

Ciao a tutti, vi prego datemi una mano!
Allora, io ho un file txt.
Voglio prelevare il contenuto della stringa presente alla riga numero 6.
Fare successivamente un confronto e se una condizione è verificata fare un 
aggiornamento del file txt.
Io propongo questo listato e dopo vi dico le problematiche:
Open "c:\Ip.txt " For Input As #1
   For I = 1 To 6
    Input #1, ipTemp
   Next I
 Close #1
 Open "c:\Ip.txt " For Output As #1
  If  ipTemp <> Inet1.OpenURL("
www.visual-basic.it/utility/getip.asp
") Then 
'condizione
    '   istruzioni per aggiornare
   End If
 Close #1
Quando eseguo il programma la prima volta il mio file "ip.txt"( che prima 
era presente ed era bello pieno di dati) non so perchè ma mi diventa 
completamente bianco, perdo tutti i dati!
Quando eseguo il programma la seconda volta mi dice: input oltre la fine del 
file errore 66 (presumo che questo errore sia dovuto al fatto che il mio 
file è vuoto :-((   )
Io non so piu che fare, ho letto guide e forum, ci ho pensato ma  non so 
come mai il mio file diventi bianco!
Ho cercato di darvi quante piu info possibili per aiutarmi.
Vi prego datemi qualche dritta! 

  Open "c:\Ip.txt " For Output As #1
La modalità For Output riazzera il file, la modalità che probabilmente fa al
caso tuo è For Random.
Ti consiglio un ripassino sui file sequenziali e non.
Bye
Raf

è vero che azzera, ma è altrettanto vero che non posso utilizzare  random.
Cosa mi consigli 

 Cosa mi consigli
Dipende da come è strutturato il file.
Se ha righe a lunghezza fissa l'apertura For Random è l'ideale perchè ti
permette di posizionarti sulla riga e di sovrascriverla.
Se usi for Output, e questa azzera il file (comunque c'è tutto scritto molto
minuziosamente nella pagina MSDN della Open) l'unica è ovviamente riscrivere
il file completamente.
Ciao

No, for random non è utilizzabile, proprio perchè è un file di testo, fate 
finta di vedere un documento word pieno di scritte!
Ma scusa io come faccio a riscrivere il file se lo devo aggiornare??cioe io 
ho un file gia scritto, devo aggiornare una riga, è assurdo dover riscrive i 
dati, anche perchè io non posso andare a riscriverli! non saprei dove 
prenderli! io so solo che devo andare alla riga 6 prendere una stringa 
confrontarla e se è il caso aggiornarla!
Il file alla prima creazione lo  scrivo in modalità append, con la funzione 
print. poi a rigor di logica vado a prelevare i dati con input ed in 
modalità output. e fin qui tutto ok, ma se non mi azzerasse il file quando 
esce sarebbe meglio!!
Private Sub Form_Load()
Dim strIP, ip, ipTemp ,dataOra As String
Dim controllo, I As Integer
'Inizializzazione
controllo = 0
'stringa inserita in una variabile,serve per semplificarmi il lavoro.
 strIP = "L' indirizzo ip pubblico è:"
 dataOra = "DATA E ORA ULTIMA MODIFICA: "
'Utilizzo funzione INET, serve per trasferire l'IP da internet ad una 
variabile.
 ip = Inet1.OpenURL("
www.visual-basic.it/utility/getip.asp
")
If Dir("c:\Ip.txt") <> "" Then ' verifico che esista il file
 Open "c:\Ip.txt " For output As #1
   For I = 1 To 6
    line input #1, , ipTemp
   Next
 Close #1
 Open "c:\Ip.txt " For Output As #1
  If ipTemp = Inet1.OpenURL("
www.visual-basic.it/utility/getip.asp
") Then
    End
   Else
   Print #1, Tab(0); dataOra; Date; Time
   Print #1, Tab(0),
   Print #1, Tab(0),
   Print #1, Tab(0); strIP ' inserisco la stringa di testo
   Print #1, , ' inserisco uno spazio
   Print #1, Tab(1); Inet1.OpenURL("
www.visual-basic.it/utility/getip.asp
")
   Shell ("cmd /c ipconfig /all>>c:\ip.txt")
   controllo = 1
  End If
 Close #1
Else
 Open "c:\Ip.txt " For Append As #1 'Prima scrittura del file sull'hdd
  Shell ("cmd /c ipconfig /all>>c:\ip.txt")
  Print #1, Tab(0); dataOra; Date; Time
  Print #1, Tab(0),
  Print #1, Tab(0),
  Print #1, Tab(0); strIP ' inserisco la stringa di testo
  Print #1, , ' inserisco uno spazio
  Print #1, Tab(1); ip 'scrivo l'indirizzo ip
 Close #1 'chiudo file
 controllo = 1
End If ' chiudo la if principale 

 [SNIP]
Scusa per lo snip selvaggio ma a quest'ora...
Se devi aggiornare una sola riga del file, ed il file non e'
di dimensioni esorbitanti, puoi optare per:
- Lettura integrale del file in una stringa con il comando
  Input (anziche' Line Input);
- Split della stringa in una variabile variant (myArray)
  sulla stringa vbNewLine (o vbCrLf) ottenendo cosi'
  l'array (in base 0) di tutte le righe del file;
- Leggere/scrivere la riga che ti interessa nell'array
  (nel tuo es. potrebbe essere myArray(5));
- Riscrivere tutto il file usando l'inversa della SPLIT
  ovvero JOIN usando sempre il la stringa vbNewLine.
hth,
Lokar
-- 
Sito Comune: 
http://www.it-lang-vb.net/
Manifesto: 
http://www.it-lang-vb.net/docs
­/Manifesto.txt
Statuto: 
http://www.it-lang-vb.net/docs
­/Statuto.txt
UGIdotNET - 
http://www.ugidotnet.org
 

 esce sarebbe meglio!!
A parte il sistema di Lokar puoi ad es. leggere il file riga per riga,
contemporaneamente scrivere un secondo file con le righe aggiornate e alla
fine sostituire il primo con il secondo.
Comunque il codice che hai indicato mi pare corretto, qual è il problema?
Ciao

Il codice scritto mi pare corretto pure a me!
Il problema non è il codice, ma bensi il fatto che la modalità output azzera 
il contenuto del file!
E quindi:
La prima volta che tento l'aggiornamento tutto funziona, perchè? perchè il 
file è scritto.
La seconda volta mi dice che è vuoto (errore 66) perchè? perchè è stato 
cancellato la volta prima.. :--((
Comunque domani provo le vostre due soluzioni e poi ci risentiamo, grazie 
infinitamente dei consigli! 

Ho risolto il problema
Voglio farvi capire nel dettaglio la cavolata!
Il problema era banalissimo!
Guardate:
If Dir("c:\Ip.txt") <> "" Then ' verifico che esista il file
 Open "c:\Ip.txt " For Input As #1
   for I=1 to 6
        Line Input #1, ipTemp
   next I
 Close #1
Open "c:\Ip.txt " For output As #1
If  ipTemp = Inet1.OpenURL("
www.visual-basic.it/utility/getip.asp
") Then 
'condizione
    End
   Else
    Print #1, Tab(0); dataOra; Date; Time
    Print #1, Tab(0),
    Print #1, Tab(0),
    Print #1, Tab(0); strIP ' inserisco la stringa di testo
    Print #1, , ' inserisco uno spazio
    Print #1, Tab(1); Inet1.OpenURL("
www.visual-basic.it/utility/getip.asp
")
    Shell ("cmd /c ipconfig /all>>c:\ip.txt")
    Controllo = 1
  End If
 Close #1
Else
...
Questo era il primo listato. Guardate cosa è bastato fare!!:
If Dir("c:\Ip.txt") <> "" Then ' verifico che il file esista
 Open "c:\Ip.txt " For Input As #1
   For I = 1 To 6
    Line Input #1, IpTemp
   Next I
 Close #1
If IpTemp = Inet1.OpenURL("
www.visual-basic.it/utility/getip.asp
") Then 
'condizione
   End
  Else
   Open "c:\Ip.txt " For Output As #1   ' E' BASTATO APRIRE IL FILE DOPO LA 
CONDIZIONE!!! NEL LISTATO PRECEDENTE SE GUARDATE LA
                                                           ' IF E' DENTRO 
L'APERTURA DEL FILE! GRAVE ERRORE! ADESSO FUNZIONA TUTTO
   Print #1, Tab(0); DataOra; Date; Time
    Print #1, Tab(0),
    Print #1, Tab(0),
    Print #1, Tab(0); StrIP ' inserisco la stringa di testo
    Print #1, , ' inserisco uno spazio
    Print #1, Tab(1); Inet1.OpenURL("
www.visual-basic.it/utility/getip.asp
")
    Shell ("cmd /c ipconfig /all>>c:\ip.txt")
   Close #1
   Controllo = 1
 End If
Else

 Vi prego datemi qualche dritta! 
Se il tuo problema è lavorare solo ed esclusivamente sulla sesta riga e 
lasciare intatte tutte le altre, allora puoi fare cosi':
1) Leggere tutto il file e contemporaneamente memorizzarlo in un file 
temporaneo (ti eviti cosi' di memorizzare in un vettore o peggio ancora 
in una collezione tutte le righe, se volessi prima leggerlo 
completamente e poi riscriverlo);
2) Durante la lettura, quando arrivi alla riga desiderata (in questo 
caso la 6), effettui le operazioni richieste;
Ovvero:
---------------------------
Dim numFileIn as integer
Dim numFileOut as integer
' *** Delego il sistema di comunicarmi il numero logico del file
numFileIn=freefile
numFileOut=freefile
riga=0;
Open "c:\Ip.txt " For Input As #numFileIn
open "c:\ip_temp.txt" for output as #numFileOut
Do while not eof(numFileIn)
	LineInput #numFileIn, strTemp
	riga=riga+1;
	if riga=6 then
		'Esegui le operazioni che vuoi
		...
	else
		print #numFileOut,strTemp
	end if
loop
close #numFileIn
close #numFileOut
------------------------------------------
-- 
Ciao,
	Fabrizio
===  
http://www.negusweb.it
  ===