用于删除单词残缺时间的 tcl 命令



我想将 .v 文件转换为 .VHD,所以有很多行assign语句.想要删除所有分配的单词。那么是否有任何TCL命令,我使用的是VIVADO 2018.2。

例如,我有以下输入文本:

分配内存[0]=4B'0000; 分配内存[1]=4'B0001; ................. 分配内存[511]=4'B1010;

我想一次删除所有assign单词,因为要转换.V 文件到 。VHDL

在这种情况下,我们希望专门删除一个单词,而不仅仅是字符序列assign(因为谁知道还会在哪里出现?正确的工具是使用regsub命令,以便我们可以指定我们希望匹配单词边界:

set content [regsub -all {yassigny} $content ""]

其中的y与单词边界匹配。正是我们需要的!(用空字符串替换是删除内容的明显方法。

要将其转换为完全转换,我们需要添加代码以读取文件并再次将其写出。

set filename_in "something.V"
set filename_out "something.vhdl"
# Standard pattern for reading a whole file
set f [open $filename_in]
set content [read $f]
close $f
set content [regsub -all {yassigny} $content ""]
# Standard pattern for writing a whole file
set f [open $filename_out "w"]
puts -nonewline $f $content
close $f

-nonewline是因为当我们阅读内容时,我们保留了所有行分隔符,并且我们的转换没有触及它们。Wwe 不想在最后添加任何奖励;如果您在文件上进行许多转换,这可能会很烦人。


如果文件非常大,一次处理一些东西会有很大帮助。在这种情况下,这很容易,因为我们不是要进行多行匹配。

set filename_in "something.V"
set filename_out "something.vhdl"
set f_in [open $filename_in]
set f_out [open $filename_out "w"]
while {[gets $f_in line] >= 0} {
set line [regsub -all {yassigny} $line ""]
puts $f_out $line
}
close $f_in
close $f_out

请注意,此模式无法写回同一文件。

最新更新