是否尝试在applescript中使用repeat下的属性?

是否尝试在applescript中使用repeat下的属性?,applescript,Applescript,我正在使用脚本检查文本文件,并根据其更改向我发送更新 每次我在“repeat”标记中使用“property”标记时,它都会出现故障并给出错误:“预期为“end”,但找到了“property”。“我可以使用“set”,但我不希望每次脚本重复时都重置该值。谢谢大家! repeat set theCEXRaw to read file "Macintosh HD:Users:adamvallorani:Desktop:CEX:CEXRaw" set theGHS to paragraph 11 of

我正在使用脚本检查文本文件,并根据其更改向我发送更新

每次我在“repeat”标记中使用“property”标记时,它都会出现故障并给出错误:“预期为“end”,但找到了“property”。“我可以使用“set”,但我不希望每次脚本重复时都重置该值。谢谢大家!

repeat

set theCEXRaw to read file "Macintosh HD:Users:adamvallorani:Desktop:CEX:CEXRaw"
set theGHS to paragraph 11 of theCEXRaw
set theBTC to paragraph 13 of theCEXRaw
set thePRICE to paragraph 26 of theCEXRaw

property oldBTC : 0

if theBTC > oldBTC then
    set theBTC to oldBTC
    set notif to "Your BTC has increased!"
    display notification notif with title "CEXalert"
end if


set BuyGHS to "0.02356001"
set SellGHS to "0.02361999"

if thePRICE > SellGHS then
    set notif2 to "Sell your GHS now!"
    display notification notif2 with title "CEXalert"
end if

if thePRICE < BuyGHS then
    set notif3 to "Buy some GHS now!"
    display notification notif3 with title "CEXalert"
end if

delay 2
end repeat
重复
将Exraw设置为读取文件“Macintosh HD:Users:adamvallorani:Desktop:CEX:CEXRaw”
将GHS设置为Exraw第11段
将BTC设置为附录第13段
将价格设置为Exraw第26段
属性oldBTC:0
如果BTC>旧BTC,则
将BTC设置为旧BTC
将notif设置为“您的BTC已增加!”
显示标题为“CEXalert”的notif通知
如果结束
将BuyGHS设置为“0.02356001”
将SellGHS设置为“0.02361999”
如果价格>卖出,那么
将notif2设置为“立即出售您的GHS!”
显示标题为“CEXalert”的通知notif2
如果结束
如果价格低于买入价,那么
将notif3设置为“立即购买GHS!”
显示标题为“CEXalert”的通知notif3
如果结束
延迟2
结束重复

“property”行是出现错误的地方,预期为“end”,但发现为“property”

property语句是创建预初始化全局变量的声明,必须出现在任何处理程序代码之外。如果将属性语句移动到脚本顶部,则AppleScript将接受它。出于示例的目的,您可以简单地说
将oldBTC设置为0

解决方案

乍一看,我认为您可能有一个范围问题,因为必须将property语句移出repeat循环。为了有效,必须在重复循环之外和之前定义属性。但这并不完全正确。属性是在脚本执行之后保留它们的状态的值,因此您需要考虑这是否是捕获值的适当方法(属性值将在脚本运行之间保留)。更合适的做法是在repeat语句之外创建一个顶级变量,使用如下行:

set variablename to 0 -- or some other value
这将强制变量在每次脚本运行时重置,并提供预期的正确值

如果您试图保存脚本属性而不是变量,您可以在的下一页中看到一些非常好的示例,介绍如何执行此操作。还要注意在Applescript中如何定义这些范围的语言

如果所有其他操作都失败,您可以采用如下代码,允许您在循环中记录变量:

set wordList to words in "Where is the hammer?"
repeat with currentWord in wordList
    log currentWord
    if contents of currentWord is equal to "hammer" then
        display dialog "I found the hammer!"
    end if
end repeat

请记住,变量最初必须在重复循环外部设置,然后根据需要在循环内部更改。一种更简单的方法是在重复循环中使用该值,将其分配给临时变量并记录结果,以确保获得所需的值。

是的,但我不希望每次都重置该值。我希望它只被第11行修改script@adamitude-请参阅修订版,希望能有所帮助。我想我读到了某个地方,在子例程中可以使用属性来保持每次调用子例程时的状态。属性将在第一次调用子例程时声明初始值,然后存储对值的任何更改,下次运行子例程时,脚本将不会初始化在属性语句中声明的值。这就是我要寻找的,但我得到的错误与OP expecting end语句中的错误相同。我不想要一个全局变量,我想要一个保存状态的局部变量。有什么建议吗?也许我想要本地的,现在就用代码测试。。。