Newsgroup: it.comp.lang.delphi
Titolo: importare i dati di un file di testo in una griglia

che procedura devo scrivere??? 
Se il file .dat va a capo ogni record, allora ti leggi linea per linea e
scomponi i vari campi.
Per fare questo in maniera rapida puoi utilizzare una tstinglist, che ha un
metodo chiamato LoadFromFile(path del file) che ti permette di succhiare il
contenuto del file.
Da li', processando riga per riga con le proprieta' Count e Strings[indice]
della tstinglist, non hai che da estrarre le sottostringhe con la funzione
Copy(S; Index, Count: Integer) che ti permette di scegliere i byte di partenza
e il numero di byte da copiare.
Uan volta estretto il campo , con le funzioni di conversione StrTo..., oppure
con le TryStroTo..., ricavi i valori e li metti nel tuo db.
Ciao
-- 
Morde. 
(morde at programmer dot net)

 0001565985PATATE FRITTE001500010590708009635912541
Praticamente hai solo bisogno della funzione Copy.
Se le righe non sono + di qualche migliaio puoi caricare tutto il file
in una TStringList, altrimenti e' meglio aprire il file con AssignFile +
Reset ed usare un ciclo di Readln.
procedure LoadGridFromFile(src: TFilename; dest: TStringGrid);
const FieldPosLen: array[0..2*NumFields-1] of integer =
    (1, 5, 6, 5, 11, 13 ...);
var r, c: integer;
    sl: TStringList;
begin
  sl := TStringList.Create;
  try
    sl.LoadFromFile(src);
    // verifica numero minimo linee etc
    dest.Rowcount := sl.Count + 1;
    for r := 0 to sl.Count-1 do begin
      // verifica lunghezza linea r-esima
      for c := 0 to NumFields-1 do
        dest.Cells[c, r+1] := Copy(sl[r],
          FieldPosLen[2*c], FieldPosLen[2*c+1]);
    end;
  finally
    sl.Free;
  end;
end;
Saluti
Paolo Arosio
-- 
"La dimostrazione dell'esistenza di specie intelligenti nell'universo
 e' che non ci vengono a trovare"

>che procedura devo scrivere??? 
una procedura cosi' piccola che nemmeno si vede :)
1. mettiamo che il nome del file ASCII da leggere sia 'pippo.txt'
2. nella cartella dove si trova pippo.txt, crea un file di testo, di
nome 'pippo.sch' (quindi nome-file identico al file ASCII da leggere
ed estensione SCH), scritto cosi':
[PIPPO]
Filetype=FIXED
CharSet=ascii
Field1=CodFor,Char,05,00,00                
Field2=CodArt,Char,05,00,05
Field3=DesArt,Char,13,00,10
(la logica e' semplice, devi solo tener conto che l'offset parte da 0)
3. crei un nuovo progetto e nella form inserisci i seguenti
componenti:
a.  una TTable 
b. un TDataSource 
c. una DBGrid 
con enorme sforzo di fantasia, chiamiamo rispettivamente Table1,
Datasource1 e DBgrid1 questi componenti.
A design-time, assegna le seguenti proprieta':
DbGrid1.Datasource:=Datasource1
Datasource1.Dataset:=Table1
ora attenzione:
Table1.DatabaseName:=IlTuoPercorso   (tipo "c:\test", cioe' il
percorso dove gia' si trovano pippo.txt e pippo.sch
Table1.TableType:=ttAscii
Table1.TableName:='pippo.txt'  
Table1.Active:=True
e vedrai che i dati che cercavi appariranno miracolosamente nella
DBGrid, senza nemmeno compilare.
Facile, no ?
Ciao
Duilio

Facile, no ?
Grande, sia per la semplicita' che per la sottile ironia.... ;)


 Che casino ho combinato??
Niente, semplicemente non hai minimamente cercato di capire *cosa* fa quel
codice: non puoi pretendere che ti si dia uno spezzone di codice che fa
esattamente quello che vuoi tu: cerca di capire la logica che ha usato Paolo
e adatta il codice ai tuoi scopi.
Scusa la crudezza, di solito non sono cosě :)
--
Jax
Journeying Artificial Xenomorph

 cose, infatto fino ad ora ho usato ADO non BDE.
Ma perche' non importi prima i dati nel db e
poi ci fai quello che ti pare? Io farei cosi:
Procedure InserisceDatiInTabella(S);
begin
 with Tabella do
 begin
  Insert;
  FieldByName('CodiceFornitore')AsString := Copy(S,1,5);   //Cod fornitore
  FieldByName('CodiceArticolo')AsString  := Copy(S,6,5);   //Cod articolo
  FieldByName('Descrizione')AsString     := Copy(S,11,13); //Descrizione
  Post;
 end;
end;
procedure TForm1.Button1Click(Sender: TObject);
Var
   F : TextFile ;
   S : String ;
begin
 AssignFile(F,'a:\prezzi.dat ');
 Reset(F); { open the file }
 While (Not EOF(F)) do Begin
   ReadLn(F,S);
   InserisceDatiInTabella(S);
 End;
 CloseFile(F);
end;


Scusa Marco, porta pazienza ma... programmare non è come fare un
trucco per pc.
Ti sono stati dati più strumenti per risolvere il tuo problema ma,
come ha giustamente detto Jax, ora sta a te *capire* quello che stai
facendo e non limitarti ad un mero copia e incolla.
-- 
"La velocità luce non è sufficiente Comandante Nunziatella, 
dobbiamo passare alla velocità smodata!"

sono i dati di un registratore di cassa??? hai il modello ??? (ho già
qualcosa pronto)
Simone