HALCON数据结构之字符串
1.1 String字符串的基本操作
*将数字转换为字符串或修改字符串
*tuple_string (T, Format, String) //HALCON语句
*String:= T $ Format //赋值操作*Format string 由以下四个部分组成:
*<flags><field width>.<precision><conversion 字符>*1. flags 标志*1.1 字符'-'
*转换的结果是在字段中左对齐。*1.2 字符'+'*带符号转换的结果总是以符号'+'或'-'开头。*1.3 <space>*如果带符号转换的第一个字符不是符号,则在结果前面加一个空格字符。
*这意味着如果空格标志和+标志同时出现,则忽略空格标志。* 1.4 '#'*该被转换为“替代形式”。对于d和s转换,此标志不起作用。* 1.5 '0'*该值应该是零填充。对于d、o、u、x、x、e、e、f、f、g和g转换,转换后的值在左侧用零填充,而不是空白。如果同时出现0和-标志,则忽略0标志。如果用数字转换(d、o、u、x和x)给出精度,则忽略0标志。* 2. field width*一个可选的十进制数字字符串,用于指定最小字段宽度。*对于输出字段,如果转换值的字符少于字段宽度,则在字段宽度的左侧填充(如果给出了左侧调整标志-,则在右侧填充)。* 3. precision*指定d、o、x或x转换时出现的最小位数(该字段用前导零填充),e和f转换时出现在基数字符之后的位数,g转换时有效位数的最大数目,或s转换时从字符串打印的最大字符数。* 4. conversion characters*转换字符表示要应用的转换类型* 4.1 d,u,o,x,X*整数参数以有符号十进制(d)、无符号十进制(u)、无符号八进制(o)或无符号十六进制(x和x)的形式打印。x转换使用数字和字母0123456789abcdef, x转换使用数字和字母0123456789ABCDEF。* 4.2 f*浮点数参数以[-]dddrddd格式的十进制形式打印,其中基数字符r后面的位数等于精度规范。
*如果从参数中省略精度,则输出六位数字;如果精度显式为0,则不显示基数。* 4.3 e,E*浮点数参数以[-]drdddepmdd格式打印,其中基数字符前面有一位数字,后面的位数等于精度。
* 4.4 g,G*浮点数参数以f格式打印(对于G转换字符,则以e格式打印),精度指定有效数字的个数。
* 4.5 s*参数被视为一个字符串,字符串中的字符将被打印,直到字符串的末尾或达到参数的精度规范所指示的字符数。* 4.6 b*类似于s转换说明符,不同之处是字符串可以包含反斜杠转义序列,然后将其转换为它们所表示的字符。*示例1:将数字转换为字符串
*
* ' 23.00'
tuple_string (23, '10.2f', String)
String := 23$'10.2f'
*
* '23.00 '
tuple_string (23, '-10.2f', String)
String := 23$'-10.2f'
*
* '4.0000000'
tuple_string (4, '.7f', String)
String := 4$'.7f'
*
* ' +1234.568'
tuple_string (1234.56789, '+10.3f', String)
String := 1234.56789$'+10.3f'
*
* 'ff'
tuple_string (255, 'x', String)
String := 255$'x'
*
* 'FF'
tuple_string (255, 'X', String)
String := 255$'X'
*
* '00255'
tuple_string (0xff, '.5d', String)
String := 0xff$'.5d'*示例2:修改字符串
*
* ' total'
tuple_string ('total', '10s', String)
String := 'total'$'10s'
*
* 'total '
tuple_string ('total', '-10s', String)
String := 'total'$'-10s'
*
* 'tot '
tuple_string ('total', '-10.3s', String)
String := 'total'$'-10.3s'*示例3:将整数按格式转换为字符串d1 := 12345$'#o' //8进制,0为前缀
d2 := 12345$'#x' //16进制,0x为前缀,3039为赋值
d3 := 12345$'#X' //16进制,0X为前缀,3039为赋值
d4 := 12345$'#f' //double型,默认保留小数点后六位d5 := 12345$'#g' //使数字始终保持六位,不足补零
d6 := 12345$'#G' //使数字始终保持六位,不足补零
d7 := 12345$'#e' //转换成科学计数
d8 := 12345$'#E' //转换成科学计数d9 := 12345$'6' //小于六位时,文本右对齐,大于不影响
d10 := 12345$'-6' //小于六位时,文本左对齐,大于不影响
d11 := 12345$'.6' //小于六位时,在左边补零,大于不影响
d12 := 12345$'10.5' //小于10位时,文本右对齐;小于5位则在左边补零,大于不影响*示例4:修改字符串
s1 := 'HALCON'$'10' //文本右对齐
s2 := 'HALCON'$'-10' //文本左对齐
1.2 String字符串的转换
*1、将一个元组转换为字符串元组tuple_string ([1,2,3,4.0,5.0,6.0], '.3f', String1)
String1:= [1,2,3,4.0,5.0,6.0] $ '.1f'*2、检查元组中的元素(整数、实数和字符串)是否表示数字tuple_is_number (String1, IsNumber1)
IsNumber1:=is_number(String1)*3、将输入元组转换为数字元组tuple_number (String1, Number1)
Number1:=number(String1)*4、将元组中长度为1的字符串元素转换为它们相应的ASCII元组String2:=['1', '2', '3', '4', '5', '6']
tuple_ord (String2, Ord1)
Ord1:= ord(String2)*5、将一个字符串元组转换为对应的ASCII整数String3:=['1a', '2b', '3c', '4d', '5e', '6f']
tuple_ords (String3, Ords1)
Ords1:= ords(String3)*6、根据ASCII码将整型元组转换为字符元组(每个元素长度为1)tuple_chr (Ord1, Chr1)
Chr1:=chr(Ord1)*7、根据ASCII码将整型元组转换为字符元组tuple_chrt (Ords1, Chrt1)
Chrt1:=chrt(Ords1)
1.3 String字符串的分割
String1:='www.277.558.com'
String2:= ['alpha:1', 'beta:2', 'gamma:3'] *1、使用预定义的分隔符将字符串拆分为子字符串(分割字符在原字符串中被删除)tuple_split (String1, '.', Substrings1)
tuple_split (String2, ':', Substrings2)tuple_split (String2, 'a:', Substrings3)
tuple_split (String2, ':123', Substrings3)Substrings3:=split(String2, ':123')*2、从输入的字符串元组中截取出第0-n位置处的字符,并作为新的字符串元组返回tuple_str_first_n (String1,6 , Substring4)
tuple_str_first_n (String2,[0,1,2] , Substring5)
Substring5:=str_firstn(String2,[0,1,2])*3、从输入的字符串元组中截取出第n-最后位置处的字符,并作为新的字符串元组返回tuple_str_last_n (String1,6 , Substring6)
tuple_str_last_n (String2,[6,5,6] , Substring7)
Substring7:=str_lastn(String2,[6,5,6])
1.4 String字符串的搜索
String1:='www.111.www.277.558.com'
String2:= ['alpha:1', 'beta:2', 'gamma:3'] *1、获取字符串元组中每个字符串的长度tuple_strlen (String1, Length1)
tuple_strlen (String2, Length2)
Length2:=strlen(String2)*2、前向搜索字符串元组中的字符,并输出对应的位置*在输入元组的字符串元素中前向搜索输入元组ToFind的字符,并输出对应的位置tuple_strchr (String1,'w' , Position1)
tuple_strchr (String1,['2','5','c'] , Position2)tuple_strchr (String2,'a' , Position3)
tuple_strchr (String2,['1','2','3'] , Position4)Position4:=strchr(String2,['1','2','3'])*3、前向搜索字符串元组中的字符串,并输出对应的位置*在输入元组的字符串元素中前向搜索输入元组ToFind的字符串,并输出对应的位置tuple_strstr (String1,'277' , Position5)
tuple_strstr (String1,['www','257','588','com'] , Position6)tuple_strstr (String2,'a:' , Position7)
tuple_strstr (String2,['a:1','a:2','a:3'] , Position8)Position8:=strstr(String2,['a:1','a:2','a:3'])*4、后向搜索字符串元组中的字符,并输出对应的位置*在输入元组的字符串元素中后向搜索输入元组ToFind的字符,并输出对应的位置*后向搜索,即从最后一个字符到第一个字符检查每个字符串tuple_strrchr (String1,'w' , Position9)
tuple_strrchr (String1,['2','5','c'] , Position10)tuple_strrchr (String2,'a' , Position11)
tuple_strrchr (String2,['1','2','3'] , Position12)Position12:=strrchr(String2,['1','2','3'])*5、后向搜索字符串元组中的字符串,并输出对应的位置*在输入元组的字符串元素中后向搜索输入元组ToFind的字符串,并输出对应的位置*后向搜索,即从最后一个字符到第一个字符检查每个字符串tuple_strrstr (String1,'277' , Position13)
tuple_strrstr (String1,['www','257','588','com'] , Position14)tuple_strrstr (String2,'a:' , Position15)
tuple_strrstr (String2,['a:1','a:2','a:3'] , Position16)Position16:=strrstr(String2,['a:1','a:2','a:3'])
1.5 String字符串的正则表达式
1.5.1 测试字符串是否匹配正则表达式
*测试字符串是否匹配正则表达式
*tuple_regexp_test( : : Data, Expression : NumMatches)*允许ab重复3次
tuple_regexp_test ('ababab', '(ab){3}', NumMatches1)*允许ab重复3次
tuple_regexp_test ('abababa', '(ab){3}', NumMatches2)*开头匹配ab,结尾匹配ab,并且重复3次
tuple_regexp_test ('ababab', '^(ab){3}$', NumMatches3)*匹配失败
tuple_regexp_test ('abababa', '^(ab){3}$', NumMatches3)
1.5.2 使用正则表达式处理文件名
get_system ('image_dir', HalconImages)
get_system ('operating_system', OS)
if (OS{0:2} == 'Win')tuple_split (HalconImages, ';', HalconImagesSplit)
elsetuple_split (HalconImages, ':', HalconImagesSplit)
endif
list_files (HalconImagesSplit[0], ['files', 'follow_links'], Files)*选择后缀是png文件
tuple_regexp_select (Files, '\\.png$', FilesPNG)*删除所有以数字结尾的文件名
tuple_regexp_select (FilesPNG, ['\\d\\.png$', 'invert_match'], FilesNoDigit)*提取不带斜杠的文件名(剥离目录部分)
tuple_regexp_match (FilesNoDigit, '[^/\\\\]*.png', ShortNames)*转换文件名的后缀名
tuple_regexp_replace (ShortNames, '(.*)\\.png$', 'out_$1.jpg', ConvertedNames)*统计包含字符'-'或下划线的文件数量
tuple_regexp_test (ShortNames, '_|-', NumCombined)*再次统计以数字结尾的文明名的文件数量并计算百分比
if (|ShortNames| > 0)Result := 100.0 * regexp_test(ShortNames,'\\d') / |ShortNames| + '% of PNG file names contain a digit'
endif
* Return letters 2-n of all files starting with 'a'*选择以a为开头的元素['angio-part.png', 'atoms.png', 'autobahn.png']
Selection1 := regexp_select(ShortNames, '^a')
Match1:= regexp_match(Selection1,'^a(.*)')*返回所有以'a'开头的文件名中的第2-n个字母
Result := regexp_match(regexp_select(ShortNames,'^a'),'^a(.*)')* Data =~ Expression 是regexp_test的缩写,用于布尔表达式
if (ShortNames =~ '^z')Result := 'A filename starting with z exists'
endif
1.5.3 使用正则表达式提取子字符串
*使用正则表达式提取子字符串
*tuple_regexp_match( : : Data, Expression : Matches)* 正则表达式含义:* ^ 匹配字符串开头;
* $ 匹配字符串的结尾(允许尾部换行符);
* . 匹配除换行符以外的任何字符;
* [...] 匹配括号中列出的任何字符。如果第一个字符是'^',这将匹配除括号以内的其他任何字符。* * 允许前面的文字或组0次或者多次重复;
* + 允许1次或者多次重复;
* ? 允许0次或者1次重复;
* {n,m} 允许 n 到 m 次重复;
* {n} 只允许n次重复; * ( ) 对子模式进行分组,并创建一个捕获组;
* (?:)分组子模式而不创建捕获组; * \ 转义字符
* \d,\D 匹配一个数组
* \w,\W 匹配字母、数字或下划线
* \s,\S 匹配空白字符
* \b,\B 匹配单词边界 * 正则表达式基础用法:*a、x*是从字符串开头开始匹配的,x*的第二次匹配是从第一次匹配到的字符串之后的子字符串开始匹配的;
*b、x(.*)提取的是x之后的子字符串;x1(.*)x2 :获取x1-x2之间的字符串;
*c、x.是从前向后查找,匹配的结果是'x'+'x的后一个字符'(x查找的位置不是最后一个字符);若x查找的位置是最后一个字符,则匹配的结果为''
*d、.x是从后向前查找,匹配的结果是'x的前一个字符'+'x'(x查找的位置不是第一个字符);若x查找的位置是第一个字符,则匹配的结果为''5*1、表达式 ^x * 提取开头的字符串'ab'
tuple_regexp_match ('12abba', '^12', Result1)*2、表达式 x * 提取字符串'b'
tuple_regexp_match ('abba', 'b', Result2) *3、表达式 x$ * 提取结尾的字符串'a'
tuple_regexp_match ('abba5', '5$', Result3) *4、表达式 x** 提取字符串'a'
tuple_regexp_match ('abba', 'a*', Result4) * 提取字符串''
tuple_regexp_match ('abba', 'b*', Result5) * 提取字符串'abb'
* 剩下的字符在剩余的字符串中匹配
tuple_regexp_match ('abba', 'ab*', Result6) * 字符'a'在字符串的第一个位置被匹配到
tuple_regexp_match ('abba', 'a', Result61) //'a'* 字符'b*'在剩余字符串中再次查找
tuple_regexp_match ('bba', 'b*', Result62) //'bb'* 提取字符串'b'
tuple_regexp_match ('abba', 'ba*', Result7) *字符'b'在字符串的第二个位置被找到
tuple_regexp_match ('abba', 'b', Result71) // 'b'*字符'a*'在剩余字符串中匹配再次查找
tuple_regexp_match ('ba', 'a*', Result72) // ''* 5、表达式 x1*x2** 提取字符串'abb'
tuple_regexp_match ('abba', 'a*b*', Result8)
tuple_regexp_match ('abba', 'a*', Result81) //'a'
tuple_regexp_match ('bba', 'b*', Result82) //'bb'* 提取字符串'a'
tuple_regexp_match ('abba', 'b*a*', Result9)
tuple_regexp_match ('abba', 'b*', Result91) //''
tuple_regexp_match ('abba', 'a*', Result92) //'a'* 6、表达式 x1+x2** 提取字符串'bba'
tuple_regexp_match ('abba', 'b+a*', Result10)
tuple_regexp_match ('abba', 'b+', Result101) //'bb'
tuple_regexp_match ('a', 'a*', Result102) //'a'*7、表达式 x.* 提取字符串'ab'
tuple_regexp_match ('abba', 'a.', Result111)* 提取字符串'bb'
tuple_regexp_match ('abba', 'b.', Result112)* 提取字符串'abb'
tuple_regexp_match ('abba', 'ab.', Result113)* 提取字符串''
tuple_regexp_match ('abba', 'ba.', Result114)*7、表达式 .x* 提取字符串'ba'
tuple_regexp_match ('abba', '.a', Result115)* 提取字符串'ab'
tuple_regexp_match ('abba', '.b', Result116)* 提取字符串''
tuple_regexp_match ('abba', '.ab', Result117)* 提取字符串'bba'
tuple_regexp_match ('abba', '.ba', Result118)*8、表达式[x]** 提取字符串'a'
tuple_regexp_match ('abba', '[a]*', Result121)* 提取字符串''
tuple_regexp_match ('abba', '[b]*', Result122)* 提取字符串'abba'
tuple_regexp_match ('abba', '[ab]*', Result123) * 提取字符串'abba'
tuple_regexp_match ('abba', '[ba]*', Result124)*9、表达式x(.*)* 提取字符串['mg123', 'mg124']
tuple_regexp_match (['img123','img124'], 'i(.*)', Result131)* 提取字符串['g123', 'g124']
tuple_regexp_match (['img123','img124'], 'im(.*)', Result132)* 提取字符串['123', '124']
tuple_regexp_match (['img123','img124'], 'img(.*)', Result133)* 提取字符串['23', '24']
tuple_regexp_match (['img123','img124'], 'img1(.*)', Result134)* 提取字符串['3', '4']
tuple_regexp_match (['img123','img124'], 'img12(.*)', Result135)* 提取字符串['', '']
tuple_regexp_match (['img123','img124'], 'img123(.*)', Result136)*10、表达式 x1(.*)x2 :获取x1-x2之间的字符串* 提取字符串['110', '111', '112']
tuple_regexp_match (['img110.bmp','img111.bmp','img112.bmp'], 'img(.*).bmp', Result137)*11、表达式 x(.*)\\.(.*) :以'.'为分割分组 x(.*)的结果* 提取字符串 ['001','bmp']
tuple_regexp_match ('mydir/img001.bmp', 'img(.*)\\.(.*)', Result14)
1.5.4 使用正则表达式替换子字符串
*使用正则表达式替换子字符串
*tuple_regexp_replace( : : Data, Expression, Replace : Result)*匹配失败,在字符串的前面添加'x'
tuple_regexp_replace ('abba', 'b*', 'x', Result1)*将第一个小'b' 替换为'x'
tuple_regexp_replace ('abba', 'b', 'x', Result2) *将所有的小'b' 替换为'x'
tuple_regexp_replace ('abba', ['b', 'replace_all'], 'x', Result3) *替换为['outimg10.bmp.txt', 'outimg11.bmp.txt', 'outimg12.bmp.txt']
tuple_regexp_replace(['img10.bmp','img11.bmp','img12.bmp'], \'img(.*).bmp', 'out$0.txt', Result4)*替换为['out10.txt', 'out11.txt', 'out12.txt']
tuple_regexp_replace(['img10.bmp','img11.bmp','img12.bmp'], \'img(.*).bmp', 'out$1.txt', Result5)*替换为['out.txt', 'out.txt', 'out.txt']
tuple_regexp_replace(['img10.bmp','img11.bmp','img12.bmp'], \'img(.*).bmp', 'out$2.txt', Result6)*提取的字符串['1234567', '2345678', '3456789']
tuple_regexp_match (['SN/1234567-X', 'SN/2345678-Y', 'SN/3456789-Z'], 'SN/(\\d{7})-([A-Z])', Matches1)*替换为['Product Model X, Serial Number 1234567', 'Product Model Y, Serial Number 2345678', 'Product Model Z, Serial Number 3456789']
tuple_regexp_replace (['SN/1234567-X', 'SN/2345678-Y', 'SN/3456789-Z'], 'SN/(\\d{7})-([A-Z])', 'Product Model $2, Serial Number $1', Result7)*提取的字符串['01', '06']
tuple_regexp_match (['01/04/2000', '06/30/2007'], '(\\d{2})/(\\d{2})/(\\d{4})', Matches2)
tuple_regexp_replace (['01/04/2000', '06/30/2007'], '(\\d{2})/(\\d{2})/(\\d{4})', 'Day: $2, Month: $1, Year: $3', Result8)
1.5.5 选择匹配正则表达式的元组元素
*选择匹配正则表达式的元组元素
*tuple_regexp_select( : : Data, Expression : Selection)get_system ('image_dir', HalconImages)
get_system ('operating_system', OS)
if (OS{0:2} == 'Win')tuple_split (HalconImages, ';', HalconImagesSplit)
elsetuple_split (HalconImages, ':', HalconImagesSplit)
endiflist_files (HalconImagesSplit[0], ['files', 'follow_links'], Files)*返回所有不包含字符串'pcb'的文件名
tuple_regexp_select (Files, ['pcb','invert_match'], Result2)*返回元组元素 ['a.png','c.bmp']
tuple_regexp_select (['.','..','mydir','a.png','b.txt','c.bmp','d.dat'], \'.(bmp|png)', Result1)
相关文章:
HALCON数据结构之字符串
1.1 String字符串的基本操作 *将数字转换为字符串或修改字符串 *tuple_string (T, Format, String) //HALCON语句 *String: T $ Format //赋值操作*Format string 由以下四个部分组成: *<flags><field width>.<precision><conversion 字符&g…...

