我写了一个AppleScript,它从逗号描述的文本文件中返回一个随机字符串:
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
但我现在有一个用新行而不是逗号描述的文本文件。每行从0-20个空格开始。我想只返回随机行的文本部分。我该怎么做?
此外,如果文本部分被普通(非卷曲)引号包围,我该如何修剪引号?
答案 0 :(得分:3)
以下脚本将处理注释中的其他要求,并包含用于从字符串的开头和结尾修剪字符的语句。它排除了从文件中读取的前27行,并将重复从列表中获取和修剪随机行,直到最终结果不为空。
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
答案 1 :(得分:2)
将第set the text item delimiters of AppleScript to ", "
行中的逗号和空格更改为return
。新行(没有双关语)看起来像这样:
set the text item delimiters of AppleScript to return
关于你的第二个问题,试试这个:
set AppleScript's text item delimiters to ""
return text items 2 thru -2 of some_string
让我们把它们放在一起!
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
编辑:你无法阻止程序返回空行,但你可以像这样过滤它们......
if paragraph i of some_text is not "" then do_something()
答案 2 :(得分:2)
这是我用来修剪字符串两端的空格
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