Newsgroup: it.comp.lang.visual-basic
Titolo: Salvare matrice di record

Non riesco a salvare la matrice di record :-(
dopo aver immagazzinato i dati nella matrice mi trovo davanti all'open for
random o output e poi ?
type x
nome as string
cognome as string
end type
dim y( ) as x
[ form ]
open filename for ???? as #1
for i = 1 to ubound(y)
y( i ) = y( i ).nome :-(        ??
y( i ) = y( i ).cognome :-(   ??
next i
put #1, i, y( )
Grazie a tutti anche per gli aiuti passati
Ciao :-)

 put #1, i, y( )
Usi "Output" se devi sovrascrivere i dati nel
file esistente, "Append" se devi inserirli in coda.
Open "Filename" for Append Access Write as #1
' i, se non diversamente specificato, parte da 0
for i = 0 to ubound(y)
    put #1, i, y(i). nome & " " & y(i). cognome
next i
Close #1

 put #1, i, y( )
spiegati meglio, quello che hai scritto è assurdo!
:)
CMQ per salvare un vettore di record a lunghezza non fissa devi utilizzare
alcuni trucchi, oppure usare FOR OUTPUT e per leggere in random usare FOR
INPUT in congiunzione con SEEK e codice appositamente scritto!
se avessi usato dei record fissi con "STRING * <valore>" allora avresti
potuto procedere con FIELD per fare quanto dici. ;)
e ricordati di mettere sempre OPTION EXPLICIT all'inizio di un form o
modulo, altrimenti avrai casini con le variabili!
---
byeZ,
Alessandro Cerioni
- Sunspot "TSK Squad" 
www.tsksquad.net
aiutamici co-webmaster 
www.aiutamici.com

 Close #1
non concordo con quanto dici:
1) se devi rileggere quei dati diventa impossibile... considera le eccezioni
dove nome "MARIA PIA" e cognome "DE ANGELIS" malnato lui e LR che mi fanno
perdere le ore migliori :( , beh dicevo ti vogli vedere a riconvertire
quella linea in nome e cognome :) i PC non sono intelligenti come noi che
abbiamo il dono di distinguere!
2) se non erro (è una vita che non adopera pià INPUT, OUTPUT, APPEND) nel
momento che apri il file FOR OUTPUT esso viene automaticamente azzerato e
quindi devi riscrivere tutto!, del resto lavorare con APPEND è un casino e
ti tocca tenere i dati sparpargliati e quindi ordinare il vettore poi in
memoria. Può andar bene per pochi dati, ma se il numero cresce dovresti per
forza usare almeno un albero o un B-albero e accedere al record che ti serve
direttamente da HD.
dentro il PUNTO "2":
CMQ sei i dati son pochi...
suggerisco di scrivere sulle rige dispari il nome e sulle pari il cognome o
viceversa :)
usare innazanzi tutto Option Base 1 oppure dimensionare coi dim y(1 to x)
oppure un vettore dinamico quindi ridimensionato con REDIM (1 to x) quando
si sa quanti elementi deve contenere... Example:
***************** EX1
let filenum=freefile()
open for OUTPUT etcetc
for i = 1 to x
   put #filenum, [i*2-1], y(i).nome
   put #filenum, ,y(i).cognome
next i
close #filenum
*****************
***************** EX2
dim lastline as long
let filenum=freefile()
open for APPEND etcetc
let LastLine=LOC(#filenum)-1
REM mi pare si usi LOC per sapere qual'è l'ultima riga
REM in alternativa SEEK, è da provare in quanto non mi ricordo
REM e volte la pratica differisce dalla teoria ! :)
REM in effetti potrebbe essere da eliminare il "-1" sull'assegnamento
REM di LastLine, fate qualcosa pure voi no!? :)
for i = 1 to x
   put #filenum, [LastLine+i*2-1], y(i).nome
   put #filenum, ,y(i).cognome
next i
close #filenum
*****************
in questo modo si evitano le exception e si rende il programma per quanto
schifoso più versatile! :)


 ... etc.
Hei hei, calma, era solo un esempio.
Si sa bene cosa vuol dire tenere un database su file di testo !
2) se non erro (è una vita che non adopera pià INPUT, OUTPUT, APPEND) nel
momento che apri il file FOR OUTPUT esso viene automaticamente azzerato
Descrivevo appunto in precedenza la differenza tra Output e Append
Non ho postato un esempio più "competente" perchè
l'oggetto del messaggio originale è quello che è.
Se gli fai esempi più calzanti, mi s che si perde.
Lascia che si sbatta un po', tanto poi riscrive ;-)
(Per sbaglio ti ho mandato il messaggio in email, sorry)