Newsgroup: it.comp.lang.pascal
Titolo: Rubrica

Vorrei creare una rubrica, che lavora con un file dati.dat, sul quale si
possono scrivere i nuovi indirizzi e leggere quelli inseriti
precedentemente. Qualche suggerimento su come lavorare col file?

a) metodo semplice
il tuo file di dati lo fai di semplice testo, chenneso' una riga per ogni
campo cosi' lo leggi con dei semplici readln(f,<campo>), oppure se
vuoi separati da un qualche carattere inutile (<ē> a che serve su una
tastiera italiana?) cosi leggi una riga poi pero' te la devi 'parsare' a
mano.
Comodo, un po' piu' sbattimento poi la gestione se devi togliere, a
meno di non riscrivere ogni volta tutto il file... puo' diventare voluminoso
b) metodo stiloso
sepre text, ma con struttura del tipo
gruppo {
contatto {
nome = Mr Antani
cognome = Supersblinda
telef  = 123-456789;
cell  = 369-antani22;
}
...
}
piu' comodo, piu' facilmente portabile in memoria (forse
anche a oggetti), ti permettere di mettere/non-mettere/aggiungere
campi e se vuoi di dividere anche in gruppi... sbattimento simile
al precendente per la gestione, magari il parsing e' un po' piu'
complesso
c) metodo serio
struttura record in memoria, poi buttata su file con blockwrite:
dichiari il file file of <struttura_contatto> poi a blockread/write passi
il numero di contatti da legg/scriv... piu' comoda la gestione, piu'
difficile il debug, immediato il caricamento da file, non sei _obbligato_
a riscriverlo tutto...  (a.e. se cancelli, puoi segnare in qualche modo
lo spazio "vuoto" nel file e metterci il primo nuovo contatto che viene
creato)  contro: lunghezze fisse dei campi nome/cognome/etc
bisogna progettare bene la struttura...
poi ci sono mille metodi e variazioni...
ciao
--
Dreadnaut (dn)
drea...@liberoDALLASPAM.it
(Life would be easier if I had the source code)


Questo mi sembra il metodo + facile sinceramente...
poi potresti complicare le cose con Hash o altre cosette del
genere.... ma forse e troppo...
Il Razziatore,
The Only Good Windows in an uninstalled Windows
-----------------------------------------------
E-MAILs : IlRazziat...@NOSPAMnetscape.net
WEB     : 
http://www.razziatore.dns2go.com/
ICQ     : 67552596

Qual'è la procedure per scrivere dati su un file?

> Qual'è la procedure per scrivere dati su un file?
in quale metodo ?
per i file di testo puoi usare write[ln] (<nomefile>, <robadascrivere>);
mentre per quelli binari e/o a record la cosa e' meno lineare e ci vuole
un po' di piu' a spiegarla (ora sono un po' di corsa... se e' quest'ultima
che ti interessa dillo :-) )


 >bisogna progettare bene la struttura...
Ho capito che è un metodo serio, ma se mi spiegaste come funziona il comando
blockwrite/read o se mi diceste un sito dove posso scaricare un manuale che
me lo spieghi... nei manuali in mio possesso non è presente questa
procedura, e non capisco come funzioni... GRAZIE        SAVE

[dall'help del TP7]
  BlockRead (procedure)
  ??????????????????????
 Reads one or more records into a variable.
  Declaration:
  procedure BlockRead(var F: File; var Buf; Count: Word [; var Result:
     Word]);
 where:
    F        untyped file variable
    Buf      any variable
    Count    an expression of type Word
    Result   a variable of type Word
  Target:
 Windows, Real, Protected
  Remarks:
 F is an untyped file variable, Buf is any variable, Count is an expression
 of type Word, and Result is a variable of type Word.
 BlockRead reads Count or fewer records from the file F into memory,
starting
 at the first byte occupied by Buf. The actual number of complete records
  read (less than or equal to Count) is returned in the optional parameter
 Result. If Result is not specified, an I/O error occurs if the number read
 is not equal to Count.
 The entire transferred block occupies at most Count symbol * RecSize bytes,
 where RecSize is the record size specified when the file was opened (or 128
 if the record size was not specified). An error occurs if Count symbol *
 RecSize is greater than 65,535 (64K).
 Result is an optional parameter. If the entire block was transferred,
Result
 will be equal to Count on return. Otherwise, if Result is less than Count,
 the end of the file was reached before the transfer was completed. In that
 case, if the file's record size is greater than 1, Result returns the
number
 of complete records read.
 The current file position is advanced by Result records as an effect of
 BlockRead.
 With {$I-}, IOResult returns 0 if the operation succeeded; otherwise, it
 returns a nonzero error code.
  Restrictions:
 File must be open.
  See Also:
  BlockWrite
  Sample Code:
   {Blockrd.PAS}
  {Sample code for the BlockRead and BlockWrite procedures.}
  program CopyFile;
  { Simple, fast file copy program with NO error-checking }
  { For Windows: }
 { uses WinCrt; }
 var
   FromF, ToF: file;
   NumRead, NumWritten: Word;
   Buf: array[1..2048] of Char;
 begin
   Assign(FromF, ParamStr(1)); { Open input file }
   Reset(FromF, 1);  { Record size = 1 }
   Assign(ToF, ParamStr(2)); { Open output file }
   Rewrite(ToF, 1);  { Record size = 1 }
   Writeln('Copying ', FileSize(FromF), ' bytes...');
   repeat
     BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
     BlockWrite(ToF, Buf, NumRead, NumWritten);
   until (NumRead = 0) or (NumWritten <> NumRead);
   Close(FromF);
   Close(ToF);
 end.
se no era questo che intendevi... boh ho capito male :-)
