RPA自动化办公06——Uibot中的UB编程语言基础

news2025/1/11 2:54:51

参考:UB语言参考_UiBot开发者指南


虽然Uibot用命令就行,但是编程习惯会让程序员们更喜欢看源代码,有时候写源代码会更加方便,所有要学习UB的语言基础。

它很简单,和Python很像,下面简单了解一个各种基础语法。


注释

Dim定义一个变量,可以顺便赋值,如果需要换行可以打反斜杠:

Dim a= \
1

注释不是“#”号,而是:

// 这里是注释
/*
这里
也是
注释
*/

 


变量和数据类型

和一般语言差不多,UB有整形数,浮点数,布尔型,字符串等变量

a = 1           // a是整数型变量
a = &HFF        // a还是整数型变量
a = True        // a是布尔型变量。作为动态类型语言,a的类型可以随时变化 
a = FALSE       // a是布尔型变量,注意True和False都不区分大小写
a = 'UiBot'     // a是字符串型变量
a = "UiBot
RPA"            // a是字符串型变量,字符串中可以换行
a = null        // a是空值型变量,可以写为Null、NULL或null(不区分大小写)

定义一个变量的方式:

Dim 变量名

赋值方式:

Dim 变量名=值

定义多个变量

Dim 变量名1 = 值1, 变量名2
Dim 变量名1 = 值1, 变量名2 = 值2

定义常量:

Const 常量名=值, 常量名=值

常量和变量的唯一区别是,常量只能在定义时指定一次值,后面不允许再修改。

Dim a               // 定义名为a的变量,暂不赋值
Dim b = 1           // 定义名为b的变量,并赋值为1 
Dim c, d = True     // 定义名为c和d的两个变量,为d赋值True
Const e = 'UiBot'   // 定义名为e的常量,为其赋值为字符串’UiBot’
Const f             // 错误:常量必须有初始赋值

 


复合数据类型

UB里面两种复合数据类型,数组和字典,和Python的列表和字典是一样的。

数组:

Dim 数组变量 = [值1, 值2, 值3, 值4]

字典:

{ 名字1:值1, 名字2:值2, 名字3:值3 }

其中 名字 只能是字符串, 可以是任意类型的表达式。而不像Python,py里面的字典可以是任何形式。

索引方式和py是一样的:变量名[索引1],例如:

Dim 变量 = [486, 557, 256]                      // 变量可以用中文命名,初值是一个数组
a = 变量[1]                                     // 此时a被赋值为557
变量 = {"key1":486, "key2":557, "key3":256}     // 变量的类型改为一个字典
a = 变量["key1"]                                // 此时a被赋值为486

注意:在引用数组或字典中的元素时,数组的索引只能是整数类型,用0作为起始索引;字典的索引只能是字符串类型。如果未能正确的使用,会在运行时报错。

数组或者字典的引用是可以嵌套的,如果要引用数组中的数组(即多维数组),或者字典中的数组,可以继续在后面写新的方括号。范例:

变量 = {"key1":486, "key2":557, "key3":256}     // 变量的类型为一个字典
变量["key4"] = [235, 668]                       // 往字典中增加一个新值,该值是一个数组
//此时,字典中的内容为 {"key1":486, "key2":557, "key3":256, "key4":[235, 668]}
a = 变量["key4"][0]                             // 此时a被赋值为235

 


运算符

 


条件语句 

当条件满足时,会执行条件之后的语句块,否则,语句块不会执行。Else后面的语句块则会在前面所有条件都不满足的时候,才会执行。

If 条件1
    语句块1
ElseIf 条件2
    语句块2
Else
    语句块3
End If

 


选择分支语句

根据一定的条件,选择多个分支中的一个。先计算Select Case后面的表达式,然后判断是否有某个Case分支和这个表达式的值是一致的。如果没有一致的Case分支,则执行Case Else(如果有)后面的语句块。例如:

Select Case Time.Month()            // 取得当前时间中的月份
    Case 1,3,5,7,8,10,12            // 如果是1、3、5、7、8、10、12月
        DayOfMonth = 31             // 当月有31天
    Case 4,6,9,11                   // 如果是4、6、9、11月
        DayOfMonth = 30             // 当月有30天
    Case Else                       // 如果是其他(也就是2月)
        DayOfMonth = 28             // 当月有28天(不考虑闰年的情况)
End Select
TracePrint(DayOfMonth)

 


条件循环语句

主要是while循环

前置条件成立则循环

Do While 条件
    语句块
Loop

前置条件不成立则循环

Do Until 条件
    语句块
Loop

后置条件成立则循环

Do
    语句块
Loop While 条件

无限循环

Do
    语句块
Loop

 


计次循环语句

就是For循环,一般我都用这种循环方式

For 循环变量 = 起始值 To 结束值 Step 步长
    语句块
Next

例如:

Dim count = 0               // 定义变量count
For i=1 To 100              // 每次循环,变量i都会加1。这里变量i不需要定义
    count = count + i
Next
TracePrint(count)           // 这里会显示1+2+3+…+100的结果,即5050

 


遍历语句

