Applescript:清理字符串

Applescript:清理字符串,applescript,Applescript,我有一个字符串,它包含我想要删除的非法字符,但我不知道可能存在什么类型的字符 我建立了一个我不想被过滤的字符列表,我建立了这个脚本(来自我在网上找到的另一个) 问题是这个脚本非常慢,给了我超时时间 我正在做的是逐个字符检查,并与legalCharacters列表进行比较。如果角色在那里,就可以了。如果没有,请忽略 有没有快速的方法 差不多 “查看字符串的每个字符并删除不在LegalCharacter上的字符” ? 感谢您的帮助。在Applescript中迭代总是很慢,而且没有更快的方法解决这些问

我有一个字符串,它包含我想要删除的非法字符,但我不知道可能存在什么类型的字符

我建立了一个我不想被过滤的字符列表,我建立了这个脚本(来自我在网上找到的另一个)

问题是这个脚本非常慢,给了我超时时间

我正在做的是逐个字符检查,并与legalCharacters列表进行比较。如果角色在那里,就可以了。如果没有,请忽略

有没有快速的方法

差不多

“查看字符串的每个字符并删除不在LegalCharacter上的字符”

?


感谢您的帮助。

在Applescript中迭代总是很慢,而且没有更快的方法解决这些问题。登录循环是一种绝对可靠的降低速度的方法。明智地使用log命令

但是,在您的特定情况下,您有一个长度限制,将长度检查移动到repeat循环中可能会大大缩短处理时间(无论文本长度如何,在脚本调试器中运行的时间都不到一秒钟):


您遇到了哪些非ascii字符?你的文件编码是什么

使用shell脚本和tr、sed或perl来处理文本要高效得多。默认情况下,所有语言都安装在OS X中

您可以使用带有tr的shell脚本(如下例)来剥离返回,也可以使用sed剥离空格(不在下例中):

或者,对于perl,这将去除非打印字符:

set x to quoted form of "Sample text. smdm#$%%&"
set y to do shell script "echo " & x & " | perl -pe 's/[^[:alnum:]|[:space:]]//g'"

搜索其他使用tr、sed和perl使用Applescript处理文本的示例。或搜索另一个Shell脚本方法可能是:

set clean_text to do shell script "echo " & quoted form of the_string & "|sed \"s/[^[:alnum:][:space:]]//g\""

它使用sed删除所有不是字母数字字符或空格的内容。更多的正则表达式引用

BBEdit或TextWrangler在这方面会快得多。下载TextWrangler(免费),然后打开你的文件并运行Text->Zap Gremlins。。。在上面。这能满足你的需要吗?如果有,用冷饮庆祝。如果没有,请尝试BBEdit(它不是免费的)并创建一个新的文本工厂,根据需要使用尽可能多的“全部替换”条件,然后打开文件并在其上运行文本工厂。

谢谢,但此循环给了我以下错误结果:错误“AppleeEvent超时”。编号-1712。。。我想文本太长,applescript不愿意等待它完成。我已经在代码中添加了一个超时块,但您不应该在这里得到它(我相信默认超时是60秒)。我在本页的完整文本上运行了代码,没有任何问题。我认为您可能必须将超时块包装在对子例程的调用或堆栈中更高的其他地方。
set clean_text to do shell script "echo " & quoted form of the_string & "| tr -d '\\r\\n' "
set x to quoted form of "Sample text. smdm#$%%&"
set y to do shell script "echo " & x & " | perl -pe 's/[^[:alnum:]|[:space:]]//g'"
set clean_text to do shell script "echo " & quoted form of the_string & "|sed \"s/[^[:alnum:][:space:]]//g\""