Reputation:
I have the challenge in AppleScript to manipulate a string as follows:
First Last ([email protected])
First Last
- so the space in front of the first bracket needs to be removed.What is the best and most efficient way to do this in AppleScript?
Upvotes: 3
Views: 25544
Reputation: 710
You may want to use a simpler solution like this:
set theSample to "First Last ([email protected])"
on trimEmailAddress(sourceAddress)
set cutPosition to (offset of " (" in sourceAddress) - 1
return text 1 thru cutPosition of sourceAddress
end trimEmailAddress
return trimEmailAddress(theSample)
--> "First Last"
Upvotes: 1
Reputation: 27613
I'd also use offsets. text 1 thru 2 of "xyz"
is equivalent to items 1 thru 2 of "xyz" as string
.
set x to "First Last ([email protected])"
set pos to offset of " (" in x
{text 1 thru (pos - 1) of x, text (pos + 2) thru -2 of x}
As far as I know, you don't have to restore text item delimiters.
set x to "First Last ([email protected])"
set text item delimiters to {" (", ")"}
set {fullname, email} to text items 1 thru 2 of x
If others were searching about string manipulation in general, here are methods for replacing and splitting text and joining lists:
on replace(input, x, y)
set text item delimiters to x
set ti to text items of input
set text item delimiters to y
ti as text
end replace
on split(input, x)
if input does not contain x then return {input}
set text item delimiters to x
text items of input
end split
on join(input, x)
set text item delimiters to x
input as text
end join
String comparisons ignore case by default:
"A" is "a" -- true
"ab" starts with "A" -- true
considering case
"A" is "a" -- false
"ab" starts with "A" -- false
end considering
Reversing text:
reverse of items of "esrever" as text
You can use do shell script to change the case of text:
do shell script "printf %s " & quoted form of "aä" & " | LC_CTYPE=UTF-8 tr [:lower:] [:upper:]" without altering line endings
echo interprets escape sequences by default in OS X's /bin/sh. You could also use shopt -u xpg_echo; echo -n
instead of printf %s
. LC_CTYPE=UTF-8
makes character classes include some non-ASCII characters. If without altering line endings
is left out, linefeeds are replaced with carriage returns and a newline at the end of the output is removed.
paragraphs of
splits strings around \n, \r, and \r\n. It doesn't strip delimiters.
paragraphs of ("a" & linefeed & "b" & return & "c" & linefeed)
-- {"a", "b", "c", ""}
The plain text version of the clipboard uses CR line endings. This converts line endings to LF:
set text item delimiters to linefeed
(paragraphs of (get the clipboard as text)) as text
Unicode text
has been equivalent with text
and string
since 10.5:
There is no longer a distinction between Unicode and non-Unicode text. There is exactly one text class, named “text”: that is, class of "foo" returns text.
Upvotes: 5
Reputation: 5045
set theSample to "First Last ([email protected])"
return trimEmailAddress(theSample)
-->Result: "First Last"
on trimEmailAddress(sourceAddress)
set AppleScript's text item delimiters to {" ("}
set addressParts to (every text item in sourceAddress) as list
set AppleScript's text item delimiters to ""
set nameOnly to item 1 of addressParts
return nameOnly
end trimEmailAddress
Upvotes: 3