Det du vill göra är en vanlig förfrågan i många programmeringsspråk, att ta en text och köra den genom kompileraren så att det blir kod, istället för text, alternativt att du vill exekvera texten som ett stycke kod och få resultatet av koden. I andra språk brukar det heta saker som "eval", "exec" etc.
I AppleScript kan du antingen använda OSAcompile (via do shell) men det du vanligtvis vill göra är att använda det kommando som finns via Standard Additions, "run script", som tar din text, kompilerar det som kod, exekverar koden, och returnerar resultatet. Så här:
set myString to "{{42, 80, 7}, {84, 122, 7}, {126, 164, 7}, {168, 206, 7}, {210, 248, 7}}"
set myScriptResult to run script myString
return myScriptResult
I andra språk är man ytterst vaksam mot sån här dynamiskt laddad kod, för låt säga att din textsträng istället för en enkel lista innehöll skadlig kod.
Med andra ord, man ska vara ytterst, ytterst försiktig med att exponera den kod som ska exekveras, annars öppnar man ett säkerhetshål av gigantiska mått (bara fantasin sätter gränser för vad en illasinnad person kan göra med dynamiskt laddad kod i en process som körs med admin-rättigheter i ett nätverk)
Det sättet man gör det är, förutom att ta kontroll över vem/vad som får skriva input, att förhandsgranska koden som ska köras. Ett enkelt sätt i ditt fall vore att kontrollera att texten börjar och slutar med { eller } samt att godkända tecken är siffror, mellanslag, komma och parenteser. Innehåller koden något annat så är det inte en giltig lista och ska inte köras. Mao vill du göra något i den här stilen:
set myString to "{{42, 80, 7}, {84, 122, 7}, {126, 164, 7}, {168, 206, 7}, {210, 248, 7}}"
if isList(myString) then
set myScriptResult to run script myString
return myScriptResult
else
-- vad du vill göra när scriptet går fel
end if
on isList(codeString)
-- Tecken som får finnas i din lista
set myApprovedList to every character of "0123456789. ,"
--Enkel kontroll för att se att inledande och avslutande sträng är de som krävs för en lista
if (codeString does not start with "{") and (codeString does not end with "}") then
return false
end if
--variabler för att kunna räkna antalet listseparatorer
set myLeftBraces to {}
set myRightBraces to {}
repeat with i in codeString
set myCurrentItem to contents of i
if (myCurrentItem is "{") then
set end of myLeftBraces to myCurrentItem
else if (myCurrentItem is "}") then
set end of myRightBraces to myCurrentItem
else if (myCurrentItem is not in myApprovedList) then
return false
end if
end repeat
if (count myLeftBraces) ≠ (count of myRightBraces) then
return false
end if
return true -- om alla tecken har klarat kontrollen utgår vi från att det är en lista och returnerar därför true
end isList