Lars Gjörling
<6825>
· Text 7611 · w8 · kommentar
1987-10-12 23:35
Ärende: Programproblem
Det blir nog enklast att använda en Random Accessfil med fast post-
längd, så att varje post har en adress, som är matematiskt enkel,
dvs n*postlängden, där n= 0,1,2,.......1000,.... Posterna är då
lätta att lagra och hämta. Uppdelning i fält kan ske enligt metoden
i Bit för Bit, sid 48.
Sökning i registret kan inte ske med sekvenssökning, när antalet pos-
ter är så stort. Du kan använda binärsökning, då man garanterat kan
söka igenom 1000 poster med maximalt 10 accesser. Detta fordrar att
filen är sorterad, vilket i det här fallet innebär att du måste ha
en eller flera indextabeller, en för varje sorteringsordning (t ex
en efter kundnummer och en efter namn). Indextabellen består av en
heltalsvektor, som innehåller pekarna till posterna, där 1:a peka-
ren pekar på Aahl, 2:a på Andersson etc. Som pekare kan talen n i
föregående stycke användas.
Att binärsöka med indextabellens hjälp, sker enligt BfB sid 129
(med en filaccess tillagd).
Vid inmatning av ny post, sorteras pekaren in i indextabellerna,
varvid de efterföljande pekarna flyttas ett steg bakåt. Vid rade-
ring av kund, flyttas de framåt. Vid avslutat arbete sparas tabel-
lerna på fil.
Du måste ha en infofil, där aktuella värden på antalet poster,
pekare till första lediga adress, antalet fält, deras längder,
typ, etc är lagrade. Eventuellt kan post nr 0 i huvudfilen användas
för detta ändamål istället för att lagra en kund.
När en kund raderas, bör det lediga utrymmet kunna användas för nya
kunder. I infoarean läggs därför en pekare till första lediga
utrymme, och i alla lediga utrymmen läggs en vidarepekare till näs-
ta och en bakåtpekare till föregående. Vid nyinskrivning och radering
justeras även pekarna.
Detta är bara en skiss, ett förslag, där detaljerna är utelämnade.
Det finns flera sätt att lösa det här på, många säkert bättre.
Mvh Lars