string模拟优化和vector使用
1.简单介绍编码 utf_8变长编码,常用英文字母使用1个字节,对于其它语言可能2到14,大部分编码是utf_8,char_16是编码为utf_16, char_32是编码为utf_32, wchar_t是宽字符的, utf_16是大小为俩个字节&a…...
Go-知识依赖GOPATH
Go-知识依赖GOPATH 1. 介绍2. GOROOT 是什么3. GOPATH 是什么4. 依赖查找5. GOPATH 的缺点1. 介绍 早期Go语言单纯地使用GOPATH管理依赖,但是GOPATH不方便管理依赖的多个版本,后来增加了vendor,允许把项目依赖 连同项目源码一同管理。Go 1.11 引入了全新的依赖管理工具 Go …...
PyTorch 中 reshape 函数用法示例
PyTorch 中 reshape 函数用法示例 在 PyTorch 中,reshape 函数用于改变张量的形状,而不改变其中的数据。下面是一些关于 reshape 函数的常见用法示例。 基本语法 torch.reshape(input, shape) # input: 要重塑的张量。 # shape: 目标形状࿰…...
安全光幕的工作原理及应用场景
安全光幕是一种利用光电传感技术来检测和响应危险情况的先进设备。其工作原理基于红外线传感器,通过发射红外光束并接收反射或透射光束来形成一道无形的屏障。以下是对安全光幕工作原理和应用场景的介绍: 工作原理 发射器与接收器:安全光幕通…...