循环数组或字典的对象,遍历循环语句可以用于处理数组、字典中的每一个元素。遍历循环语句有以下两种形式:

For Each 循环变量 In 数组或字典
    语句块
Next

或者:

For Each 循环变量1, 循环变量2 In 数组或字典
    语句块
Next

在这种形式的循环语句中,会自动遍历数组、字典中的每一个索引和值,并将其分别置入循环变量1循环变量2中,直到遍历完成为止。

和计次循环语句类似,在遍历循环语句中,循环变量可以不用Dim语句定义,直接使用,但在循环结束后就不能再使用了。

例如:

Dim days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] // 定义数组型变量days
Dim count = 0   
For Each i In days             // 每次循环,变量i的值分别为days中的每个值 
    count = count + i          // 把数组中的每个值依次加起来
Next
TracePrint(count)              // 这里会显示一年中每个月的天数的累加和,即365

 


跳出语句

主要是break和continue,用法和python一样

Dim days = { '一月':31, '二月':28, '三月':31, 
             '四月':30, '五月':31, '六月':30, 
             '七月':31, '八月':31, '九月':30, 
             '十月':31, '十一月':30, '十二月':31 }  // 定义字典型变量days

For Each i,j In days            // 每次循环,变量i, j分别为days中每个名字和值
    If j Mod 2 = 0              // 如果j是偶数
           Continue             // 结束本次循环,开始下一次循环
    End If
    TracePrint(i)               // 把days中的名字(其值不是偶数)显示出来
Next

 


函数定义

Function 函数名(参数定义1, 参数定义2)
    语句块
End Function

在函数定义中,要退出函数并返回,采用以下写法:

Return 返回值

例如

Function Add(x, y=1)        // 定义了两个参数的函数,第二个参数有默认值
    Return x + y            // 返回值为x+y的值
End Function

调用函数的格式如下:

返回 = 函数名(表达式1, 表达式2)

 


导模块

和py一样

Import 模块名

 


异常

如果不希望流程在发生异常的时候终止,可以采用以下语句对异常进行处理:

Try
    语句块
Catch 变量名
    语句块
Else
    语句块
End Try

如果在Try后面的语句块中发生了异常,会跳到Catch后面的语句块中执行。如果在Try语句块中没有发生异常,且定义了Else语句块(当然,也可以省略Else语句块),则会跳到Else语句块中执行。

Catch语句后面的变量名可以省略。如果不省略,可以不用Dim语句提前定义,当发生异常时,这个变量的值是一个字典,其中包含“File”、“Line”和“Message”三个字段,分别代表发生异常的文件名、发生异常的行号、异常包含的信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/194074.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

美团:前景乐观但风险巨大

