Newsgroup: it.comp.lang.visual-basic
Titolo: [?] dove sbaglio????

ciao all! propio non riesco a capire perche' non funziona.... qualche
consiglio????
Antonio.
function scrivi()
Dim lNumFile as long
Dim lPosizione as long
Dim sDatoDaScrivere as string
lNumFile = FreeFile
Open "prova.dat" For Random As lNumFile Len = 1
lPosizione=130
sDatoDaScrivere=chr$(200)
Put #lNumFile, lPosizione, sDatoDaScrivere
Close #lNumFile
end function
function leggi()
Dim lNumFile as long
Dim lPosizione as long
Dim sDatoDaLeggere as string
lNumFile = FreeFile
Open "prova.dat" For Random As lNumFile Len = 1
lPosizione=130
sDatoDaLeggere=" "
Get #lNumFile, lPosizione, sDatoDaLeggere
Close #lNumFile
end function

 Antonio.
E quale sarebbe il problema?
Ciao


sarebbe che non capisco perche' dentro al file .dat mi ritrovo di
tutto.... parte di file exe spezzoni di html ecc.....
invece il mio intento era di salvare dei dati usati da un programma!!!
invece di usare il solito file ini anche perche' mi interessa non farlo
editare a mano.....
in conclusione questo e' il pezzo di codice incriminato:
lascia perdere che ho ripetuto 4 volte lo stesso codice.... sono ancora
in fase dei perche'...
Dim lNumFile As Long
Dim lPosizione As Long
Dim sDatoDaScrivere As String
lNumFile = FreeFile
Open "prova.dat" For Random As lNumFile Len = 4
lPosizione = 1
sDatoDaScrivere = a343245ff434g 'Chr$(200)
lPosizione = 15
sDatoDaScrivere = bdfgsd 'Chr$(101)
lPosizione = 21
sDatoDaScrivere = cdfgdfgsdfg 'Chr$(222)
lPosizione = 31
sDatoDaScrivere = dfgfgf 'Chr$(213)
Put #lNumFile, lPosizione, sDatoDaScrivere
Close #lNumFile
saluti
Antonio.

 sDatoDaScrivere = Chr$(200)
La lunghezza del record dipende dal dato che vuoi memorizzare. Nel tuo caso
sDato DaScrivere č una String a lunghezza variabile, che ha un header con i
dati utili a ricostruirla, quindi occupa piů di un byte.
Devi dichiararla come stringa a lunghezza fissa (As String * 1)
Ciao, Silv:o)

 Ciao, Silv:o)
No mi dispiace ma non ci siamo propio il programma continua a scrivermi
cio' che gli piace e pare.....
come di seguito:
Dim lNumFile As Long
Dim lPosizione As Long
Dim sDatoDaScrivere As String * 1
lNumFile = FreeFile
Open "prova.dat" For Random As lNumFile Len = 4
lPosizione = 1
 sDatoDaScrivere = Text1.Text
lPosizione = 2
 sDatoDaScrivere = Text2.Text
lPosizione = 3
 sDatoDaScrivere = Text3.Text
lPosizione = 4
 sDatoDaScrivere = Text4.Text


 Put #lNumFile, lPosizione, sDatoDaScrivere
Spero tu sia consapevole che ci va una Put per ogni record, il tuo codice
scriverà solo il quarto record (o meglio, come ho detto, solo il primo
carattere del quarto record, ovvero il tredicesimo byte del file)


ok daccordo!!! mi vergogno delle castronerie che scrivo... pero' perche'
mi ogni volta che lancio il programma   mi scrive quello che vuole????
cmq, per ogni textbox mi deve leggere/scrivere un valore da 1 a 9 max!
grazie ancora
Antonio

 cmq, per ogni textbox mi deve leggere/scrivere un valore da 1 a 9 max!
Allora, facciamo un po' di chiarezza.
Se usi Len = 4 il dato che devi scrivere deve essere adeguatamente
dimensionato.
Questo perchè il puntatore si muove sul file di 4 bytes alla volta.
Se lasci degli spazi vuoti tra un dato e l'altro ti troverai nel file tutto
quello che c'è scritto sul disco in quel momento poichè non lo sovrascrivi.
Insomma il SO si alloca del disco, ma non si occupa della sua pulitura.
Ciao

 
Se tu fai
Dim lNumFile As Long
Dim lPosizione As Long
Dim sDatoDaScrivere As String * 1
lNumFile = FreeFile
Open "prova.dat" For Random As lNumFile Len = 1
lPosizione = 50
sDatoDaScrivere = "x"
Put lNumFile, lPosizione, sDatoDaScrivere
Close lNumFile
e prova.dat non esisteva, ti ritroverai con un file prova.dat di 50
byte, i primi 49 con caratteri a caso, il 50esimo con "x".
Se invece prova.txt esisteva già, questo codice imposta a "x" il 50esimo
carattere lasciando invariati gli altri.
-- 
Samuele Battarra
prova il mio newsreader:
http://digilander.iol.it/battarsa/programmi/news/