如何创建可以计算总位数的TCL或perl脚本,如果存在不匹配,那么脚本应该为剩余位添加0

时间:2016-09-27 15:00:23

标签: regex perl tcl tk

我想创建一个TCL或perl脚本,它将比较数量和位数总数,如果不匹配,则在开头放置0: 文件的部分内容:

// DEBUG: TDO     : 16'b1
// DEBUG: STEP #  : 3
// DEBUG: TDI     : 35'b1011101001011110100000100100100
// DEBUG: TDO     : 35'b0xx001011101001011110100000100100100
// DEBUG: LOAD_DR ( 35 , 35'b1011101001011110100000100100100 ) ;
// DEBUG: STEP  #  : 4
// DEBUG: LOAD_NOP ( 2 ) ;
// DEBUG: STEP #  : 5
// DEBUG: TDI     : 8'b1011101001011110100000100100101
// DEBUG: TDO     : 8'b100
// DEBUG: LOAD_DR ( 35 , 35'b1011101001011110100000100100101 ) ;

这里,对于某些TDO,位不完整。 例如:  8'b100,这里只有3位,但是数字是8,所以无论在哪种情况下,我都需要在开头为剩余位添加额外的0。对于8'b100输出应该是8'b 00000 < / strong> 100,此脚本应替换原始文件中的此位,而不会影响文件的任何其他内容:

通过脚本进行所需更改后,预期输出的部分内容为8'b100

// DEBUG: STEP #  : 5
// DEBUG: TDI     : 8'b1011101001011110100000100100101
// DEBUG: TDO     : 8'b00000100

TCL脚本是首选,但Perl也没问题。

2 个答案:

答案 0 :(得分:2)

我不打算给你代码,因为那不是Stack Overflow的用途。但是我会告诉你程序员如何考虑这个任务。

编程就是将任务分解为更小的任务。那么我们需要做什么呢?

  • 一次读取你的输入(它来自哪里?是一个文件吗?它是否通过管道进入你的程序,所以你从STDIN读取它?)
  • 识别您需要调查的行。你如何识别包含二进制数的行?
  • 对于您不需要处理的行,请将它们不加改变地写入您的输出(是文件吗?)
  • 对于需要处理的行,如何将数据拆分为可以调查的令牌?
  • 如何衡量二进制数的长度?
  • 二进制数的正确长度是多少?
  • 如何将二进制数填充到正确的长度?

考虑这些问题的答案。如果任何问题太大而无法回答,那么请考虑将其分解为较小的问题。通过查看任务规范,您可以回答一些问题。其中一些你需要通过阅读编程语言参考书来获得答案。

尝试一下。如果您有代码可以执行某些操作(即使它没有解决问题的每个部分),请回到此处并更新您的问题以包含您的代码。解释什么有效,以及你遇到什么问题。问我们明确的问题。我们会尽力帮助您。

答案 1 :(得分:0)

既然你有机会前进,我就是这样解决的:

set fh [open filename r]
while {[gets $fh line] != -1} {
    if {[regexp {(.* TDO\s+: (\d+)'b)([01]+)\M} $line -> prefix len bits]} {
        set line [format "%s%0*s" $prefix $len $bits]
    }
    puts $line
}
close $fh

见: