Thinker

Personal e-notepad


    AppleScript语言初步

    markeloff
    markeloff
    无尽星空

    帖子数 : 202
    积分 : 3367
    威望 : 0
    注册日期 : 2011-09-06
    年龄 : 30
    地点 : Singapore

    AppleScript语言初步 Empty AppleScript语言初步

    Post by markeloff on 05/07/19, 09:03 am

    -面向对象(对象、属性、命令)
    -不区分大小写
    -数据类型,Boolean (True, Flase),
    Number(Integer, Real),
    Text String,
    Date,
    Constant (yes, no, ask),
    List(列表型) 如:{1,2,3},{{1,2},{a,b,c},},{1,1.9, "text"}
    列表型数据由{}包裹,一个列表中可以再包含列表,形成多维列表,列表里的具体数 据可以是同类型的。
    Record(记录型)
    如:{firstName:"iDoraemon", lastName:"Nathan"} 记录就是带有名称的列表。记录中的每一项都有名称(标识符)。我们可以认为List
    是每个数据都是匿名的Record。Record也可以进一步包含另一个Record。 此例中,包含两个Text型数据 "iDoraemon"和 "Nathan",它们的标识符分别是
    firstName和lastName。通过of关键字可以得到想要的数据:
    firstName of {firstName:"iDoraemon", lastName:"Nathan"} 上面这行代码返回 "iDoraemon"。

    markeloff
    markeloff
    无尽星空

    帖子数 : 202
    积分 : 3367
    威望 : 0
    注册日期 : 2011-09-06
    年龄 : 30
    地点 : Singapore

    AppleScript语言初步 Empty Re: AppleScript语言初步

    Post by markeloff on 05/07/19, 09:03 am

    确定数据类型-Class of 要确定一个数据到底是什么类型的,使用Class of语句
    class of "string" 此代码得到结果text。
    markeloff
    markeloff
    无尽星空

    帖子数 : 202
    积分 : 3367
    威望 : 0
    注册日期 : 2011-09-06
    年龄 : 30
    地点 : Singapore

    AppleScript语言初步 Empty Re: AppleScript语言初步

    Post by markeloff on 05/07/19, 09:06 am

    运算符
    数学运算符(常见七种)
    AppleScript语言初步 Yunsua10

    运算符:
    =
    equals
    is equal

    is not
    isn't
    isn't equal [to]
    is not equal [to]
    doesn't equal

    >
    is greater than
    comes after
    is not less than or equal to

    <
    is less than
    comes before
    is not greater than or equal to

    Start with
    begin with

    end with

    contains

    does not contain

    is in
    is contained by

    is not in
    is not contained by


    &运算符

    “&”左边的数据类型为Text(文本型)时,结果为Text;存在报错可能
    “&”左边的数据类型为Record(记录型)时,结果为Record;存在报错可能
    “&”左边的数据类型为其他时,结果为List类型

    "Text" & 1 --结果:"Text1" (Text类型)
    1 & "Text" --结果:{1, "Text"} (List类型)

    {name:"a"} & "b" --结果:{name:"a", «class ktxt»:"b"} (Record类型,第二个元素匿名)
    3 & {name:"a"} --结果:{3, "a"} (List类型,且丢失标识符)


    {1, 2, 3} & {4, 5, 6} {1, 2, 3, 4, 5, 6}
    {1, 2, 3} & 4 & 5 & 6 {1, 2, 3, 4, 5, 6}
    {a:1, b:2} & {c:3} {a:1, b:2, c:3}

    --错误举例
    "Text" & {name:"a"} --错误!无法将Record类型数据转为文本
    {name:"a"} & 3 --错误!无法将Integer转换为Record
    markeloff
    markeloff
    无尽星空

    帖子数 : 202
    积分 : 3367
    威望 : 0
    注册日期 : 2011-09-06
    年龄 : 30
    地点 : Singapore

    AppleScript语言初步 Empty Re: AppleScript语言初步

    Post by markeloff on 05/07/19, 09:26 am

    第六节 提取对象中的元素


    提取字符串中的字母或单词
    every character of "一个字符串" --结果:{"一", "个", "字", "符", "串"}每个字符
    characters of "A String" --结果:{"A", " ", "S", "t", "r", "i", "n", "g"}每个字符

    words of "A string" --结果:{"A", "string"}
    every word of "我的名字叫张三" --结果:{"我", "的", "名字", "叫", "张三"}

    characters 3 through 5 of "A String"
    words 3 through 5 of "我的名字叫张三"

    word 2 of "This is a text"
    character 3 of "This is a text"

    ninth character of "This is a text"

    特别注意:
    第一个字符的位置是1,而不是0!
    “through”可以缩写为“thru”
    不推荐用序数词方法获得一个单词或字符
    不推荐对于中文引用“word”相关语句
    markeloff
    markeloff
    无尽星空

    帖子数 : 202
    积分 : 3367
    威望 : 0
    注册日期 : 2011-09-06
    年龄 : 30
    地点 : Singapore

    AppleScript语言初步 Empty Re: AppleScript语言初步

    Post by markeloff on 05/07/19, 09:34 am

    提取Finder文件列表

    tell application "Finder"
    every file of desktop --获得桌面上所有文件(List类型),其内容很详细
    files of desktop --同上

    every folder of desktop --获得桌面上所有文件夹(List类型),其内容很详细
    folders of desktop --同上

    name of every file of desktop --结果:获得桌面上所有文件名称(List类型) end tell


    tell application "Finder"
    every file of desktop whose name begins with "a" --仅获得文件名以a开头的文件列表
    every file of desktop where its name contains "a" --仅获得文件名包含a的文件列表
    end tell
    markeloff
    markeloff
    无尽星空

    帖子数 : 202
    积分 : 3367
    威望 : 0
    注册日期 : 2011-09-06
    年龄 : 30
    地点 : Singapore

    AppleScript语言初步 Empty Re: AppleScript语言初步

    Post by markeloff on 05/07/19, 09:36 am

    第七节 添加注释和括号

    “--”
    “(*” + “*)”
    markeloff
    markeloff
    无尽星空

    帖子数 : 202
    积分 : 3367
    威望 : 0
    注册日期 : 2011-09-06
    年龄 : 30
    地点 : Singapore

    AppleScript语言初步 Empty Re: AppleScript语言初步

    Post by markeloff on 05/07/19, 09:36 am

    第八节 代码缩写
    为了节省时间,将冗长的关键字缩写为几个字母也是非常有用的。此处举几例: application 简写为 app(编译时会补全)
    end tell/repeat/try 简写为 end(编译时会补全)
    through 简写为 thru
    if语句 可省略 then(将在下一章节介绍)
    markeloff
    markeloff
    无尽星空

    帖子数 : 202
    积分 : 3367
    威望 : 0
    注册日期 : 2011-09-06
    年龄 : 30
    地点 : Singapore

    AppleScript语言初步 Empty Re: AppleScript语言初步

    Post by markeloff on 05/07/19, 10:42 am

    第二节 全局变量和局部变量

    通过事件处理器和脚本对象来理解

    第三节 数据共享机制
    基本数据类型的共享机制(不含Record和List)
    Record和List的数据共享机制
    >
    set a to {1, 2, 3, 4, 5} --定义a为List型数据
    set b to a --给变量b赋值为a的值(List型)
    结论:
    这次第二个对话框的结果似乎有点出乎意料,的确,对于List(包括Record)通
    过“set b to a”方式实现的是数据共享,而不是拷贝!实际上a和b指向的是内存中的同一个 位置,a和b只是同一内存位置的不同引用!

    copy关键字
    如果你想要List和Record数据交换方式和其他数据一样,那么您需要将“set”改
    为“copy”,需要注意,copy和set中的源数据和目标数据的位置是相反的,并且copy的目标 数据必须要事先定义。

    set a to {1, 2, 3, 4, 5}--定义a为List型数据
    set b to 1--需要提醒的是,使用copy之前必须先定义
    copy a to b--给变量b赋值为a的值(List型)
    display dialog "赋值的结果:a=" & a & "; b=" & b--显示a和b的值
    set item 1 of b to 0--修改List b中的第一个值为0
    display dialog "修改变量b之后:a=" & a & "; b=" & b--再次显示a和b的值

    运行后,两对话框分别显示: 赋值的结果:a=12345; b=12345 修改变量b之后:a=12345; b=02345
    markeloff
    markeloff
    无尽星空

    帖子数 : 202
    积分 : 3367
    威望 : 0
    注册日期 : 2011-09-06
    年龄 : 30
    地点 : Singapore

    AppleScript语言初步 Empty Re: AppleScript语言初步

    Post by markeloff on 05/07/19, 10:43 am

    第四节 属性

    定义属性的语句如下:
    property Label : value
    其中,Label为属性的标签(相当于变量的名称),value为属性值。
    请注意,这个语句不是用来赋值的,而是用来初始化一个属性的! 属性的引用和修改方法和变量是一致的,比如set用来赋值。
    属性和变量的区别
    property countTimes : 0
    set countTimes to countTimes + 1
    display dialog "这是第" & countTimes & "次运行本脚本"


    第五节 预定义变量
    result:记录最近一个命令执行的结果,如果命令没有结果,那么将会得到错误
    it:指代最近的一个tell对象
    me:这指代段脚本。用法举例path to me返回本脚本所在绝对路径
    tab:用于string,一个制表位
    return:用于string,一个换行

    第六章 流程控制语句
    第一节 Tell语句
    Tell语句是最早接触且最重要的流程控制语句。它的作用是指明脚本要控制的程序对 象。Tell语句具有两种语法。
    简单形式:tell referenceToObject to statement
    复合形式:以tell referenceToObject开始,end tell结尾。中间包含命令语句。

    第二节 条件语句If
    If语句用于在满足一定条件的情况下执行语句,或者依据条件实现程序流程跳转。
    简单形式:if boolean then statement
    复合形式: if boolean1 then
    statement1
    else if boolean2 then
    statement2
    else
    statement3
    end if

    set mark to 99 --修改这里的数据来观察结果
    if mark ≥ 60 and mark < 80 then
    set response to "You passed the exam"
    else if mark ≥ 80 then
    set response to "Congratulations! You're smart"
    else
    set response to "Sorry. You failed"
    end if
    display dialog response

    第三节 循环语句
    退出循环的命令
    退出循环的命令非常简单,四个字母:exit(完整的为exit repeat)。请牢记

    无限循环
    repeat
    --do something
    end repeat
    限定次数循环
    repeat n times --do something
    end repeat
    “直到”循环
    repeat until boolean
    -- do something
    end repeat
    循环将反复执行,直到boolean为真!也就是说,boolean为假的时候循环执行,一旦
    boolean为真,退出循环。
    “当”循环
    repeat while boolean
    -- do something
    end repeat
    在boolean为真时,循环反复执行,一旦boolean为假退出循环。
    当循环和直到循环在一定意义上是正好相反的。
    变量循环
    repeat with loopVariable from startValue to stopValue by stepValue
    --do something
    end repeat
    其中stepValue可省略,省略时为默认为1;loopVariable无需事先定义。 其执行流程如下图,请注意各个变量的用途

    *List类型数据循环
    这个循环较为复杂,需要读者自己进一步探索,请焦急的读者略过此部分

    repeat with loopVariable in list
    --do something
    end repeat
    其中loopVariable无需事先定义,list是List型或者Record型数据。
    在循环体中,loopVariable将依次得到item 1 of list, item 2 of list....这样的指针(指向 list中的第几项)。
    请特别注意是指针!如果要得到list中的具体内容,使用contents of loopVariable来获得。
    在这个循环里,循环体将执行和list项目数量一样的次数。
    markeloff
    markeloff
    无尽星空

    帖子数 : 202
    积分 : 3367
    威望 : 0
    注册日期 : 2011-09-06
    年龄 : 30
    地点 : Singapore

    AppleScript语言初步 Empty Re: AppleScript语言初步

    Post by markeloff on 06/07/19, 09:25 am

    第四节 Considering/Ignoring语句(用于文本比较)
    此语句可以在比较文本时,指定忽略或考虑某一属性(如大小写,空格等等)。
    considering attribute1 but ignoring attribute2 --compare texts
    end considering
    上面代码含义是考虑attribute1但忽略attribute2
    其中 but ignoring attribute2可以省略;
    considering和ignoring位置可以互换,但是end considering也要相应改成end ignoring,
    当然你可以选择最简略的方式──只输入end,让编译器自己补上considering/ignoring。 attribute应该为下面列表中的任意一个

    case 大小写
    diacriticals 字母变调符号(如e和é)
    hyphens 连字符(-)
    numeric strings 数字化字符串(默认是忽略的),用于比较版本号时启用它
    punctuation 标点符号(,.?!等等,包括中文标点)
    white 空格
    markeloff
    markeloff
    无尽星空

    帖子数 : 202
    积分 : 3367
    威望 : 0
    注册日期 : 2011-09-06
    年龄 : 30
    地点 : Singapore

    AppleScript语言初步 Empty Re: AppleScript语言初步

    Post by markeloff on 06/07/19, 09:32 am

    第七章 基本用户交互

    第一节 简单对话框和输入框
    Display Dialog命令
    对于这个基本的对话框,在前面的章节中已经有所提及。它最简单的格式是:
    display dialog "对话框包含的内容"
    此命令将显示一个指定文字的、拥有确认和取消按钮的对话框,并且确认按钮是默认
    按钮──响应按下回车键(Enter/Return键)。
    接下来看看一个较为完整的对话框:
    display dialog "这是一个对话框" buttons {"好的", "明白"} default button "好的" with title "标题" with icon note giving up after 5

    具体的参数介绍如下:
     buttons 紧跟List型参数,指定对话框拥有的按钮名称,注意最多为三个
     default button 紧跟text型参数的某一个按钮名称,设定默认按钮
     with title 紧跟text,指定对话框的标题(省略时无标题)
     with icon 紧跟stop/note/caution中的一个或者file类型的路径,指定显示的图标
     giving up after 紧跟number型的整数,指定在number秒后自动消失对话框。


    带有输入框的对话框
    只需要添加default answer (+text)就可使 普通对话框升级为输入框。其中text可以用空文 本(直接键入两个引号);添加hidden answer true命令,可以隐藏输入文本(输入密码时 用)。此外,前面介绍的关于简单对话框的几 个参数仍然可用。
    对话框的返回值
    为了确定用户输入的文本和按下的按钮,我们需要通过对话框的返回值来实现。 display dialog命令的返回值总是一个Record,通常包含下面几项的一个或多个:
     text returned 用户输入的文本
     button returned 用户按下的按钮的名称(即显示的名称)
     gave up 是否自动超时消失(和giving up after命令相应)
    markeloff
    markeloff
    无尽星空

    帖子数 : 202
    积分 : 3367
    威望 : 0
    注册日期 : 2011-09-06
    年龄 : 30
    地点 : Singapore

    AppleScript语言初步 Empty Re: AppleScript语言初步

    Post by markeloff on 06/07/19, 09:39 am

    第二节 警告对话框

    警告对话框一定程度上非常接近简单对话框,来看一下它的特色语法:
    display alert "这是一个警告" message "警告的信息" as warning
    结果如左下图。
    其中: message参数指定了补充信息(在对话框中以小字显示),as warning/critical/ informational指定了对话框的重要性(表面上看起来就是图标不同)。此外可用简单对话框 中的buttons(指定按钮), give up after(自动超时消失)参数。

    第三节 列表选择对话框
    这是一个特殊对话框,提供了一个列表供用户选择。语法如下Sad结果如上右图)
    choose from list {"备选一", "备选二", "备选三"} with title "这是一个列表选择框" with prompt "请做 出选择!" default items {"备选二"} with empty selection allowed and multiple selections allowed

    参数说明:
     直接参数 紧跟List类型参数,包含所有备选项
     title 紧跟text,指定选择框的标题
     prompt 紧跟text,指定提示信息
     default items 紧跟List,指定默认选择的项目
     empty selection allowed 后紧跟true表示允许不选
     multiple selections allowed 后紧跟true表示允许多选

    第四节 文件选择对话框
    选取文件名称Choose File Name

    选取文件夹Choose Folder

    选取文件Choose File


    第五节 其他用户交互
    beep 1
    delay 2
    say "Hello"






    Sponsored content

    AppleScript语言初步 Empty Re: AppleScript语言初步

    Post by Sponsored content


      Current date/time is 21/11/19, 04:28 am