Newsgroup: it.comp.lang.delphi
Titolo: [StringGrid] Salvataggio Tralasciando i campi vuoti EUREKA !

Bizzarra ma geniale.... :-D Degna di archivio ?
Efficace, veloce, poco codice e file compressi... !!!!
Un ringraziamento particolare a CA75... 
procedure TForm1.G_SalvaGriglia(const aGrid: TStringGrid; NomeFile:TFileName);
var  X,Y,k : integer;
     F : TextFile;
     T : String[G_LMax+10]; // G_LMax=lungh.massima cella! Non omettere
     s1,s2 : String;
begin
 AssignFile(F,NomeFile) ; Rewrite(F) ;
 try
 for Y:=1 to aGrid.ColCount-1 do   // 0 se anche colonna fissa
 for X:= 1 to aGrid.RowCount-1 do  // 0 se anche riga fissa
 BEGIN
 Str(Y,s1); for k:=1 to 5-length(s1) do s1:='0'+s1;  // 5 cioč max 99999
colonne
 Str(X,s2); for k:=1 to 5-length(s2) do s2:='0'+s2;  // 5 cioč max 99999 righe
T:=s1+s2+aGrid.cells[Y,X]; if aGrid.cells[Y,X]='' then T:='';
if aGrid.cells[Y,X]='' then T:='' Else for k:=1 to G_LMax+10-length(T) do
T:=T+#9;
      Write (F,T);
 END;
 finally  CloseFile(F) ; end;
end;
Function TForm1.G_LoadGriglia(Const aGrid: TStringGrid; NomeFile:
TFileName) : TStringGrid;
var  X,Y,k,j,Colonna,Riga : integer;
     F : TextFile;
     T : String[G_LMax+10]; // G_LMax=lungh.massima cella! Non omettere
begin
 if FileExists(NomeFile)=false then EXIT;
 AssignFile(F,NomeFile) ; Reset(F) ;
 try while not Eof(F) do begin
 for Y:=1 to aGrid.ColCount-1 do   // 0 se anche colonna fissa
 for X:= 1 to aGrid.RowCount-1 do  // 0 se anche riga fissa
 BEGIN
 Read (F, T);
 Val(T[1]+T[2]+T[3]+T[4]+T[5],Colonna,k);
 Val(T[6]+T[7]+T[8]+T[9]+T[10],Riga,k);
 Delete(T,1,10);
 for k := length(T) downto 1 do if T[k]=#9 then delete(T,K,1);
 aGrid.Cells[Colonna,Riga]:=T;
 END; end;
 finally  CloseFile(F) ; end;
 Result:=aGrid;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage('salvami');
G_SalvaGriglia(C_G1,'C:\test.txt');
showmessage('caricami');
C_G1:=G_LOADGRIGLIA(C_G1,'C:\test.txt');
end;
Ciao 
MArco.
--- posted by geoForum on 
http://www.delphiedintorni.it

Credo che strutturando meglio il File e spostandosi con un char fino a
incontrare #9 possa essere anche ottimizzata per comprimere meglio il
contenuto dell'informazione nella griglia!


Infine prima di caricare la griglia fare un controllo:
if FileExists('C:\test.txt') then
C_G1:=G_LOADGRIGLIA(C_G1,'C:\test.txt');
O associa a C_G1 una formattazione  sbagliata passata dalla funzione !


Ragazzi, troppo contento. Questo Thread e' stato segnalato sulla home di
Marco, con relativo commento .... !
http://www.delphiedintorni.it/geoxml/home
Non faro' piu' il Troll, promesso :-D


procedure TForm1.G_SalvaGriglia(const aGrid: TStringGrid; NomeFile:TFileName);
var  R,C : integer;
     F : TextFile;
     scritto : boolean;
begin
 scritto:=false; AssignFile(F,NomeFile) ; Rewrite(F) ;
 try
 for C:=1 to aGrid.ColCount-1 do   // 0 se anche colonna fissa
  for R:= 1 to aGrid.RowCount-1 do  // 0 se anche riga fissa
 BEGIN
if aGrid.cells[C,R]<>'' then begin scritto:=true;
                                   Writeln (F,IntToStr(C));
                                   Writeln (F,IntToStr(R));
                                   Writeln (F,aGrid.cells[C,R]);  // Non
write o non mette fine riga
                                   end;
END;
finally  CloseFile(F) ; end;
if scritto=false then DeleteFile(NomeFile);
end;
Function TForm1.G_LoadGriglia(Const aGrid: TStringGrid; NomeFile:
TFileName) : TStringGrid;
var  R,C          : integer;
     F            : TextFile;
     T            : String;
     Colonna,Riga : String;
begin
 AssignFile(F,NomeFile) ; Reset(F) ;
 for C:=1 to aGrid.ColCount-1 do   // 0 se anche colonna fissa
  for R:= 1 to aGrid.RowCount-1 do  // 0 se anche riga fissa
  BEGIN
  Readln (F,Colonna);
  Readln (F,Riga);
  Readln (F,T); // Non read, non farebbe avanzare puntatore
  aGrid.Cells[StrToInt(Colonna),StrToInt(Riga)]:=T;
  if Eof(F) then begin CloseFile(F); Result:=aGrid; exit; end;
 END;
end;
