porownanie plikow ini

0

Witam,
mam 2 pliki ini, jeden na serwerze a drugi lokalny
zawartosc pliku ini z serwera np:
[update]
0001=0001
0002=0002
0003=0003
zawartosc pliku ini lokalnego np:
[update]
0001=0001
0002=0002

w pliku ini na serwerze klucze dopisuje recznie i chodzi mi o to aby program sprawdzal czy dany klucz istnieje w pliku lokalnym, jesli nie istnieje to wykonywalby jakas tam procedurke oraz dopisywal brakujacy klucz

0

najpierw upewnij się, że plik istnieje, potem:

a:= iniObj.readstring('update', '0001', '_error_');
if (a='_error_') then {klucz nie istnieje} 
0

Chcesz porównać zawsze jedną sekcje [update], czy wszystkie jakie się w pliku znajdują ? Jeśli to drugie to

  • wczytaj do posortowanych TStringList nazwy wszystkich sekcji
   Sekcje1, Sekcje2: TStringList;
   ...
   IniFile1.ReadSections(Sekcje1);
   IniFile2.ReadSections(Sekcje2);
  • dla każdej sekcji wczytaj jej wartości (ReadSectionValues) do jakiegoś TStringList, wynik możesz przechowywać w tablicy TStringList.Objects
  for i:= 0 to Sekcje1.Count do
  begin
    Sekcje1.Objects[i] := new TStringList;
    IniFile.ReadSectionValues(Sekcje1[i], Sekcje1.Objects[i]);
  end;
  • usuń puste sekcje
  • porównaj nazwy sekcji (Sekcje1.Equals(Sekcje2)), pamietaj aby listy były posortowane
  • jeśli sekcje są identyczne to możesz porównywać wartości kolejnych sekcji te zapisane w tablicy Objects,
(Sekcje1.Objects[i] as TStrings).Equals(Sekcje2.Objects[i] as TStrings)
0

tak dokladnie to chodzi mi o porownanie tylko jednej sekcji [update] program ma odczytac pierwszy klucz sekcji [update] w pliku na serwerze nastepnie sprawdzic czy taki klucz istnieje w pliku lokalnym , jesli istnieje to przejsc do nastepnego klucza i tak dalej a jesli nie istnieje to wykonac jakas tam procedurke i dopisac ten brakujacy klucz. moze tez byc taka sytuacja ze w pliku lokalnym bedzie brakowalo klucz niekoniecznie ostaniego a np 3

0

To wczytaj tak jak pisałem wartości tych sekcji do dwóch posortowanych TStringList i je porównaj.

Aby porównać listy zadeklaruj dwa indeksy (np i1 i2) zaczynając od 0 i 0. W pętli porównuj elementy list (i1 z i2).

pętla dopóki i1 i i2 mieszczą sie w zakresie list:
Porównaj element i1 pierwszej listy z elementem i2 drugiej listy
Jeśli są równe - zwiększ obydwa ideksy
Jeśli i1 < i2 - oznacza to że elemntu i1 pierwszej listy nie ma w drugiej liście, zwiększ i1
Jeśli i1 > i2 - oznacza to że elemntu i2 drugiej listy nie ma w pierwszej liście, zwiększ i2
następna iteracja pętli

pozostałe elemnty jednej z list nie występują w drugiej

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