【Uipath RPA Developer Foundation】Data Manipulation笔记
一、变量
创建变量有三种方式
- From the Variables panel – Open the Variables panel, select the ‘Create new Variable’ option, and fill in the fields as needed. When you need it, provide its name in the Designer panel or in the desired Properties field.
- From the Designer panel – Drag an activity with a variable field visible (i.e. ‘Assign’) and press Ctrl+K. Name it and then check its properties in the Variables panel.
- From the Properties panel – In the Properties panel of the activity, place the cursor in the field in which the variable is needed (i.e. Output) and press Ctrl+K. Name it and then check its properties in the Variables panel.
好的创建变量:
变量名用驼峰式命名。
设置好变量的作用域,将多个变量不必要地全局化可能会导致效率问题以及混淆的可能性。
二、参数:
参数与变量非常相似——它们动态地存储数据,它们具有相同的数据类型,并且它们支持相同的方法。不同之处在于它们在工作流之间传递数据,并且它们有一个额外的属性——数据从哪个方向传递到哪个方向。方向可以是进,出和进/出。
三、数据类型
- Numeric (category)
Int32 - System.Int32 (signed integers): 10, 299, -100, 0x69
Long - System.Int64 (long integers): 5435435343O, -11332424D
Double - System.Double (allows decimals, 15-16 digits precision): 19.1234567891011
- Boolean
- Date and Time (category)
DateTime:用于存储特定的时间坐标(mm/dd/yyyy hh:mm:ss)。这种变量提供了一系列特定的处理方法(减去天数,计算今天剩下的时间,等等)。例如,要获得当前时间,可以将表达式赋值为DateTime.Now是DateTime类型的变量。
常用的操作方法:
获取今天日期:DateTime.Today,Datetime.Now.Month
获取星期:DataTime.DayOfWeek.ToString
字符串转日期类型:DateTime.ParseExact(InputDate, "dd.MM.yyyy", nothing) 将匹配字符中格式为“dd.MM.yy”的日期字符串转为的日期类型,转后的日期格式为你本地系统设置的格式
TimeSpan:用于存储关于持续时间的信息(dd:hh:mm:ss)。您可以使用它来度量DateTime类型的两个变量之间的持续时间。例如,您可以在一个变量(类型为DateTime)中存进程开始时的时间,在另一个变量(类型为DateTime)中存结束时的时间,并将差异存储在一个类型为TimeSpan的变量中。
myTimeSpan = DateTime1.Subtract(DateTime2)//存储两个日期之间的差异 天数 小时数 分钟数 秒数 myTimeSpan.Days//相差天数
- String
string常用的数据操作方法
concat
连接两个指定对象的字符串表示形式
表达式:String.Concat (VarName1,VarName2)
Contains
检查指定的子字符串是否出现在字符串中。返回真或假
表达式:VarName.Contains("text")
Format
将对象的值转换为字符串(并将其插入到另一个文本中)
表达式:String.Format(“{0} is {1}”, VarName1, VarName2)
IndexOf
返回字符串中某个字符第一次出现的从零开始的索引
Expression: VarName1.IndexOf(“a”)
Join
连接集合中的元素并将它们显示为字符串
Expression: String.Join(“|”, CollVarName1)
Replace
替换字符串中子字符串的所有匹配项
Expression: VarName.Replace (“original”, “replaced”)
Split
使用指定的分隔符将字符串拆分为子字符串
Expression: VarName.Split(“|“c)(index)
Substring
使用起始索引和长度从字符串中提取子字符串
Expression: VarName1.Substring(startIndex, length)
首字母大写:StrConv(VarName1, VbStrConv.ProperCase);
- Collection集合
这个类别重新统一所有的对象集合,每个对象通过其在集合中的索引进行标识。集合主要用于处理和处理复杂数据。一些最常见的集合是:
1.Array - ArrayOf<T> or System.DataType[]:用于存储相同数据类型的多个值。大小(对象的数量)在创建时定义,是用于存储多个对象的固定大小的结构;
2.List - System.Collections.Generic.List<T>: 用于存储多个相同数据类型的值,就像数组一样。与数组不同,它们的大小是动态的,List允许我们添加、插入和删除项。;
Listi定义方式:
List可以存储大量的元素——名称、数字、时间坐标和许多其他元素。列表提供了具体的操作方法,如:
添加和删除项List.Add()
搜索元素
循环遍历项目(并对每个项目执行某些操作)
排序的对象List.Sort List.Reverse反转
提取项并将其转换为其他数据类型。
合并两个List到一个新List:Enumerable.Concat(List1.AsEnumerable,List2.AsEnumerable).ToList
获取前3个Item:List.GetRange(0,3) 参数1:起始位置;参数2:获取个数
3.Dictionary - System.Collections.Generic.Dictionary<TKey, TValue>: 用于以(key, value)对的形式存储对象,其中两者都可以是单独的数据类型。
字典(或Dictionary)是(键,值)对的集合,其中键是唯一的。想想手机中的地址簿,每个名字都有相应的数据(电话号码、电子邮件)。
在实例化变量时,必须选择键和值的数据类型。字典中的数据类型可以是任何受支持的变量(例如,包括字典)。
定义:
Dictionary<String, List<String>>
Dictionary<String,Dictionary<String,Double>>
最常与字典相关的操作有:
添加和删除(键、值)对 VarName.Add(Key, Value) VarName.Remove(Key)
检索与键关联的值
VarName.Item(Key) 通过键返回字典项
VarName.Count 返回字典项数
VarName.ContainsKey(Key)检查具有给定键的项是否存在于字典中,并返回一个布尔值结果
VarName.TryGetValue(Key, Value) 检查字典中是否存在具有给定键的项,并返回一个布尔值结果,如果找到则返回值
为现有键重新分配新值 VarName(Key) = 新值
获取字典中所有Value值到List中,可用于遍历Value值:VarName.Values
练习:给出一个包含年份和名称的输入字典,请计算每个获胜者的胜利次数,并打印所有获胜者的名字和相应的胜利次数。
- GenericValue
在开发自动化过程时,会出现您不确定将检索什么类型的数据的情况。为了找到答案,您需要使用一个足够广泛的变量运行一些测试,该变量可以捕获任何类型的输入。这就是我们建议临时使用GenericValue变量的地方。
使用场景:
将逐列比较同一个Excel文件的两个版本。列在数据类型方面是不同的,唯一相关的是哪些条目发生了变化
请记住,GenericValue变量最多是一个临时解决方案。当数据类型应该是什么变得清晰时,我们强烈建议您将其更改为特定的类型。
四、正则表达式
Matches:搜索输入字符串中的所有匹配项并返回所有成功匹配项。
IsMatch:指示指定的正则表达式是否在指定的输入字符串中找到匹配项。
Replace:将匹配正则表达式模式的字符串替换为指定的替换字符串。
举例:
1.从包含多个地址的字符串中检测所有街道号码和名称。
输出所有匹配项。
address="275 S Wall St., Wilmington, OH, 45177 - Virginia USA, 1223 Pamela St., Leesburg, FL, 34748 - 1022 Lincoln Ave, Duquesne, PA, 15110 - US, 1295 N Opdyke Rd, Auburn Hills, MI, 48326 - 19 Orbit Dr, Enfield, CT, 06082 "
正则表达式 Matachs \b\d{1,8}(-)?[a-z]?\W[a-z|\W|\.]{1,}\W(road|drive|avenue|boulevard|circle|street|lane|way|rd\.|st\.|dr\.|ave\.|blvd\.|cir\.|ln\.|rd|dr|ave|blvd|cir|ln)
2.输入字符串,判断:
最小长度:8个字符;以大写字母开头;最多20个字符
^([A-Z][\w]{7,20})*$
3.替换指定文本内容
给定字符串:"Hello Mr <first_name> <last_name>, we would like to invite you to our opening event next week on <day_of_week>. Please confirm by the end of current week.“
InputData.Replace("<first_name>",FirstName.Trim)
4.从字符串中提取电子邮件地址(不使用正则表达式)
给定字符串:“Please use the following address to contact me john.doe@localcompany.com, it's the company email"
IndexTextToFind = InputData.IndexOf("@") EmailAddress_Part1 = InputData.Substring(0,IndexTextToFind) EmailAddress_Part1 = EmailAddress_Part1.Substring(EmailAddress_Part1.LastIndexOf(" ")) EmailAddress_Part2 = InputData.Substring(IndexTextToFind +1) TemporaryIndex=EmailAddress_Part2.IndexOf(" ") EmailAddress_Part2=InputData.Substring(IndexTextToFind + 1, TemporaryIndex ) String.Format("The email address is {0}@{1} ", EmailAddress_Part1, EmailAddress_Part2)
使用正则表达式:Uipath有写好的,可以直接用,下拉选择Email
((?>[a-zA-Z\d!#$%&'*+\-\/=?^_`{|}~]+\x20*|"((?=[\x01-\x7f])[^"\\]|\\[\x01-\x7f])*"\x20*)*(?<angle><))?((?!\.)(?>\.?[a-zA-Z\d!#$%&'*+\-\/=?^_`{|}~]+)+|"((?=[\x01-\x7f])[^"\\]|\\[\x01-\x7f])*")@(((?!-)[a-zA-Z\d\-]+(?<!-)\.)+[a-zA-Z]{2,}|\[(((?(?<!\[)\.)(25[0-5]|2[0-4]\d|[01]?\d?\d)){4}|[a-zA-Z\d\-]*[a-zA-Z\d]:((?=[\x01-\x7f])[^\\\[\]]|\\[\x01-\x7f])+)\])(?(angle)>)
DataTAble
最大的行数:行数限制为16,777,216。