我试图在Apple Automator中使用以下代码
var lnRange = getSelectedLineRange();
var ln = getTextInRange(lnRange[0],lnRange[1]);
var lines = ln.split('\n').sort(function(a, b)
{
var parsedA = a.replace(/\*\s(<s>)?(The )?/, "* ");
var parsedB = b.replace(/\*\s(<s>)?(The )?/, "* ");
return parsedA.localeCompare(parsedB);
});
setTextInRange(lnRange[0],lnRange[1],lines.join('\n'));我知道代码是健全的,并实现了我需要的结果(在iPhone上的草稿中运行它会产生所需的结果,即在行的开头忽略<s>和/或"The“的使用),即对标记列表进行排序。*需要待在列表中,这样列表才能有效)。
将它从iPhone转移到Automator是事情分崩离析的地方,因为Automator找不到变量getSelectedLineRange。我猜这是Automator处理文本输入的方式和脚本想要接收和处理文本输入之间的冲突,但是我在如何解决它方面陷入了僵局。
为了举例(如果我的整个方法都是错误的),我想要这个列表,在任何文本字段中我都可以抛出它。
* Armadillo
* The aardvark
* <s>Rhino</s>
* <s>The Zebra</s>
* The Giraffe
* Hedgehog当被选中时,要遍历脚本,以服务的形式运行,然后如下所示
* The aardvark
* Armadillo
* The Giraffe
* Hedgehog
* <s>Rhino</s>
* <s>The Zebra</s>我当然没有使用javascript解决方案,但这是我的出发点。
发布于 2015-08-03 04:57:00
我对JavaScript还不太熟悉,无法帮助解决这个问题,但是这个AppleScript应该可以在Run AppleScript Action中工作:
on run {input}
set rawParagraphs to every paragraph of (input as text)
set recordsForSorting to {}
repeat with eachPara in rawParagraphs
if (eachPara as text)'s length > 0 then
set end of recordsForSorting to my CheckText(eachPara as text)
end if
end repeat
set sortedRecords to my bubblesort(recordsForSorting)
set sortedText to ""
repeat with eachRecord in sortedRecords
set sortedText to sortedText & (eachRecord's ActualWord) & return
end repeat
return sortedText
end run
to CheckText(txt)
if txt contains "<s>" then
set sortRecord to {SortWord:((characters 4 thru -1 of txt) as text), ActualWord:txt}
else if txt contains "the" then
set sortRecord to {SortWord:((characters 5 thru -1 of txt) as text), ActualWord:txt}
else
set sortRecord to {SortWord:txt, ActualWord:txt}
end if
return sortRecord
end CheckText
-------------------------
on bubblesort(array)
repeat with i from length of array to 2 by -1 --> go backwards
repeat with j from 1 to i - 1 --> go forwards
tell array
if (item j)'s SortWord > (item (j + 1))'s SortWord then
set {item j, item (j + 1)} to {item (j + 1), item j} -- swap
end if
end tell
end repeat
end repeat
return array
end bubblesort该脚本为包含实际文本的每个段落创建一个记录,并为“删除”或“删除”创建相同的文本。然后在目标项上使用气泡排序,按排序顺序返回实际文本时间的字符串。
我没有为星号做任何准备;我无法从您的帖子中确定这是原始问题的一部分,还是堆栈溢出格式化问题。
我没有测试它作为一个服务,但它工作在Automator与标准输入文本和随后输出到一个文本文件。
祝好运,
https://stackoverflow.com/questions/31773900
复制相似问题