Newsgroup: it.comp.lang.delphi
Titolo: File Tipizzati

Buongiorno a tutti,
nei giorni scorsi ho postato un messaggio nel tentativo di ricevere aiuto
per leggere un file di testo.
Dalle vostre indicazioni e leggendo attentamente su vari manuali sono
arrivato alla conclusione che la soluzione ottimale per leggerlo è di
utilizzare i file Tipizzati.
Così facendo ho creato una unit in cui definisco i vari campi del mio file.
In pratica ho necessità di leggere solamente alcuni di questi e di
trascriveli in una Combobox.
A quanto pare però non riesco ad impostare la lettura del file sui campi che
mi interessando pur utilizzando la seek procedure, ossia il programma non
scrive nulla nel combobox.... dove sbaglio ?
Vi copio il codice che ho inserito... qualcuno ha preziose indicazioni da
darmi ?
Vi ringrazio anticipatamente per le risposte.
Sparta
Unit secondaria; //definizione del tracciato del mio file
type Toperstu = record
    CodStudio : string[1];
    CodOperatore: string[6];
    Password: string[16];
    NGgValidita: string[3];
    DataCambioPwd: string[8];
    DataUltimoAccesso: string[8];
    TuttoilResto: string[255];
    TuttoilResto1: string[255];
    TuttoilResto2: string[49];
end;
Unit principale
....
var Soperstu: file of Toperstu;
    UnFileSoperstu: Toperstu;
procedure TForm1.Button3Click(Sender: TObject);
     begin
     if OpenDialog1.Execute then
        begin
          AssignFile(SOperstu, OpenDialog1.FileName);
          Reset(Soperstu);
          Seek(SOperstu,0);
          Read(SOperstu, UnFileSoperstu);
          Seek(SOperstu,0);
          Readln(UnFileSoperstu.CodStudio);
          Memo1.Text := UnFileSoperstu.CodStudio;
          ComboBox1.Items.Add(UnFileSoperstu.CodStudio);
          Reset(Soperstu);
          CloseFile(Soperstu);
        end;
     end;


Secondo me ti stai complicando la vita inutilmente ;-) 
Un modo semplice e veloce è IMHO usare le funzioni I/O standard e la
funzione Copy per estrarre i dati che ti servono.
Quakche cosa di simile insomma (i valori dei copy sono a caso).
procedure Button3Click;
var
  AFile: TextFile;
  MyText: string;
begin
  if OpenDialog1.Execute then begin
    AssignFile(AFile, OpenDialog1.FileName);
    Reset(AFile);
    while not eof do begin
      Readln(AFile, MyText);
      Memo1.Lines.Add(Copy(MyText, 1, 4));
      ComboBox1.Items.Add(Copy(MyText, 13, 7));
    end;
    CloseFile(MyFile)
  end;
end;
ciao.
-- 
"La velocità luce non è sufficiente Comandante Nunziatella, 
dobbiamo passare alla velocità smodata!"

 end;
si d'accordo fin qui può andar bene...
ma nel momenti in cui devo fare una scrittura su determinati record del
file... o meglio ancora solo su alcuni campi... che metodo posso
utilizzare ?
mi pare di aver capito che con i file tipizzati sarebbe stato ancora più
semplice utilizzare la funzione writeln impostando i campi cui mi
riferisco.
Grazie ancora per l'attenzione.
Sparta
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

riferisco.
Vedi, l'utilizzo di file tipizzati su un file di testo può essere
problematico. 
Prima di tutto dovresti ridefinire il tuo record così:
type Toperstu = record
    CodStudio : char;
    CodOperatore: array[0..5] of char;
    Password: array[0..15] of char;
    ........
    CRLF: array[0..1] of char;  //questo è importante
end;
e poi leggerlo in questo modo
var arec: TOperstu;
  f: file of TOperstu;
 
system.reset(f);
  while not eof(f) do begin
    read(f, arec); 
//come vedi leggo direttamente tutto il record ed evito i pasticci con
i seek i reset e compagnia cantante ;-)
  end;
  closeFile(f);
Dopodichè puoi lasciare a delphi fare il cast automatico da array of
char a string.
Ma ci sono dei ma.
Se l'ultima riga del file di testo non finisce con CR/LF non la leggi,
se ci sono delle linee vuote succede un casino.
Una soluzione che mi piace di più è piuttosto utilizzare una
stringlist, leggere con LoadFromFile, gestire le singole linee con
vari Copy, delete e insert, e salvare tutto con SaveToFile.
Ciao.


 vari Copy, delete e insert, e salvare tutto con SaveToFile.
Ti ringrazio per i consigli... in effetti un problema c'è e penso che sia
ciò che mi impedisce di leggere il file... manca su ogni riga del file il
CR/LF (in pratica lo 0D0A in esadecimale).. ora proverò con una TStringList
a importare tutto quanto.
Ciao e grazie
Sparta