Hur sortera inom string i ett skript?

Tråden skapades och har fått 4 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • 2009-02-12 10:14

Jag har ett skript som letar efter olika namn och lägger dem i en sträng, "". Detta presenteras sedan i en dialogruta. Jag skulle vilja att den sorterade de olika delarna av strängen i bokstavsordning när de visas.

Underlättar det om jag använder en lista, {""}? Hur gör jag i så fall?

  • Medlem
  • Stockholm
  • 2009-02-12 17:13

Hastig tanke: kan Du kanske lägga in en repetitionsrutin som söker den första bokstaven på (vad jag förmodar är) orden i strängen jämförande mot en lista i vilken står hela alfabetet i rätt ordning? När t ex ord som börjar på 'a' genomsöks i strängen kan varje ord som passar in på konditionen förses med en egen variabel + 'space' och sorteras in i ordningsföljd i en annan lista via principen 'copy theWord to end of myLIst' - osv. genom hela alfabetet (ev. bör uppsamlingslistan kanske konverteras till 'string' innan den visas i dialogen).

Detta bara sagt som en början. Det finns säkert mer sofistikerade lösningar. Man kan även få AppleScript att göra en hel del direkt när det gäller sortering av innehåll i text-strängar - dvs, genom rätt enkla kommandon - så föreslår att du 'Googlar' på det temat eftersom jag inte minns mer än så.

  • Medlem
  • 2009-02-12 17:51

Tack, men jag väntar lite. Det är inget som är jätteviktigt, så det ska vara en enkel lösning för att den ska komma i fråga.

Man kan sortera med UNIX, enkelt faktiskt:

Om du har en textsträng, med mellanslag mellan orden, så behöver du göra om den till en lista.

Du kanske gör så här?

set myString to ""
set myString to myString & "Cesar"
set myString to myString & " " & "Bertil"
set myString to myString & " " & "Adam"
--> "Cesar Bertil Adam "
set AppleScript's text item delimiters to " " -- Ett mellanslag
set myString to every text item of myString
--> {"Cesar", "Bertil", "Adam", ""}

-- Sortera med hjälp av UNIX
set AppleScript's text item delimiters to {ASCII character 10} -- always a linefeed
set list_string to (myString as string)
set new_string to do shell script "echo " & quoted form of list_string & " | sort -f"
set myString to (paragraphs of new_string)
-- {"Adam", "Bertil", "Cesar"}

Om du istället i ditt script bygger upp din lista genom att lägga till saker till den så kan det se ut så här:

set myString to {}
set myString to myString & "Cesar"
set myString to myString & "Bertil"
set myString to myString & "Adam"
myString
--> {"Cesar", "Bertil", "Adam", ""}

-- Sortera med hjälp av UNIX
set AppleScript's text item delimiters to {ASCII character 10} -- always a linefeed
set list_string to (myString as string)
set new_string to do shell script "echo " & quoted form of list_string & " | sort -f"
set myString to (paragraphs of new_string)
--> {"Adam", "Bertil", "Cesar"}

Du vet hur man gör om en en lista till en text?

set AppleScript's text item delimiters to " " -- Eller vad du nu vill ha mellan varje item i listan, kan vara tex semikolon mellanslag eller komma mellanslag eller cykel. 
set myString to myString as text
--> "Adam Bertil Cesar"
  • Medlem
  • 2009-02-15 20:23
Ursprungligen av Taz_1999:

Du vet hur man gör om en en lista till en text?

set AppleScript's text item delimiters to " " -- Eller vad du nu vill ha mellan varje item i listan, kan vara tex semikolon mellanslag eller komma mellanslag eller cykel. 
set myString to myString as text
--> "Adam Bertil Cesar"

Tack Taz! Jag testar detta lite senare.
Tills vidare vill jag (fåfängt visa att jag är också med på tåget genom att) för dem som läser detta och inte har örnkoll på text item delimiters att be skriptet att sätta tillbaka dessa till "". Jag brukar själv skriva

tell me to set text item delimiters to ""
1
Bevaka tråden