《深度学习》OpenCV LBPH算法人脸识别 原理及案例解析
目录 一、LBPH算法 1、概念 2、实现步骤 3、方法 1)步骤1 • 缩放 • 旋转和平移 2)步骤2 二、案例实现 1、完整代码 1)图像内容: 2)运行结果: 一、LBPH算法 1、概念 在OpenCV中,L…...

数据结构之顺序表——动态顺序表(C语言版)
静态顺序表我们已经实现完毕了,下来我们实现一下动态顺序表 静态链接:数据结构之顺序表——动态顺序表(C语言版) 首先来了解一下两个顺序表的差别 一、内存管理的灵活性 动态分配与释放:动态顺序表能够在运行时根据需要动态地分配和释放内存…...
Python 网络爬虫入门与实战
目录 1 引言 2 网络爬虫基础知识 2.1 什么是网络爬虫 2.2 爬虫的工作原理 2.3 爬虫的应用场景 3 Python 爬虫环境搭建 3.1 安装 Python 3.2 安装必要的库 4 使用 Requests 库进行基本爬虫 4.1 发送 GET 请求 4.2 发送 POST 请求 4.3 处理响应 5 使用 BeautifulSoup…...

成都睿明智科技有限公司电商服务可靠不?
在这个短视频风起云涌的时代,抖音不仅成为了人们娱乐消遣的首选平台,更是众多商家竞相追逐的电商新蓝海。成都睿明智科技有限公司,作为抖音电商服务领域的佼佼者,正以其独到的洞察力和专业的服务,助力无数品牌在这片沃…...

