el-table 树形表格 自定义展开图标_[shell脚本]表格数据在终端可视化输出

4facddb88765d9bffc128b390cbf73b5.png

最终效果

1. 自定义表格样式

b9885c863ad6cd9ffc15db43992d045f.png

2. 自定义主题颜色

  • 支持三系普通颜色
  • 支持16色彩虹色
  • 支持单颜色

回顾一下shell语法

1. shell传递参数

我们可以在执行shell脚本时实时传递参数从而指定某些具体的参数(在本例中包括表格的样式、颜色等),脚本中获取参数的格式为$n。其中除n0表示执行的文件名外,1表示第一个参数,2表示第二个参数,以此类推。

  • 每一模式必须以右括号结束
  • 匹配到取值符合某一模式后,执行模式所有命令直到;;
  • 一旦模式匹配则不会执行其他模式
  • 如果无一模式匹配,可以使用*捕获该值
case 值 in
模式1)command1command2...commandN;;
模式2)command1command2...commandN;;
esac

在实例中,我们通过第一个参数指定style的值来选择不同的表格形式(具体的表格形式由制表符向量tbs实现)。另外当第一个参数以-h或者--h开头时,我们可以输出help信息:

style="$1"
case $style in# 根据第一个参数为-0或-1或-2来实现不同的表格样式, 即给tbs赋不同的值-0)  tbs="                ";;-1)  tbs="└┴┘├┼┤┌┬┐ ───│││";;-2)  tbs="└─┘│┼│┌─┐ ───│││";;# 如果第一个参数以%开头, 意味着我们可以外部指定tbs的值# 把style变量开头的%去掉赋值给tbs"%"*) tbs="${style/"%"/}";;-h*|--h*)echo '
t [  ---   HELP  ---  ]
t command : draw_table.sh [style] [colors] < <file >
t    pipo : echo -e AtBnatb | draw_table.sh [style] [colors]
t [style] : input 16 characters
t           1~9 is Num. keypad as table,10 is not used
t           11~13 are left,middle,right in a row
t           14~16 are left,middle,right in a column
t
t [colors]: input a list,like "-3,-4,-8" sames "-green,-yellow,-white"
t           It set color,table cross ,font ,middle. Or 033[xxm .
t           And support custom color set  every characters of sytle
t           Like "033[30m,-red,-yellow,,,,,,,,,,,,," sum 16.'exit;;
esac
# ${var:-DEFAULT}: 如果var没有被声明, 或者其值为空, 那么就以$DEFAULT作为其值
tbs="${tbs:-"+++++++++,---|||"}"

2. awk命令

awk命令:依次对每一行进行处理,但是相比于sed更擅长取列,个人感觉是类SQL的文本搜索工具。

awk的基本形式如下:

awk [-F|-f|-v] 'BEGIN{ 命令 } pattern{ 命令 } END{ 命令 }' file

参数:

-F: 指定分隔符
-f: 调用脚本
-v: 使用var=value的格式定义变量

特殊变量:

NF: 字段数量
NR: 当前处理的行数
FILENAME: 当前文件名

三个语句块:

BEGIN{ 命令 }:    执行前的命令
pattern{ 命令 }:  处理每一行执行的命令
END{ 命令 }:      执行完所有行后的命令

3. 自定义输出颜色

格式如下:

echo -e "033[字背景颜色;字体颜色m字符串033[0m"
# 颜色调用始末是固定的:
033[ ; m …… 033[0m 
# 实例:
echo -e "033[41;36m someword 033[0m"

b5306b5c13e168cfd12f49d39d9f191d.png

设计思路

1. 计算和绘制表格相关的全局变量

  • cols_len[NF]:存储了每一列的最大长度, 每列最大长度等于该列最长的元素的长度
  • rows[NR][NF]:将文件的每行每列的数据记录到rows二维数组中
  • rows[NR][0]rows0列存储前一行和后一行的列数, 用于确定当行的表格样式
  • colors[16]:存储每个制表符对应的着色方案
  • tbs[16]:存储已经着色的制表符,其中制表符样式类似于╚ ╩ ╝ ╠ ╬ ╣ ╔ ╦ ╗ , ═ ═ ═ ║ ║ ║,前1~9个为表格骨架的样式,第10表示着表格元素空格的填充,11~13分别表示上边框、中间和下边框的连接符,第14~16表示左边框、中间和右边框的连接符

2. 生成表格样式

由于涉及到单列,因此需要考虑到单列的情况生成如下一些表格样式变量:

# ------------------------------------------预存所有的表格线, 减少不必要的重复计算------------------------------------------
title_top = line_val("title_top")
title_mid = line_val("title_mid")
title_btm_mid = line_val("title_btm_mid")
title_top_mid = line_val("title_top_mid")
title_btm = line_val("title_btm")
top = line_val("top")
mid = line_val("mid")
btm = line_val("btm")
print "title_top:    "title_top"n"
pring "title_mid:    "title_mid"n"
print "title_btm_mid:"title_btm_mid"n"
print "title_top_mid:"title_top_mid"n"
print "title_btm:    "title_btm"n"
print "top:          "top"n"
print "mid:          "mid"n"
print "btm:          "btm"n"

785e7293c72c47f7d9840b13cde7f0f4.png

注意事项

MacLinux很多命令参数不同是因为Mac自带的是BSD系的命令,而Linux用的是GNU系的命令。可以在Mac中使用带g前缀的命令解决这一问题。

Linux下直接使用awk命令即可,在MAC下需要下载gawk命令,否则awk命令会一直报错。

# 安装GNU工具链
brew install coreutils
brew install gawk

运行方法

# 管道方法$ echo -e "AtBnatb" | sh draw_table.sh
+---+---+
|,A,|,B,|
+---+---+
|,a,|,b,|
+---+---+# 文件方法
$ echo -e "Your TopicnAtBtCtdnatbthtstdn5n78t34" > list.txt
# 第一个参数控制表格形式
$ sh draw_table.sh  < list.txt
+---------------------+
|,,,,,Your Topic,,,, ,|
+----+----+---+---+---+
|,A,,|,B,,|,C,|,d,|,,,|
+----+----+---+---+---+
|,a,,|,b,,|,h,|,s,|,d,|
+----+----+---+---+---+
|,,,,,,,,,,5,,,,,,,,,,|
+----+----+---+---+---+
|,78,|,34,|,,,|,,,|,,,|
+----+----+---+---+---+# 自定义模式
# 自定义表格边框:需要用"%"开头,前9位表示表格边框,第10位没有用处,第11-13 表示行的上、中、下分隔符,第14-16表示列的左、中、右分隔符
# 自定义颜色:第一个参数表示表格框架的颜色,第二个参数表示表格内容的颜色,第三个参数表示其他颜色
# 最后可以传入16个颜色参数,表示style中每个字符的颜色$ sh draw_table.sh '%123456789 abcABC' -red,-blue,-green  < list.txt
7aaaaaaaaaaaaaaaaaaaaa9
A     Your Topic      C
4bbbb8bbbb8bbb8bbb8bbb6
A A  B B  B C B d B   C
4bbbb5bbbb5bbb5bbb5bbb6
A a  B b  B h B s B d C
4bbbb2bbbb2bbb2bbb2bbb6
A          5          C
4bbbb8bbbb8bbb8bbb8bbb6
A 78 B 34 B   B   B   C
1cccc2cccc2ccc2ccc2ccc3

688c5707290ca95ecdd5da421c5f1a0c.png

代码

#!/bin/bash
#############################################################################
# 作者:banemon
# 邮箱:banemon@
# 修改: tomocat
# Git: https://gitee.com/banemon/linux_sh_script
# 使用说明: https://zhuanlan.zhihu.com/p/144802861
# 命令:sh draw_table.sh < file.txt 或 echo -e "AtBnatb" | sh draw_table.sh
# 帮助:draw_table.sh --help
############################################################################## 表格样式style
style="$1"
case ${style} in# tbs包含16个符号, 每个符号表示的含义如下:# 1 2 3 4 5 6 7 8 9 10       11      12      13       14      15      16# 1 2 3 4 5 6 7 8 9 txt_empt top_row mid_row btm_row left_col mid_col right_col -0)  tbs="                ";;-1)  tbs="└┴┘├┼┤┌┬┐ ───│││";;-2)  tbs="└─┘│┼│┌─┐ ───│││";;-3)  tbs="╚╩╝╠╬╣╔╦╗ ═══║║║";;-4)  tbs="╚═╝║╬║╔═╗ ═══║║║";;-5)  tbs="╙╨╜╟╫╢╓╥╖ ───║║║";;-6)  tbs="╘╧╛╞╪╡╒╤╕ ═══│││";;-7)  tbs="└┴┘├┼┤┌┬┐ ─ ─│ │";;-8)  tbs="└─┘│┼│┌─┐ ─ ─│ │";;-9)  tbs="╚╩╝╠╬╣╔╦╗ ═ ═║ ║";;-10) tbs="╚═╝║╬║╔═╗ ═ ═║ ║";;-11) tbs="╙╨╜╟╫╢╓╥╖ ─ ─║ ║";;-12) tbs="╘╧╛╞╪╡╒╤╕ ═ ═│ │";;-13) tbs="╘╧╛╞╪╡╒╤╕ ═ ═│ │";;-14) tbs="╚╩╝╠╬╣╔╦╗ ───│││";;-15) tbs="+++++++++ ---|||";;# 自定义表格边框:需要用"%"开头,前9位表示表格边框,第10位表示填充字符,第11-13 表示行的上、中、下分隔符,第14-16表示列的左、中、右分隔符# ${string/substring/replacement}: 使用$replacement, 来代替第一个匹配的$substring, 这里是去掉开头的%, 另外由于%是特殊字符需要加上双引号(或者反斜杠)"%"*) tbs="${style/"%"/}";;# 等价于: %*) tbs="${style/%/}";;-h*|--h*)# -e 参数激活转移字符, 比如t表示制表符echo -e '
t [  ---   HELP  ---  ]
t command : sh draw_table.sh [style] [colors] < <file>
t    pipo : echo -e AtBnatb | draw_table.sh [style] [colors]
t [style] : input 16 characters
t           1~9 is Num. keypad as table,10 is not used
t           11~13 are up,middle,down in a row
t           14~16 are left,middle,right in a column
t
t         -0  :                
t         -1  :└┴┘├┼┤┌┬┐ ───│││         -9  :╚╩╝╠╬╣╔╦╗ ═ ═║ ║
t         -2  :└─┘│┼│┌─┐ ───│││         -10 :╚═╝║╬║╔═╗ ═ ═║ ║
t         -3  :╚╩╝╠╬╣╔╦╗ ═══║║║         -11 :╙╨╜╟╫╢╓╥╖ ─ ─║ ║
t         -4  :╚═╝║╬║╔═╗ ═══║║║         -12 :╘╧╛╞╪╡╒╤╕ ═ ═│ │
t         -5  :╙╨╜╟╫╢╓╥╖ ───║║║         -13 :╘╧╛╞╪╡╒╤╕ ═ ═│ │
t         -6  :╘╧╛╞╪╡╒╤╕ ═══│││         -14 :╚╩╝╠╬╣╔╦╗ ───│││
t         -7  :└┴┘├┼┤┌┬┐ ─ ─│ │         -15 :+++++++++ ---|||
t         -8  :└─┘│┼│┌─┐ ─ ─│ │
t
t [colors]: input a list,like "-3,-4,-8" sames "-green,-yellow,-white"
t           It set color,table cross ,font ,middle. Or 033[xxm .
t           And support custom color set  every characters of sytle
t           Like "033[30m,-red,-yellow,,,,,,,,,,,,," sum 16.
t
t          -1|-black         -5|-blue
t          -2|-red           -6|-purple
t          -3|-green         -7|-cyan
t          -4|-yellow        -8|-white'exit;;
esac
# 当没有参数时, 设定tbs的默认值
tbs="${tbs:-"+++++++++,---|||"}"# 颜色
color="$2"
case $color in# 1~3可用于设置自己喜欢的自定义样式, 设置${color}的值即可1) ;;2) ;;3) ;;"-"*|"033"*)# 3位数标,词colors="$color";;"%"*) :# %号开头的全自定义colors="${color/"%"/}";;
esac
colors="${colors:-"-4,-8,-4"}"# 主体函数
gawk -F 't' -v table_s="${tbs}" -v color_s="${colors}" 'BEGIN{}{# ------------------------------------------遍历每行记录全局变量------------------------------------------# cols_len[NF]: 存储了每一列的最大长度, 每列最大长度等于该列最长的元素的长度# rows[NR][NF]: 将文件的每行每列的数据记录到rows二维数组中# rows[NR][0]: 第0列存储前一行和后一行的列数, 用于确定当行的表格样式# max_single_col_length: 单列行的最大长度# ps: 由于单列是直接合并整行的单元格, 为图表美观(防止cols_len[1]因为某些特长的单列而增长), 单独记录单列的最大长度# 计算单列行的最大长度if (NF == 1) { max_single_col_length = max_single_col_length < super_length($1) ? super_length($1) : max_single_col_lengthrows[NR][1] = $1} else { # 非单列行更新每一列的最大长度 for(i=1; i<=NF; i++){cols_len[i]=cols_len[i] < super_length($i) ? super_length($i) : cols_len[i]rows[NR][i]=$i}}# 前后行状态if (NR == 1) {PrevNF=0}# 每行第0列存储前一行和当前行的列数, 用于确定当行的表格样式rows[NR][0] = PrevNF "," NFPrevNF=NF}END{# ------------------------------------------colors变量着色, 生成colors和tbs变量------------------------------------------# 构建颜色向量: colors, 长度为16color_sum = split(color_s,clr_id,",")if (color_sum == 3){ # 简易自定义模式: 传入三种颜色for (i=1; i<=3; i++) {if (color_s ~ "-") {clr_id[i] = color_var(clr_id[i])}}# 组建色表: 三种颜色构造colors向量for (i=1; i<=16; i++) {if (i < 10) {colors[i] = clr_id[1]} else if (i == 10){colors[i] = clr_id[2]} else if (i > 10){colors[i] = clr_id[3]}}} else if (color_sum == 16){ # 全自定义模式: 传入16种颜色for (i=1; i<=16; i++){if(color_s ~ "-"){clr_id[i] = color_var(clr_id[i])}colors[i] = clr_id[i]}}# 设置颜色变量clr_end = "033[0m"   # shell着色的尾部标识clr_font = colors[10] # 第10位制表符的颜色, 也就是单元格内填充字符的颜色# 构建已着色的制表符向量: tbs, 长度16for (i=1; i<=length(table_s); i++){if(colors[i]=="")tbs[i] = substr(table_s, i, 1) # 获取第i个制表符elsetbs[i] = colors[i] substr(table_s,i,1) clr_end # 给制表符着色, 例如红色 `033[31m制表符033[0m`fi}# ------------------------------------------如果单列长度大于非单列最大行长度则调整各列长度------------------------------------------max_line_len = 0 # 统计非单列的最大行长度for (i=1; i<=length(cols_len); i++) {max_line_len = max_line_len + cols_len[i] + 2 # 每列需要包含2个空格, 防止内容和制表符紧挨着}max_line_len = max_line_len + length(cols_len) - 1 # 多列的行最大总长度需要包含每列之间的制表符个数(列数 -1)# 如果单列最大总长度大于多列的行最大总长度时, 需要把超出的部分平均分给每列, 保证图表美观diff_length = max_single_col_length + 2 - max_line_lenif (diff_length > 0) {for(j=1; j<=diff_length; j++){i = (j - 1) % length(cols_len) + 1cols_len[i] = cols_len[i] + 1}# 由于增加了每列长度, 故需要调整单列最大行长度# max_line_len = max_single_col_length + 2} else { # 如果单列最大总长度小于行的最大总长度, 那么单列长度要和最大行总长度保持一致max_single_col_length = max_line_len - 2}# ------------------------------------------预存所有的表格线, 减少不必要的重复计算------------------------------------------title_top = line_val("title_top")title_mid = line_val("title_mid")title_btm_mid = line_val("title_btm_mid")title_top_mid = line_val("title_top_mid")title_btm = line_val("title_btm")top = line_val("top")mid = line_val("mid")btm = line_val("btm")# debug# print "title_top:    " title_top "n"# pring "title_mid:    " title_mid "n"# print "title_btm_mid:" title_btm_mid "n"# print "title_top_mid:" title_top_mid" n"# print "title_btm:    " title_btm" n"# print "top:          " top" n"# print "mid:          " mid" n"# print "btm:          " btm" n"# ------------------------------------------绘制表格------------------------------------------row_num = length(rows)for(i=1; i<=row_num; i++){# 解析出前一行和当前行的列数split(rows[i][0], col_num_list, ",")prev_col_num = int(col_num_list[1])curr_col_num = int(col_num_list[2])# 绘制首行if (i==1 && prev_col_num == 0) {if (curr_col_num <= 1) {# 单列print title_topprint line_val("title_txt", rows[i][1], max_single_col_length)} else if (curr_col_num >= 2) {# 多列print topprint line_val("txt", rows[i])}	} else if (prev_col_num <=1 ) {# 前一行为单列时if (curr_col_num <=1 ) {# 单列print title_midprint line_val("title_txt", rows[i][1], max_single_col_length)} else if (curr_col_num >= 2) {# 多列print title_btm_midprint line_val("txt", rows[i])}}else if (prev_col_num >= 2) {# 前一行为多列时if (curr_col_num <= 1) {# 单列print title_top_midprint line_val("title_txt", rows[i][1], max_single_col_length)} else if (curr_col_num >= 2) {# 多列print midprint line_val("txt", rows[i])}}# 表格底边if (i == row_num && curr_col_num <= 1) {# 尾行单列时print title_btm} else if (i == row_num && curr_col_num >= 2){# 尾行多列时print btm}}}# 返回字符串的长度, 支持中文等双字节字符# eg: 内置函数length("中文")返回2, super_length("中文")返回4function super_length(txt){leng_base = length(txt);leng_plus = gsub(/[^x00-xff]/, "x", txt) # 返回Ascii码大于255的字符匹配个数return leng_base + leng_plus}# color_var函数: 解析形如"-n"开头的颜色配置function color_var(color){if(color=="-1" ||color=="-black"){n=30}else if(color=="-2" || color=="-red"){n=31}else if(color=="-3" || color=="-green"){n=32}else if(color=="-4" || color=="-yellow"){n=33}else if(color=="-5" || color=="-blue"){n=34}else if(color=="-6" || color=="-purple"){n=35}else if(color=="-7" || color=="-cyan"){n=36}else if(color=="-8" || color=="-white"){n=37}else if(color=="-0" || color=="-reset"){n=0}else{n=0}return "033[" n "m"}# ------------------------------------------生成绘制内容的函数------------------------------------------# 参数: part绘制的位置; txt绘制的文本内容; cell_lens绘制的单元格长度# eg: tbs为已着色的制表符 ╚ ╩ ╝ ╠ ╬ ╣ ╔ ╦ ╗ , ═ ═ ═ ║ ║ ║# TODO: cell_len, line, i这三个参数的意义何在, awk的特殊用法?function line_val(part, txt, cell_lens, cell_len, line, i) {# 更新本次行标if (part=="top") {tbs_l=tbs[7]tbs_m=tbs[8]tbs_r=tbs[9]tbs_b=tbs[11]} else if (part=="mid") {tbs_l=tbs[4]tbs_m=tbs[5]tbs_r=tbs[6]tbs_b=tbs[12]} else if (part=="txt") { # tbs[10]为填充字符, 用于填充单元格内的空格tbs_l=tbs[14] tbs[10]tbs_m=tbs[10] tbs[15] tbs[10] tbs_r=tbs[10] tbs[16]tbs_b=tbs[10]} else if (part=="btm"){tbs_l=tbs[1]tbs_m=tbs[2]tbs_r=tbs[3]tbs_b=tbs[13]} else if (part=="title_top"){tbs_l=tbs[7]tbs_m=tbs[11]tbs_r=tbs[9]tbs_b=tbs[11]			} else if (part=="title_top_mid"){tbs_l=tbs[4]tbs_m=tbs[2]tbs_r=tbs[6]tbs_b=tbs[12]			} else if (part=="title_mid"){tbs_l=tbs[4]tbs_m=tbs[12]tbs_r=tbs[6]tbs_b=tbs[12]			} else if (part=="title_txt"){tbs_l=tbs[14] tbs[10]tbs_m=tbs[10] tbs[15] tbs[10]tbs_r=tbs[10] tbs[16]tbs_b=tbs[10]			} else if (part=="title_btm"){tbs_l=tbs[1]tbs_m=tbs[13]tbs_r=tbs[3]tbs_b=tbs[13]			} else if (part=="title_btm_mid"){tbs_l=tbs[4]tbs_m=tbs[8]tbs_r=tbs[6]tbs_b=tbs[12]			}# title行只有一列文本if (part == "title_txt") {cols_count=1} else {cols_count = length(cols_len)}# 遍历该行所有列, 构造改行的内容line_content = ""# 对于一行内的每一个单元格, 计算单元格文本cell_txt 和 对应的空白字符填充数fill_lenfor (i=1; i<=cols_count; i++) {if (part == "txt") {# 多列左对齐cell_txt = txt[i]fill_len = cols_len[i] - super_length(cell_txt)}else if(part=="title_txt"){# 单列居中cell_txt = txtfill_len = (cell_lens - super_length(cell_txt)) / 2is_need_fix = (cell_lens - super_length(cell_txt)) % 2 # 如果填充字符长度非偶数则需要fix} else {cell_txt = ""fill_len = cols_len[i] + 2}# 单元格文本着色cell_txt = clr_font cell_txt clr_end# 单元格内空白补全if (part == "title_txt") {# 单列居中, 在单元格文本两侧补全空格字符for (cell_len=1; cell_len <= fill_len; cell_len++) {cell_txt = tbs_b cell_txt tbs_b}# 单列非偶长度补全if (is_need_fix == 1) {cell_txt = cell_txt " "}}else{# 多列左对齐for (cell_len=1; cell_len<=fill_len; cell_len++) {cell_txt = cell_txt tbs_b}}# 首格if (i == 1) {line_content = line_content cell_txt} else {# 中格line_content = line_content tbs_m cell_txt}# 尾格if ( i == cols_count ) {line_content = line_content tbs_r}}# 返回行: tbs_l表示最左侧的表格样式, line_content表示该行的内容return tbs_l line_content}'

使用实例

实际中经常碰到日志采集分析的问题,可以在shell脚本加入如下的语句用于可视化输出表格数据:

echo -e "Module Log Analyse
Function NametCount
Function1t20
Function2t1113
Function3t257
Function4t113" | sh draw_table.sh -4 -red,-white,-blue

5844b0bea3779effa2a34af0afd1ab62.png

Reference

[1] https://www.runoob.com/linux/linux-shell-process-control.html
[2] https://www.cnblogs.com/gaochsh/p/6901809.html
[3] https://www.cnblogs.com/nb-blog/p/5780424.html
[4] https://www.cnblogs.com/knowlegefield/p/7774693.html

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

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

相关文章

kubectl apply -f_广州车展捷豹路虎参展阵容 全新F-PACE 路虎卫士90

近日&#xff0c;我们从相关渠道获得了捷豹路虎广州车展的阵容。将有两款新车亮相&#xff0c;新款捷豹F-PACE和路虎卫士90。新款捷豹F-PACE采用了最新的家族式设计风格&#xff0c;具有更时尚的造型设计&#xff0c;而路虎卫士90则拥有更短的轴距。外观方面&#xff1a;新款捷…

github gis 路径规划_Apollo问答丨车辆定位和轨迹规划用的是语义,还是3D Position?...

自Apollo开发者社区小程序上线以来&#xff0c;我们每一天都会在「社区问答」板块收到许多开发者的技术提问。每周&#xff0c;可爱的Apollo小姐姐都会精选出被采纳的社区问答进行整理汇总&#xff0c;并统一对大家进行答复。开发者在使用Apollo平台过程中&#xff0c;如果遇到…

astar插件下载 就行_暗黑破坏神2地图插件常用的设置,做自己的私人订制游戏!...

暗黑2是一款很老的游戏&#xff0c;虽然很经典&#xff0c;但游戏里有很多地方在今天看来有很多不方便的地方&#xff0c;比如无法查看怪物的一些属性&#xff0c;小地图上没有怪物显示&#xff0c;装备系统很复杂但一些数值不能直接查看比如物品等级。所以如今很多朋友玩这个游…

asp.net 将bmp格式图片怎么转换为jpg_Heic图片转换精灵-Heic图片高清转换JPG/PNG/BMP方法...

想打开heic文件&#xff0c;首先要做的是把图片格式转换成电脑可以查看的&#xff0c;电脑可以查看的形式也并非很单一&#xff0c;比如jpg/bmp/png&#xff0c;这些都是比较常用的格式&#xff0c;首先heic图片是苹果手机独有的图片格式&#xff0c;电脑上或者其他设备是无法打…

beaninfo详解源码解析 java_Java后端精选技术:源码解析Spring Cloud Zuul

Zuul 架构图在zuul中&#xff0c; 整个请求的过程是这样的&#xff0c;首先将请求给zuulservlet处理&#xff0c;zuulservlet中有一个zuulRunner对象&#xff0c;该对象中初始化了RequestContext&#xff1a;作为存储整个请求的一些数据&#xff0c;并被所有的zuulfilter共享。…

一加到1亿。C语言_可能是今年最难选的2部手机:小米10详细对比一加8T

原标题&#xff1a;可能是今年最难选的2部手机&#xff1a;小米10详细对比一加8T在智能手机行业里流传着这样一句话&#xff1a;旗舰处理器只能决定一款机型的下限&#xff0c;而不能决定它的上限&#xff1b;决定一款机型上限的是旗舰处理器之外的屏幕、拍照、UI等等。这句话放…

html5 webrtc fir 请求关键帧_中信建投官网强调认可我们的投资理念的股民朋友请求 CTRL D 收藏、锁定本直播地址...

本文摘要&#xff1a;有关中信建投官网强调认可我们的投资理念的股民朋友请求 CTRL D 收藏、锁定本直播地址的内容分享&#xff0c;跟踪了解如何看股票k线图&#xff0c;分享热点专题。欢迎来到 橘子股票直播间&#xff0c;本直播每日为大家更新最快、最精准、最全面的股市内容…

打印完全二叉树java_java 完全二叉树的构建与四种遍历方法示例

本来就是基础知识&#xff0c;不能丢的太干净&#xff0c;今天竟然花了那么长的时间才写出来&#xff0c;记一下。有如下的一颗完全二叉树&#xff1a;先序遍历结果应该为&#xff1a;1 2 4 5 3 6 7中序遍历结果应该为&#xff1a;4 2 5 1 6 3 7后序遍历结果应该为…

模拟 http connecttimeout_燃烧室数学模型模拟软件NPSS

燃烧室的各个结构都可以被建立数学模型用矩阵进行模拟计算&#xff0c;每个模型都由输入、定义各部件的参数以及输出组成。流体在系统中某个点的状态可以由速率、压力、温度和构成(例如铝粉和氢气的质量比例)等参数描述。由于各个参数之间存在反馈环路&#xff0c;导致输入和输…

两个时间点距离 time_t c_天津二建公路考试时间

天津二建公路考试时间 Vadg42d天津二建公路考试时间 预警体系通过预警分析和预控对策实现事故的预警和控制&#xff0c;预警分析完成监测、识别、诊断与评价功能&#xff0c;而预控对策完成对事故征兆的不良趋势进行纠错和治错的功能。技术方案现金流量表主要有投资现金流量表&…

java 168转换成861_java实验-java语言面向对象编程基础

java实验-java语言面向对象编程基础 (12页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;8.90 积分广州大学学生实验报告广州大学学生实验报告开课学院及实验室&#xff1a;开课学院及实验室&#xf…

c#养老院老人信息管理系统源码 论文_辽宁吃的好的社区养老院位置,爱心养老院_抚顺市望花区社会养老中心...

首页 > 新闻中心发布时间&#xff1a;2020-11-09 02:11:16 导读&#xff1a;抚顺市望花区社会养老中心为您提供辽宁吃的好的社区养老院位置,爱心养老院的相关知识与详情&#xff1a; 老人早晨气场后手指经常发硬&#xff0c;无法自己握拳。 老人关节活动不方便&#xff0c;活…

SQL进阶:子查询

一般情况下,我们都是直接对表进行查询,但有时候,想要的数据可能通过一次select 获取不到,需要嵌套select,这样就形成了子查询。 子查询可以位于查询语句的任意位置,主要的注意点在于用于不同的位置,和不同的关键字一起使用时,需要注意返回的列的数量和行的数量。 位于…

android四周阴影效果_帮助独立开发者轻松创建令人惊叹的产品视觉效果

大家好&#xff0c;我是独立开发者Larry&#xff5e;作品发布、宣传交流过程中对作品进行样机包装或场景展示往往是不可或缺的&#xff0c;除了纯手工打造外&#xff0c;通常大家都会运用一些样机素材来完成对产品的快速包装&#xff0c;因此关于样机素材的资源网上有很多&…

pythonweb全栈开发_Web全栈开发穿插路程(python+js)

简介&#xff1a;穿插路程&#xff0c;是指快去快回&#xff0c;来去一阵风&#xff0c;走的快&#xff0c;走马观花&#xff0c;没有细品。细品那就要慢慢熬功夫喽。1.完成后的效果是&#xff1a;用户访问入口页面&#xff0c;录入信息&#xff0c;提交后结果以逐步添加的形式…

C++和Rust_Kotlin、Rust两个充满了骚操作的编程语言,值得一玩

Kotlin和Rust都是两个年轻的编程语言&#xff0c;而且相比现在流行的Python、JavaScript/Typescript语言来说&#xff0c;Kotlin和Rust更接近底层&#xff0c;对于学习理解计算机原理&#xff0c;学习Kotlin和Rust应该是更好的选择。与C/C相比&#xff0c;Kotlin、Rust做上层应…

理发店管理系统java_美容美发店管理系统的设计与实现(JSP,SQLServer)(含录像)

美容美发店管理系统的设计与实现(,SQLServer)(含录像)(开题报告,论文12700字,程序代码,SQLServer数据库)系统功能结构本系统是根据我国美容业的现状及中小型美容院的发展需要进行详细的分析&#xff0c; 对美容院信息管理系统进行合理的设计&#xff0c; 实现集成员工管理、工资…

cpu频率_新版win10修复CPU频率显示不正确的bug

在此前win10 2020年5月更新后&#xff0c;有用户反馈win10任务管理器无法正确显示CPU使用率和频率&#xff0c;比如会出现CPU频率为0.00GHz。现在有外媒报道&#xff0c;微软在win10测试版19042.608中修复了CPU频率显示不正确的bug。这一消息也得到了微软的确认表示已经修复了某…

sap fiori导出列表到excel_介绍一种Fiori标准应用的增强方式

2015年&#xff0c;Jerry还在SAP成都研究院CRM Fiori开发团队工作时&#xff0c;担任了德国一个著名的灯具制造商客户的CRM Fiori项目的dev angel. 当时客户提出了若干对CRM Fiori标准应用的增强需求&#xff0c;总的来说分为前台Fiori UI界面的增强(比如增添新的自定义字段)以…

电脑ip地址设置_路由器动态IP和静态IP上网方式怎么设置【设置教程】

在我们设置路由器的过程中&#xff0c;路由器设置界面一般会给我们提供4种上网方式选项&#xff0c;分别是&#xff1a;“让路由器自动选择上网方式(推荐)”、“PPPoE(ADSL虚拟拨号)”、“动态IP(以太网宽带&#xff0c;自动从服务商获取IP地址)”、“静态IP(以太网宽带&#x…