tcl - 用于从目录中的文件中提取元素并制作列表的 TCL 脚本
问题描述
我有一个问题,如下所述
问题描述
我有一些“sv”扩展文件,我正在使用“glob”来提取匹配文件,现在在这些匹配文件中,我需要拆分它们并提取元素并创建不同的列表。
例如
set files [glob -type f modified_rtl_files/*/*{wrapper_hsm}*]
这个命令给了我这两个文件:
modified_rtl_files/mbist_wrapper/mbist_wpper_hsm_pkram.sv modified_rtl_files/mbi_wrapper/mbist_wrapper_hsm_sysram.sv
现在我正在使用以下命令提取文件名
foreach element $files {
set c [split [ file tail [ file rootname $element ] ] "_" ]
echo $c
}
这是给我
pkram
sysram
但我需要将它们设置为两个独立的列表
$mem1
$mem2
$mem1 should be pkram
$mem2 should be sysram
每当我试图创建这样的东西时,这两个元素都会被打印出来
foreach element $files {
set c [split [ file tail [ file rootname $element ] ] "_" ]
set d [ lindex $c 3]
set mem1 [ lindex $d 0 ]
puts $mem1
}
它正在打印
pkram
sysram
我想要自变量。
解决方案
您可以使用以下方法生成名称set
:
foreach element [lsort $files] {
set mem[incr i] [lindex [split [file tail [file rootname $element]] "_"] 3]
puts [set mem$i]; # <<< How to *READ* a variable with a generated name
}
(glob
如果您完全关心订单,请始终对输出进行排序;不能保证以任何顺序或任何一致性出现)。
但不要这样做!
生成的变量名使用起来很痛苦,因为它们不能与$
语言语法一起使用。您最好使用(关联)数组,因为它们确实可以使用:
foreach element [lsort $files] {
set mem([incr i]) [lindex [split [file tail [file rootname $element]] "_"] 3]
puts $mem($i)
}
这些值不会在mem1
and中mem2
,而是在mem(1)
and中mem(2)
。
推荐阅读
- batch-file - 如何用bat循环添加数字?
- three.js - 如何识别 4x4 标记并“警告”其相应代码?
- powerbi - 在 Power BI 中,如何创建基于切片器和可视化更改的列?
- r - 如何从R中的字符串中获取部分文本?
- gnome - 在 Gnome (gnome-shell) 中,您可以设置多个快捷键而不是单个快捷键吗?
- wso2 - pod 重启后不可见之前发布的 API
- json - AttributeError:“MovieSerializer”对象没有属性“id”+序列化
- c# - docusignapi usefinfo api 不返回属性
- java - Spring boot 应用上下文中一些bean的依赖形成了一个循环:
- javascript - 如何在html中将图像提供给系统音频或视频播放器