Newsgroup: it.comp.lang.delphi
Titolo: Qual'é il più efficente?

Dovendo creare una rubrica qualcuni può dirmi se i seguenti codici sono
uguali in termini di efficienza o uno è migliore?
1)
rubrica = record
nome : string;
cognome : string;
tel : integer;
Array_rubrica = array [1..10] of rubrica;
2)
rubrica = record
nome : array [1..10] of string;
cognome : array [1..10] of string;
tel : array [1..10] of integer;
Grazie
Luigi
--
Posted from [195.223.215.6] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

uguali in termini di efficienza o uno è migliore?
Il primo oltre ad essere decisamente più elegante dovrebbe essere un filino
più ottimizzato, in quanto gestisci tre array invece di uno, ma la
differenza è comunque microscopica.
Ciao !                {MSX}

tel : array [1..10] of integer;
questo record è un po' strano.
In pratica ogni variabile ( o campo ) del record è un array. Ma perchè ? Se
avevi scritto "of char" invece di "of string o of integer" avrei capito, ma
così no !!
Se poi devi salvare tutto su file, dovresti specificare la dimensione dei
campi string del record altrimenti viene fuori un disastro.
Scrivi di nuovo se vuoi maggior dettagli.
Ciaoo !!
Antonio Tarolla

Infatti io ho creato il primo dopo aver notato che il secondo (che non ho
scritto io) era una cosa incasinante.
In oltre vorrei sapere:
1) quando devo salvare il file
assign (miofile, 'C:\rubrica.dat');  file di che tipo deve essere?
Considerando che il file è composto separatamente da cognome nome e
telefono. Io avevo pensato a mettere
miofile : file of rubrica; ma non me lo accetta.
2) quando devo aprire il file salvato come faccio a fare apparire i vari
dati nelle relative caselle (cognome, nome, telefono)
Ciao


 dati nelle relative caselle (cognome, nome, telefono)
?? Intendi come fai a caricarlo nell'array Rubrica ?
   Beh ...
 i := 0;
 While not eof (RubricaFile) do begin
     Read ( RubricaFile, Rubrica[i] );
 end;
Naturalmente devi essere sicuro di avere abbastanza spazio in Rubrica... o
crei una struttura dinamica o
carichi i valori (nei componenti che dovranno visualizzarli) uno per
volta... e allora non hai + bisogno dell'array.
Spero di averti aiutato... anche se rileggendo il mio msg mi sembra un po'
confuso ... se hai problemi riscrivi.
CIAO !  Davide DG.

Anch'io sto facendo una rubrica come quella di Luigi (Dev n.73 - Corso di
Delphi) però ho deciso di utilizzare una struttura dinamica.
Inizialmente volevo utilizzare un'array dinamico di record ma il problema è
che non posso settare con SetLength la lunghezza dell'array visto che non
posso sapere quanti saranno i record!
Alla fine ho risolto il problema utilizzando un puntatore al record che
viene aggiunto ad una TList, infine salvo la TList su file.
Ma è possibile senza usare i puntatori e TList con un normale array dinamico
di record (array of record) creasi l'agenda?

 volta... e allora non hai + bisogno dell'array.
Beh, se i dati sono abbastanza numerosi io comincierei a pensare ad un DB...
Magari con ADO (niente BDE).
Cosě poi potrai sfruttare tutti i benefici di un'architettura di questo tipo
[e fai anche un po' di pratica coi databases]...
Ovvio che se non sono, direi..., almeno 200 record č uno spreco...
--
(Ż`·.¸¸.·´Ż`·.¸¸.-> Andrea <-.¸¸.·´Ż`·.¸¸.·´Ż)
AntiSpam: rimuovere il trattino basso dall'indirizzo per rispondere
AntiSpam: remove the underscore from the e-mail address to reply

Io avevo scritto questo codice, ma non sò perché il Close (datisave) mi da
errore.
Inoltre non ho capito come faccio a visualizzarlo nelle caselle il file
salvato.
Ancora non sono arrivato alla gestione dei file in Delphi quindi... spiegati
meglio che puoi :)
Per quanto rigurda la struttura dinamica degli array io non posso farla
perché ho Delphi 2, in attesa di Delphi 4 CSS.
rubrica = record
  cognome , nome, telefono : string [50];
  end;
Trubrica = file of rubrica;
var
  Form1: TForm1;
  datipersona : array [1..100] of rubrica;
  c, x : integer;
  datisave : Trubrica;
implementation
{$R *.DFM}
procedure TForm1.newClick(Sender: TObject);
begin
  last.text := '';
  first.text := '';
  tel.text := '';
end;
procedure TForm1.saveClick(Sender: TObject);
begin
  c := c + 1;
  datipersona[c].cognome := last.text;
  datipersona[c].nome := first.text;
  datipersona[c].telefono := tel.text;
  assignfile (datisave, 'C:\datirub.dat');
  rewrite (datisave);
  write (datisave, datipersona[c]);
  close (datisave);
end;


 end;
Usa CloseFile(DatiSave);
Ciao :-)
--
(¯`·.¸¸.·´¯`·.¸¸.-> Andrea <-.¸¸.·´¯`·.¸¸.·´¯)


 errore.
Devi usare closefile(). Close ormai è dedicato all'uso dei DB.
Ciao ZioPino
.

> Devi usare closefile(). Close ormai è dedicato all'uso dei DB.
... e delle form ... ;)
Davide DG

Ho provato i tuoi codici però ho 2 problemi:
1) Quando salvo il file si sovrascrive quello gia esistente, invece di
accodare i nuovi dati.
2) Quando cerco di aprire il file mi da un errore di I/O.
Spero tu possa aiutarmi.
P.S.: [OT] : Puoi spiegarmi in cosa consiste principalmente la tua facoltà?
Cosa puoi fare con quella laurea?
Luigi


 Cosa puoi fare con quella laurea?
Hai presente l' "Ingegneria Genetica" dei film ... ecco, quella. ... ma la
strada è lunga... e dopodomani ho
l'n-esimo (:)) compitino di fisica 2 e sono qui a "ennegìare" invece di
studiare le interferenze...
CIAO!!! DAVIDE DG.

 wrote:

E perchè invece della TLIST non fai una lista di puntatori??? :)
Ovvero:
ppointer=^_pointer;
_pointer=record
	data:Tdata;
	next:ppointer;
end;
Tpointer=ppointer;
e use
new e dispose?
Salutoni
Kirys
--------------------------------------------------
Brayan Fix Kirys Solfory
E-Mail: 
Ki...@technologist.com
 
For Free Software go to: 
http://Kiryssoft.cjb.net