Applescript: trim spaces and return line

2019-07-25 18:50发布

I wrote an AppleScript that returns a random string from a text file delineated by commas:

set some_file to "Macintosh HD:Users:Zade:Library:Application Support:Notational Data:Words.txt" as alias
set the_text to read some_file as string
set the text item delimiters of AppleScript to ", "
set the_lines to (every text item of the_text)
return some item of the_lines

But I now have a text file delineated by new lines instead of commas. And each line begins with anywhere from 0-20 spaces. I want to return just the text portion of a random line. How do I do this?

Also, if the text portion is surrounded by plain (not curly) quotes, how can I trim the quotes?

3条回答
三岁会撩人
2楼-- · 2019-07-25 19:10

Change the comma and space in the line set the text item delimiters of AppleScript to ", " to return. The new line (no pun intended) looks like this:

set the text item delimiters of AppleScript to return

As for your second question try this:

set AppleScript's text item delimiters to ""
return text items 2 thru -2 of some_string

Let's put it all together!

set some_file to "Macintosh HD:Users:Zade:Library:Application Support:Notational Data:Words.txt" as alias
set the_text to read some_file as string
set the_lines to (every paragraph of the_text)
set this_line to some item of the_lines
if this_line is not "" then
    set AppleScript's text item delimiters to ""
    set this_line to (text items 2 thru -2 of this_line) --remove the quotes
    set AppleScript's text item delimiters to space
    set these_items to (every text item of this_code)
    set the this_line to (item 1 of these_items & this_line)
    set AppleScript's text item delimiters to ""
    return this_line
end if

EDIT: You can't stop the program from returning empty lines, but you can filter them out like so...

if paragraph i of some_text is not "" then do_something()
查看更多
爷的心禁止访问
3楼-- · 2019-07-25 19:15

The following script will handle the additional requirements from your comments, and includes statements to trim characters from the beginning and ending of the string. It excludes the first 27 lines read from the file and will repeatedly get and trim random lines from the list until the final result is not empty.

set theFile to (choose file)
set theLines to paragraphs 28 thru -1 of (read theFile)

repeat -- forever

    set someLine to some item of theLines

    -- trim characters at the start
    if someLine is not "" then repeat until the first character of someLine is not in {space, tab, quote}
        if (count someLine) is 1 then
            set someLine to ""
            exit repeat
        end if
        set someLine to text 2 thru -1 of someLine
    end repeat

    -- trim characters at the end
    if someLine is not "" then repeat until the last character of someLine is not in {quote}
        if (count someLine) is 1 then
            set someLine to ""
            exit repeat
        end if
        set someLine to text 1 thru -2 of someLine
    end repeat

    if someLine is not "" then exit repeat
end repeat

return someLine
查看更多
我命由我不由天
4楼-- · 2019-07-25 19:21

Here is what I use to trim spaces from both ends of a string

 on trimWhiteSpace(aString)
    if aString is not "" then
        -- setup for no delimiter
        set savedTextItemDelimiters to AppleScript's text item delimiters
        set AppleScript's text item delimiters to ""
        -- start with the tail end by revering the list
        set these_items to reverse of (every text item of aString)
        -- keep peeling off 1st space
        repeat while item 1 of these_items is space
            set these_items to rest of these_items
        end repeat
        -- flip the list, now do the leading characters
        set these_items to reverse of these_items
        repeat while item 1 of these_items is space
            set these_items to rest of these_items
        end repeat
        -- reconstruct the string
        set these_items to these_items as string
        -- restore and return
        set AppleScript's text item delimiters to savedTextItemDelimiters
        return these_items
    end if
end trimWhiteSpace
查看更多
登录 后发表回答