Newsgroup: it.comp.lang.delphi
Titolo: Salvare il contenuto di una StringGrid

Ciao, 
 Ho una stringgrid di 5 colonne e 1000 righe, non so come sia possibile
registrarne il contenuto con stream e quindi non ho fatto delle prove.
Ho provato a utilizzare queste istruzioni:
Stringgrid1.cols[1].SaveToFile(NomeFile);
etc. per tutte le colonne. Il problema è che per caricare le colonne in
modo analogo ci vuole del tempo circa 5 secondi, mi sembra davvero troppo.
Potrei creare un array bidimensionale e salvare tutto in un file di testo
(non ho ancora provato).
Se potete aiutarmi grazie.
Piccola parentesi:
Ribadisco che non sono il Troll, d'altra parte le prigioni sono piene di
innocenti per gli stessi motivi, ma non posso alimentare la polemica
ingiusta e sporcare oltremodo lo ng con stupidi OT.
Ciao e Grazie a chi mi crede.
Marco
--- posted by geoForum on 
http://www.delphiedintorni.it

Ho dato un'occhiata in giro... Vedi sotto con TStringLIst
procedure TForm1.G_SalvaGriglia(const aGrid: TStringGrid; fn: TFilename);
var slDest: TStringList;
    i: integer;
begin
  slDest := TStringList.Create;
  try
    for i := 0 to Pred(aGrid.RowCount) do begin
      slDest.Add(aGrid.Rows[i].CommaText);    // 1 riga di grid -> 1 riga
di slDest
    end;
    slDest.SaveToFile(fn);
  finally
    slDest.Free;
  end;
end;
Quindi la procedura di caricamento dovrebbe funzionare in modo analogo. Mi
chiedo pero' se i tempi di caricamento delle singole colonne rispetto allo
Stream possano cambiare.


completo con il caricamento:
procedure TForm1.ReadStringGridsFromFile(const fname:string); 
var 
  fs:TFileStream; 
begin 
  fs:=TFileStream.Create(fname,fmOpenRead); 
  fs.Position:=0; 
  if readstringgridfromfilestream(StringGrid1,fs) and // das genausowenig
    readstringgridfromfilestream(StringGrid2,fs) then showmessage('ok')
//wie das.
    else showmessage('Lesefehler!'); 
  fs.Free; 
end;


Non corretto...
Qualcuno puo ' aiutarmi a gestire il LOAD ?
Ciao


io lo avrui fatto cosi'( o simile )
non e' la soluzione piu' rapida ( si puo' ottimizzare maggiormente 
)...... ( ho inserito anche un precaricamento di 1000 righe )
type strc = record
        x,y   : integer;
        testo : string[255];
     end;
procedure TForm1.salva(nome:string);
var f : file of strc;
     x : strc;
     c1,c2 : integer;
begin
  assignfile(f,nome);
  rewrite(f);
  for c1 := 0 to 4 do
    for c2 := 0 to 999 do
    begin
      x.x := c1;
      x.y := c2;
      x.testo := StringGrid1.cells[c1,c2];
      write(f,x);
    end;
  closefile(f);
end;
procedure TForm1.carica(nome:string);
var f : file of strc;
     x : strc;
     c1,c2,righe,col : integer;
begin
  righe := 1;
  col := 1;
  assignfile(f,nome);
  reset(f);
  while  not eof (f) do
  begin
    read(f,x);
    if (x.x>col) then
    begin
      col := x.x;
      StringGrid1.colcount := col+1;
    end;
    if (x.y>righe) then
    begin
      righe := x.y;
      StringGrid1.rowcount := righe+1;
    end;
    StringGrid1.cells[x.x,x.y] := x.testo;
  end;
  closefile(f);
end;
procedure TForm1.Button1Click(Sender: TObject);
var c1,c2 : integer;
begin
  StringGrid1.rowcount := 1000;
  StringGrid1.colcount := 5;
  for c1 := 0 to 4 do
    for c2 := 0 to 999 do
      StringGrid1.cells[c1,c2] := 'testo '+inttostr(c1)+' ' + inttostr(c2);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
  salva('ciao.txt');
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
  carica('ciao.txt');
end;
-- 
-------------------------------
per scrivere in privato
togliere "1975nosp"
to reply remove "1975nosp"

>io lo avrui fatto cosi'( o simile )
Grazie veramente.
Provo un attimo, il prob. e' che ho tempi di caricamento molto alti.
D'altra parte sono con 6 colonne da 1000 righe.
Thanks.
Adesso provo :-)


 D'altra parte sono con 6 colonne da 1000 righe.
per accelerare il tempo potresti cambiare il modo di lettura.
poi sarebbe meglio conoscere di piu' il problema, ad esempio in un 
programma ho un archivio di vari miglaia di record.
Uso delle Tlabel e carico pochi record per volta, quelli che voglio 
visualizzare, se dovevo caricare tutti i dati avrei avuto anche problemi 
di lentezza.....


Infatti, quello a cui stavo pensando proprio adesso. In effetti la maggior
parte delle celle e' vuota!
Forse associare la coordinata della cella in scrittura del tipo
if SG1.Cells[0010,0020]<>'' then Testo:='0010,0020'+SG1.Cells[0010,0020];
... salvataggio 
Poi in lettura decodifico la posizione e taglio la coordinata
Val(Colonna,k,Testo[1]+Testo[2]Testo[3]Testo[4]);
Val(Riga   ,k,Testo[6]+Testo[7]Testo[8]Testo[9]);
Delete(Testo,1,5); SG1.Cells[Y,X]:=Testo;
Qualcosa del genere !


Ogni colonna di una string grid e salvabile con SaveToFile
...
For i:=0 to 5 Do
  StringGrid1.Cols[i].SaveToFile ( 'c:\colonna_' + IntToStr (i) + '.txt' ) ;
...
Ciao
Mario - (
mari...@inwind.it
)
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/