fmql之Linux Uart
正点原子第48章。 串口收发测试 正点原子教程 RS232和RS485的串口收发测试是一样的。 // 设置串口波特率为115200 stty -F /dev/ttyPS1 ispeed 115200 ospeed 115200 cs8// 发送字符串 echo "www.openedv.com" >/dev/ttyPS1// 接收数据 cat /dev/ttyPS1 fmql测…...

【火山引擎】调用火山大模型的方法 | SDK安装 | 配置 | 客户端初始化 | 设置
豆包 (Doubao) 是字节跳动研发的大规模预训练语言模型。 目录 1 安装 2 配置访问凭证 3 客户端初始化 4 设置地域和访问域名 5 设置超时/重试次数 1 安装 通过pip安装PYTHON SDK。 pip install volcengine-python-sdk[ark] 2 配置访问凭证 获取 API Key 访问凭证具体步…...

前端实现下载功能汇总(下载二进制流文件、数组下载成csv、将十六进制下载成pcap、将文件下载成zip)
前言:汇总一下做过的下载功能,持续补充中 一、将后端传过来的二进制流文件下载(需要提取headers里面的文件名) const { herders,data }res; // 创建下载链接元素 const link document.createElement("a");// 创建 Bl…...

iLogtail 开源两周年:UC 工程师分享日志查询服务建设实践案例
作者:UC 浏览器后端工程师,梁若羽 传统 ELK 方案 众所周知,ELK 中的 E 指的是 ElasticSearch,L 指的是 Logstash,K 指的是 Kibana。Logstash 是功能强大的数据处理管道,提供了复杂的数据转换、过滤和丰富…...
【MySQL】入门篇—基本数据类型:NULL值的概念
在关系数据库中,NULL值是一个特殊的标记,表示缺失或未知的值。 NULL并不等同于零(0)或空字符串(),它表示一个字段没有任何值。 这一概念在数据库设计和数据管理中至关重要,因为它影…...
Java设计模式10 - 观察者模式
观察者模式 观察者模式也叫作发布-订阅模式,也就是事件监听机制。观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态上发生变化时,会通知所有观察者对象,使他们能够自…...

