Lars Gjörling
<6825>
· Text 9260 · w8 · kommentar
1990-02-17 12:35
Ärende: ISAM-rutiner
Problemet att sortera på två nivåer kan lösas på olika sätt, beroende
av om du har numeriska fält eller ascii-fält för varugrupp resp ar-
tikelnummer.
Låt oss antaga att varugruppnumret <= 999 och att artikelnumret <= 9999.
Om du använder numeriska fält (mest naturligt), ser jag ingen annan
lösning än att skapa ett tredje numeriskt flyttalsfält, där du lagrar
talet 10000*Vnr + Anr. Vnr = 132 och Anr = 345 ger talet 1320345 exem-
pelvis. En sortering på detta fält ger utskrift i varugruppsordning,
med
artikelnummerordning inom varje varugrupp. Ev. kan man tvingas att an-
vända flyttal med dubbel noggrannhet (eller ascii-aritmetik).
Har du asciifält, kan sortering i två nivåer göras enklare, förutsatt
att varunummerfältet följer direkt efter varugruppfältet.
Vnr¤-fältet är då på 3 bytes och Anr¤-fältet på 4 bytes. Talen måste
då lagras högerorienterade (med entalssiffran på sista byte), annars
blir sorteringen fel. Detta kan åstadkommas genom:
Vnr¤ = Num¤(Vnr) : Vnr¤ = Space¤(3 - Len(Vnr¤)) + Vnr¤
Anr¤ = Num¤(Anr) : Anr¤ = Space¤(4 - Len(Anr¤)) + Anr¤
Du kan nu ange startposition för index till 1:a byte i Vnr¤ och längd
av index till 7 bytes. Något extra fält behövs inte. Ingenting hindrar
att du dessutom har ett index för enbart Vnr resp enbart Anr.