tablica, w niej rekord, w rekordzie rekord :)

0

Mam przykladowo cos takiego:

var Calosc: array of record
     costam:string;
     costam2: integer;
     Lines: array of record
          costam:string;
          costam2: string;
          end;
    end;

Ilosc pol w Lines nie jest zalezna od ilosci pol w Calosc, czyli np. length(Calosc) moze sie rownac 3, a np. length(Calosc[1].Lines) := 8.

Gdy musze zwiekszyc wielkosc Calosc to robie

result:=length(Calosc);
setlength(Calosc,result+1);

No i sie ladnie zwiekszaja. Teraz przychodzi moment, w ktorym po zwiekszeniu Calosc, musze Calosc[nawyzszy_index].Lines zwiekszyc o np. 3 pozycje. No i robie:

result:=length(Calosc);
resultl:=length(Calosc[result].Lines);
setlength(Calosc[result].Lines,resultl+1);

Calosc[result].Lines[resultl].costam := 'costam';

No i to juz chyba slabo dziala, chociaz errorow nie wywala, ale jakos wartosci sie chyba nie przypisuja... Najwieksza sieczka sie robi, gdy w innej procedurze zrobie np.:

result:=length(Calosc);
resultl:=length(Calosc[result].Lines);
Rozmowy[result].Lines[resultl].costam := JakasZmienna;

... co daje w zamian acces violation :(.

Jakies pomysly?

0
result:=length(Calosc);
resultl:=length(Calosc[result].Lines); 
 // powinno być chyba Calosc[result-1].Lines i tak wszędzie :)
setlength(Calosc[result].Lines,resultl+1);

Tablica jest indeksowana od 0 a najwyzszy index to
length - 1

0

[hurra] UDALO SIE! :D

[browar] , nakierowales mnie. Po godzinie zabawy z ShowMessage na result, resultl w roznych miejscach i badaniu krok po kroku jakie co przyjmuje wartosci w cyklu, doszedlem gdzie dokladnie trzeba bylo dac -1, a gdzie nie zmieniac :).

0

Dlatego tez zamiast używać Length a potem -1 to lepiej dać po prostu High...

0

Dlatego tez zamiast używać Length a potem -1 to lepiej dać po prostu High...

Zawsze jak np. jade petla po tablicy to daje for i:=Low(tab) to High(tab) i tutaj tez tak robilem, ale sie wywalalo bo najwidoczniej gdzies indziej mialem blad (calosc dosc spora wyszla :]) i zamiast od razu na spokojnie posprawdzac, to pozamienialem na length i wyszlo to co wyszlo...

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