LabVIEW示波器通信及应用
基于LabVIEW平台开发的罗德与施瓦茨示波器通信与应用系统实现了示波器的远程控制及波形数据的实时分析,通过TCP/IP或USB接口与计算机通信,利用VISA技术进行指令传输,从而实现高效的数据采集与处理功能。 项目背景 随着现代电子测试需求的日益…...

西门子PLC中Modbus通讯DATA_ADDR通讯起始地址设置以及RTU轮询程序设计。
1 DATA_ADDR通讯起始地址设置 因为西门子PLC保持型寄存器的是40001~49999和400001~465536, 那么什么时候用40001什么时候用400001呢? 当需要的地址超过49999的话就用400001。 比如从站的某个地址是#16 48D518645 4000118645超过了49999 这边因为前…...

趋势(一)利用python绘制折线图
趋势(一)利用python绘制折线图 折线图( Line Chart)简介 折线图用于在连续间隔或时间跨度上显示定量数值,最常用来显示趋势和关系(与其他折线组合起来)。折线图既能直观地显示数量随时间的变化…...

【含文档】基于Springboot+Vue的采购管理系统(含源码+数据库+lw)
1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…...

【C++11入门基础】
我没有那么想你,那只是偶尔醉意会催人提起.......................................................................... 目录 前言 一、【C11的介绍】 二、【C11引入的一些实用语法】 2.1、【统一的列表初始化({ }的初始化)】 2.2、【initi…...

Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...

Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...

《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...

push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...