ini - jak przerobić sekcje?

0

mam coś takiego:

[sekcja1]
wpis1=1
wpis2=2

[sekcja2]
wpis1=3
wpis2=4

[sekcja3]
wpis1=5
wpis2=6

[sekcja4]
wpis1=7
wpis2=8

i teraz jak kasuje sekcja2 to chcę aby sekcja3 weszła w miejsce sekcji2 razem ze swoimi wpisami. Jej nazwa zmienia się na sekcja2 tak samo jak kazdej kolejnej zmiania się na nazwę sekcji wcześniejszej (4 na 3, 5 na 4 itd) Chodzi o to aby była ciąglość numaracji sekcji. Jak to zrobić szybko gdy takich sekcji jest koło setki albo i więcej?

0

ja bym zrobil to tak petla FOR i z wpisu wyzej kopiuje wpisy nizej czyli z 3 do 2 ... 4 do 3 itd. ostatnia sekcje wywalam :)

0

Można jeszcze inaczej. Ręcznie obsłużyć ładowanie do listy jednokierunkowej, zapisywać poprzez tworzenie struktury INI na podstawie listy jednokierunkowej, a kasować poprzez podmienianie wskaźnika do następnego elementu wskaźnikiem do elementu następnego dla elementu następnego :).

0

rozwiązanie "na chama" :]

var Ini:TIniFile;
  Tmp:integer;
  i,j:integer;
begin
  Ini:=TIniFile.Create(sciezka);
  for i:=TenCoChceszUsunac to TyleIleMaszSekcji-1 do
  begin
    for j:=1 to 2 do 
    begin
      Tmp:=Ini.ReadInteger('sekcja'+IntToStr(i+1),'Wpis'+IntToStr(j),0);
      Ini.WriteInteger('sekcja'+IntToStr(i)','Wpis'+IntToStr(j),Tmp);
    end;
  end;
  Ini.Destroy; // <- to nie wiem czy tak ma byc ;)
end;

Pisze z glowy wiec mogą być blędy ;)

0

Zamień na TMemIniFile i na końcu updatuj plik.. będzie mniej roboty dla dysku i czasu.

0

Dzięki. Znalazłem klase TBiggerIniFile która ma fajną opcje RenameSection

for i:=pozycjausunieta to wszystkiepozycje do
begin
ini.RenameSection('sekcja'+inttostr(i),'sekcja'+inttostr(i-1));
end;

odpada też problem ograniczenia 64KB dla ini ;)

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