来源:猛兽财经 作者:猛兽财经 增长势头强劲,已经扭亏为盈 过去几年,美团(03690)的收入一直在以两位数的速度在增长。 这一增长势头,到了2022年还在延续(美团的收入在2022年仍保持…

kob配置git环境与项目创建

配置git环境 1.安装Git Bash 如果是使用Linux和mac可以跳过第一步操作,如果使用windows需要安装Git Bash:Git Bash传送门安装过程中所有配置按照默认即可; 2.配置Git环境 2.0 创建秘钥:使用命令:“ssh-keygen”生成秘钥&#…

【Java基础】多线程学习

1.多进程和多线程 多进程: 是指操作系统能同时运行多个任务(程序)。 多线程: 是指在同一程序中有多个顺序流在执行。 实现: 在java中要想实现多线程,有两种手段,一种是继承Thread类&#xff…

1、环境安装

目录一、vscode插件二、设置代理GOPROXY三、gopls1 - vscode弹出插件支持安装2 - LSP3 - gopls四、vscode设置一、vscode插件 vscode插件商店 Go Team at Google:让vscode关联上go语言的开发环境 Outline Map:更好的代码大纲 二、设置代理GOPROXY…

操作系统进程同步

文章目录操作系统进程同步一.进程同步的基本概念1.两种形式的制约关系2.临界资源(critical resource)3.临界区(critical section)4.同步进制遵循的原则二.硬件同步机制1.关中断2.Test-and-Set 指令3.Swap指令实现进程互斥三.信号量…

mysql-视图的定义和简单使用

mysql-视图视图1. 视图的定义2.视图的创建规则和使用限制小结视图 1. 视图的定义 视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。 视图的一些常见应用: 重用SQL语句。 简化复杂的SQL操作。在编写查询后,可以…

c语言之链表

今天来介绍一下c语言如何手写一个单向链表,我们都知道链表是用来提高空间的利用效率的数据结构,其中包括了一个数据域和指针域,数据域用来存储数据,指针域用来指向下一个节点。数据结构如下 我们都知道数据结构最主要的是他的增删…

从底层入手搞定C++引用和内联函数

C引用和内联函数 文章目录C引用和内联函数一、引用1.1引用的概念1.1.1代码展示1.1.2图示1.2引用的特性1.3常引用1.4引用的使用场景1.5 传值、传引用效率比较1.6 引用和指针的区别二、内联函数2.1.内联函数的概念2.2内联函数的特性总结一、引用 首先我们来看一下引用的概念&…

每天10个前端小知识 【Day 2】

前端面试基础知识题 1. arguments 这种类数组&#xff0c;如何遍历类数组&#xff1f; for(var i 0, len arrayLike.length; i < len; i) { …… }使用ES6的 … 运算符&#xff0c;我们可以轻松转成数组。 function func(...arguments) { console.log(arguments); // […

蓝牙和射频技术的关系

蓝牙和射频技术的关系 提到蓝牙大家的比较熟悉&#xff0c;但射频技术很多都没有明白什么意思&#xff1f; 现简单介绍下他们的关系&#xff0c;让想了解射频技术的朋友更清楚。 1&#xff1a;定义&#xff1a; 射频&#xff08;RF&#xff09;是Radio Frequency的缩写&#xf…

Fluent的模型参数化(2)

前言&#xff1a;本文基于2023R1版本。在《Fluent的模型参数化&#xff08;1&#xff09;》中&#xff0c;对将Fluent模型进行参数化的方法进行了概述。本文主要基于已参数化的模型&#xff0c;进行参数分析的方法。基本概念&#xff1a;输入参数&#xff1a;工况的设置数据&am…

SpringMVC之入门案例

目录 一&#xff1a;概述 二代码实操&#xff1a; 步骤1:创建Maven项目&#xff0c;并导入对应的jar包 步骤2:创建控制器类 步骤3:创建配置类 步骤4:创建Tomcat的Servlet容器配置类 步骤5:配置Tomcat环境 步骤6:启动运行项目 步骤7:浏览器访问 知识点1&#xff1a;Co…

Cesium的设计结构与零基础入门

关于cesium我最近会写一系列的文章教程,带大家一步一步的从零开始学习cesium,看过我的文章的人都清楚我的讲课方式就是从一个小白的视角,从一个什么都不懂的视角,一点一点的循序渐进为大家讲清楚一个知识,好废话不多说我们开始! 首先在学习之前,你必须清楚cesium是个什…

DynaSLAM-7 DynaSLAM中双目运行流程(Ⅰ):加载Mask R-CNN网络部分MaskNet.cc

目录 1.执行流程 2. SegmentDynObject::SegmentDynObject 3. SegmentDynObject::GetSegmentation 1.执行流程 我们输入到命令行五个参数&#xff1a; stereo_kitti path_to_vocabulary path_to_settings path_to_sequence (path_to_masks) 分别是DynaSLAM双目例程中的可执行…

血氧仪/额温枪/电子体温计等 LED数显/数码管显示驱动控制电路(IC/芯片)-VK1S68C资料 SSO24小体积封装,FAE技术支持

产品品牌&#xff1a;永嘉微电/VINKA 产品型号&#xff1a;VK1S68C 封装形式&#xff1a;SSOP24 概述&#xff1a; VK1S68C是一种带键盘扫描接口的数码管或点阵LED驱动控制专用芯片&#xff0c;内部集成有3线串行接口、数据锁存器、LED 驱动、键盘扫描等电路。SEG脚接LED阳极…

Go 项目(一)

目录基础环境包管理编码规范命名规范注释import 规范错误处理RPC内置 RPC改协议改调用基础 基础部分参考这个系列接下来的这部分是对上面的更新和重构&#xff0c;更加深入理解框架部分 环境 基础环境&#xff0c;主要在Linux上搞&#xff1b;最主要是 docker&#xff0c;do…

Mac 可以玩游戏吗,有哪些游戏可以玩?

Mac 可以玩游戏吗&#xff0c;有哪些游戏可以玩&#xff1f; 新款的 MacBook Pro 入手有一段时间了&#xff0c;期间一直在熟悉 MacOS 系统及日常工作使用&#xff0c;一直都听说 MacBook 是工作本&#xff0c;不得不说工作使用确实很强&#xff0c;但用的久了就还是特别想折腾…

flex 布局:实现一行固定个数,超出强制换行(流式布局)

一、flex 布局基础知识 flex 布局的知识想必不用多说&#xff0c;一些常用的属性如下&#xff1a; 设置在父容器上的属性&#xff1a;display&#xff1a;flex&#xff0c; align-items, justify-content, flex-wrap。 设置在子容器上的属性&#xff0c;通过 flex: 1&#x…

最终一致分布式事务方案解析

业来主流的分布式事务的解决方案主要归位两大类&#xff1a;强一致性分布式事务和最终一致性分布式事务&#xff0c;本文不对强一致性分布式事务做过多描述&#xff0c;主要针对最终一致性方案解析。 根据笔者的工作经验来看&#xff0c;最终一致性方案适用用大部分互联网场景…

SpringBoot 2.7.8 自定义 Starter 自动配置

文章目录SpringBoot 2.7.8 自定义 Starter前言本次练习的代码仓库代码简要说明custom-springboot-starter-demo 的pom文件customer-starter 的pom文件test 的pom文件配置类配置信息SpringBoot 2.7.8 自定义 Starter 前言 前段时间&#xff0c;SpringBoot 出 3.x 版本了。听说…