Polle Polle - 1 month ago 6
AppleScript Question

Loop with records

Why can't I get this script to show me a list of the records from a specific 'Klasse'?

I keep getting this error:


"error "Can not get Fornavn of {{Klasse:\"1X\", Fornavn:\"Anders\", Efternavn:\"Andersen\", ElevID:\"12345\"}, etc.." (I translated the error from Danish to English)


set varElevnavnIDliste to {{Klasse:"1X", Fornavn:"Anders", Efternavn:"Andersen", ElevID:"12345"}, {Klasse:"1X", Fornavn:"Julius", Efternavn:"Nielsen", ElevID:"23442"}, {Klasse:"1X", Fornavn:"Allan", Efternavn:"Mortensen", ElevID:"32193"}, {Klasse:"1X", Fornavn:"Lukas", Efternavn:"Olsen", ElevID:"87263"}, {Klasse:"1X", Fornavn:"Victor", Efternavn:"Nielsen", ElevID:"34523"}, {Klasse:"3Y", Fornavn:"Kenneth", Efternavn:"Oddersen", ElevID:"23442"}, {Klasse:"3Y", Fornavn:"Thomas", Efternavn:"Johansen", ElevID:"23452"}, {Klasse:"3Y", Fornavn:"Johan", Efternavn:"Thomasen", ElevID:"76590"}, {Klasse:"3Y", Fornavn:"Charlotte", Efternavn:"Frandsen", ElevID:"78569"}, {Klasse:"3Y", Fornavn:"Mathilde", Efternavn:"Charlottesen", ElevID:"64569"}, {Klasse:"STAFF", Fornavn:"Poul", Efternavn:"Killegaard", ElevID:"45328"}, {Klasse:"STAFF", Fornavn:"Frederik", Efternavn:"Augustesen", ElevID:"75639"}, {Klasse:"STAFF", Fornavn:"Cornelius", Efternavn:"Bugesen", ElevID:"75630"}, {Klasse:"STAFF", Fornavn:"Rikke", Efternavn:"Hansen", ElevID:"74632"}, {Klasse:"STAFF", Fornavn:"Katja", Efternavn:"Steffensen", ElevID:"65939"}}

set varResult to {}
repeat with iPar2 from 1 to (number of items in varElevnavnIDliste)
if item 1 of varElevnavnIDliste contains {Klasse:"1X"} then
set end of varResult to Fornavn of varElevnavnIDliste
end if
end repeat

choose from list varResult

Answer

Two mistakes:

  • The iteration element is item iPar2 of varElevnavnIDliste, not item 1 of ...
  • The reference to the requested element is Fornavn of item iPar2 of varElevnavnIDliste rather than Fornavn of varElevnavnIDliste.

set varResult to {}
repeat with iPar2 from 1 to (number of items in varElevnavnIDliste)
   if item iPar2 of varElevnavnIDliste contains {Klasse:"1X"} then
       set end of varResult to Fornavn of item iPar2 of varElevnavnIDliste
   end if
end repeat

This is the same as

set varResult to {}
repeat with iPar2 from 1 to (number of items in varElevnavnIDliste)
    set theItem to item iPar2 of varElevnavnIDliste
    if theItem contains {Klasse:"1X"} then
        set end of varResult to Fornavn of theItem
    end if
end repeat

or still cleaner with the repeat with ... in syntax.

set varResult to {}
repeat with iPar2 in varElevnavnIDliste
    if iPar2 contains {Klasse:"1X"} then
        set end of varResult to Fornavn of iPar2
    end if
end repeat