当前位置: 首页 > news >正文

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 由以下四个部分组成&#xff1a; *<flags><field width>.<precision><conversion 字符&g…...

string模拟优化和vector使用

1.简单介绍编码 utf_8变长编码&#xff0c;常用英文字母使用1个字节&#xff0c;对于其它语言可能2到14&#xff0c;大部分编码是utf_8&#xff0c;char_16是编码为utf_16, char_32是编码为utf_32&#xff0c; wchar_t是宽字符的&#xff0c; 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 中&#xff0c;reshape 函数用于改变张量的形状&#xff0c;而不改变其中的数据。下面是一些关于 reshape 函数的常见用法示例。 基本语法 torch.reshape(input, shape) # input: 要重塑的张量。 # shape: 目标形状&#xff0…...

安全光幕的工作原理及应用场景

安全光幕是一种利用光电传感技术来检测和响应危险情况的先进设备。其工作原理基于红外线传感器&#xff0c;通过发射红外光束并接收反射或透射光束来形成一道无形的屏障。以下是对安全光幕工作原理和应用场景的介绍&#xff1a; 工作原理 发射器与接收器&#xff1a;安全光幕通…...

《深度学习》OpenCV LBPH算法人脸识别 原理及案例解析

目录 一、LBPH算法 1、概念 2、实现步骤 3、方法 1&#xff09;步骤1 • 缩放 • 旋转和平移 2&#xff09;步骤2 二、案例实现 1、完整代码 1&#xff09;图像内容&#xff1a; 2&#xff09;运行结果&#xff1a; 一、LBPH算法 1、概念 在OpenCV中&#xff0c;L…...

数据结构之顺序表——动态顺序表(C语言版)

静态顺序表我们已经实现完毕了&#xff0c;下来我们实现一下动态顺序表 静态链接&#xff1a;数据结构之顺序表——动态顺序表(C语言版) 首先来了解一下两个顺序表的差别 一、内存管理的灵活性 动态分配与释放&#xff1a;动态顺序表能够在运行时根据需要动态地分配和释放内存…...

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…...

成都睿明智科技有限公司电商服务可靠不?

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

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)

前言&#xff1a;汇总一下做过的下载功能&#xff0c;持续补充中 一、将后端传过来的二进制流文件下载&#xff08;需要提取headers里面的文件名&#xff09; const { herders,data }res; // 创建下载链接元素 const link document.createElement("a");// 创建 Bl…...

iLogtail 开源两周年:UC 工程师分享日志查询服务建设实践案例

作者&#xff1a;UC 浏览器后端工程师&#xff0c;梁若羽 传统 ELK 方案 众所周知&#xff0c;ELK 中的 E 指的是 ElasticSearch&#xff0c;L 指的是 Logstash&#xff0c;K 指的是 Kibana。Logstash 是功能强大的数据处理管道&#xff0c;提供了复杂的数据转换、过滤和丰富…...

【MySQL】入门篇—基本数据类型:NULL值的概念

在关系数据库中&#xff0c;NULL值是一个特殊的标记&#xff0c;表示缺失或未知的值。 NULL并不等同于零&#xff08;0&#xff09;或空字符串&#xff08;&#xff09;&#xff0c;它表示一个字段没有任何值。 这一概念在数据库设计和数据管理中至关重要&#xff0c;因为它影…...

Java设计模式10 - 观察者模式

观察者模式 观察者模式也叫作发布-订阅模式&#xff0c;也就是事件监听机制。观察者模式定义了一种一对多的依赖关系&#xff0c;让多个观察者对象同时监听某一个主题对象&#xff0c;这个主题对象在状态上发生变化时&#xff0c;会通知所有观察者对象&#xff0c;使他们能够自…...

LabVIEW示波器通信及应用

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

西门子PLC中Modbus通讯DATA_ADDR通讯起始地址设置以及RTU轮询程序设计。

1 DATA_ADDR通讯起始地址设置 因为西门子PLC保持型寄存器的是40001~49999和400001~465536&#xff0c; 那么什么时候用40001什么时候用400001呢&#xff1f; 当需要的地址超过49999的话就用400001。 比如从站的某个地址是#16 48D518645 4000118645超过了49999 这边因为前…...

趋势(一)利用python绘制折线图

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

【含文档】基于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入门基础】

我没有那么想你&#xff0c;那只是偶尔醉意会催人提起.......................................................................... 目录 前言 一、【C11的介绍】 二、【C11引入的一些实用语法】 2.1、【统一的列表初始化&#xff08;{ }的初始化&#xff09;】 2.2、【initi…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...