2011

Mar

21

Av Rolf

FileMaker kan skapa slumptal mellan 0 och 1 med beräkningsfunktionen Random. Jag har tidigare skrivit om hur man kan göra ett slumpmässigt urval med hjälp av funktionen, denna gång ska jag visa hur man kan göra en slumpmässig sekvens av nummer utan dubbletter. Om du någon gång spelat på Lotto vet du att man ska välja 7 nummer av 35. Att pricka in samtliga 7 rätt är en chans på ungefär 6,5 miljon. Vissa använder sina turnummer, andra låter FileMaker välja numren. Vilket som är bäst avgör du själv! Jag har aldrig vunnit 🙁

Jag har valt att göra funktionen med hjälp av manus. (Har du FileMaker Pro Advanced går det också att göra med egna funktioner.)

Manuset består av 2 steg. Det första steget är att skapa alla tillgängliga nummer mellan 1 och 35. Dessa nummer sparas i en variabel som jag kallar $lista. Genom att dra ett nummer från listan och göra listan mindre för varje gång får jag automatiskt 7 unika nummer.

Att skapa en lista med nummer från 1 till 35 är lätt:

Ange variabel [$lista; Värde: "1"]
Loop
   Ange variabel [$lista; Värde: $lista & "¶" & ValueCount($lista)+1]
   Exit Loop If [ValueCount($lista) = 35]
End Loop

Det hade förstås gått lika lätt att skriva in alla värden från 1 till 35 direkt i variabeln utan att göra en loop. Tänk bara på att värdena ska stå på var sin rad i listan. Det är därför jag lägger in radmatning (”¶) mellan värdena.

I nästa steg skapar jag först ett slumptal mellan 1 och antal värden i $lista. Från början innehåller $lista 35 värden, men antalet minskar med 1 för varje nummer som används i lottoraden. Slumptalet använder jag sedan för att hämta ett värde från $lista till lottoraden. För att inte kunna välja samma värde igen tar jag sedan bort värdet från $lista genom att sätta ihop alla värden mindre än slumptalet med alla värden större än slumptalet. Loopen körs 7 varv för att få fram 7 tal till lottoraden.

Ange variabel [$lottorad; Värde: ""]
Loop
   Ange variabel [$slumptal; Värde: Int(Random*ValueCount($lista) + 1]
   Ange variabel [$lottorad; Värde: $lottorad & GetValue($lista;$slumptal) & "¶"]
   Ange variabel [$lista; Värde: LeftValues($lista;$slumptal-1) & 
      MiddleValues($lista;$slumptal+1;99999)]
   Exit Loop if [ValueCount($lottorad) = 7]
End Loop

Det sista steget i manuset är att tilldela lottoraden till ett fält i FileMaker-databasen så att den sparas.

Tilldela fält [Lotto:Rad; $lottorad]
Verkställ post []

Lycka till!

Kommentarer

2011-11-25 Arto Ylitervo

Hej,
Försökte importera rätt Lottorad men fick följande fel:
Xml-tolkningsfel: Required attribute "FOUND" was not provided.

Har du några förslag på vad jag har gjort för fel?

M.v.h.
Arto

2011-11-25 Rolf

Rolf Clausen

Vilken version av FileMaker har du?

2011-11-25 Arto Ylitervo

Filemaker 10 Pro

2011-11-25 Rolf

Det ska fungera med både 10 och 11. Prova igen! Får du fortfarande felmeddelande, kontakta mig via epost.

Skriv en kommentar

Din epost-adress stannar hos oss.