stringgrid i zapis/odczyt z pliku

0

Proboje zapisac grid do pliku metoda:
for (....)
stringrid->rows[i]->savetofile("jakisplik.dat");
i chcialbym odczytac ta sama metoda czyli:
for (....)
stringgrid->rows[i]->loadfromfile("jakisplik.dat");
jednak odczytuje mi tylko pierwszy wiersz.
Czy da sie to tak zrobic jak proboje czy trzeba to zrobic inaczej??

0

pomyśl sobie co by było jakbys miał 200 wierszy - to wtedy miałbyś 200 plików, to nie opłaca się taka metoda, gdybyś zapisywał do jednego pliku i oddzielał jakimiś znakami i to pózniej jakoś odczytywał (np. coś ala plik INI).
Chodzi mi o coś takiego (kod w delphi):

{
poniższa procedura służy do zapisu
danych z tabeli do pliku config.ini
procedura wykonana została na zasadzie
pętli for, która sprawdza ilość wierszy
a następnie zapisuje wartości każdej
kolumny dla danego wiersza.
}

procedure savetable;
var i, RowCount : integer;
begin
     for i := 1 to Form1.StringGrid1.RowCount do
          begin
               { najpierw ustalamy plik
               konfiguracyjny ...
               plik ten musi być ustalany
               w każdym przejściu pętli}
               Ini := TiniFile.Create(ExtractFilePath(Application.ExeName)+'config.ini');
               { a następnie możemy
               rozpocząć pętle zapisu }
               Ini.WriteString('Wiersz '+inttostr(i), 'imię', Form1.StringGrid1.Cells[0,i]);
               Ini.WriteString('Wiersz '+inttostr(i), 'nazwisko', Form1.StringGrid1.Cells[1,i]);
               Ini.WriteString('Wiersz '+inttostr(i), 'mail', Form1.StringGrid1.Cells[2,i]);
               Ini.WriteString('Wiersz '+inttostr(i), 'ip', Form1.StringGrid1.Cells[3,i]);
               Ini.WriteString('Wiersz '+inttostr(i), 'url', Form1.StringGrid1.Cells[4,i]);
          end;
     { obliczamy ilość wierszy }
     RowCount := Form1.StringGrid1.RowCount;
     { zapisujemy winuk do pliku
     konfiguracyjnego }
     Ini.WriteInteger('Standard', 'RowCount', RowCount);
     Ini.Free; //zwolnienie zasobów
end;

{
poniższa procedura służy do odczytu
tabeli z pliku konfiguracyjnygo.
Najpierw sprawdzamy ilość wierszy.
Następnie dla każdego z wierszy
przypisujemy odpowiednie dane w pętli
}

procedure loadtable;
var i : integer;
begin
     for  i := 1 to Form1.StringGrid1.RowCount - 1 do
     begin
          Ini := TIniFile.Create(ExtractFilePath(Application.ExeName)+'config.ini');
          Form1.StringGrid1.Cells[0,i] := Ini.ReadString('Wiersz '+inttostr(i), 'imię', 'błąd');
          Form1.StringGrid1.Cells[1,i] := Ini.ReadString('Wiersz '+inttostr(i), 'nazwisko', 'błąd');
          Form1.StringGrid1.Cells[2,i] := Ini.ReadString('Wiersz '+inttostr(i), 'mail', 'błąd');
          Form1.StringGrid1.Cells[3,i] := Ini.ReadString('Wiersz '+inttostr(i), 'ip', 'błąd');
          Form1.StringGrid1.Cells[4,i] := Ini.ReadString('Wiersz '+inttostr(i), 'url', 'błąd');
     end;
     Ini.Free; //zwolnienie pliku
end;
0

mam staly rozmiar wiersz w bajtach wiec duzo latwiej moge to zrobic. Chcialem tylko pojsc po najmniejszeje lini oporu jednak sie nie da. Dodatkowo dochodzi problem ze nie chce za kazda zmiana zawartosci gridu "przepisywac" calego pliku. Wiec sproboje jakos dodawac do niego na koncu.
Wielkie dzieki za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1