小编Pun*_*tal的帖子

.tbc到.tcl文件

这是一个奇怪的问题,我搜索但找不到任何满意的答案.

我有一个编译tcl文件即.tbc文件.那么有没有办法将此.tbc文件转换回.tcl文件.

在这里读到有人提到::tcl_traceCompile并说过这可以用来反汇编.tbc文件.但作为新手tcl用户,我不确定这是否可行,或者说更多,如何使用它.

虽然我知道tcl编译器不会编译所有语句,因此可以在.tbc文件中轻松查看这些语句,但我们可以tcl.tbc文件中获取整个语句.

任何评论都会很棒.

tcl

5
推荐指数
1
解决办法
6228
查看次数

为什么我们需要在tcl中嵌套过程

嗨,我一直在使用tcl脚本近一年,现在完全了解它的基本知识.但今天我刚刚遇到嵌套程序,这有点奇怪,因为我没有使用它.

无论如何,我在这里阅读有关嵌套proc的内容,但没有明确我们为什么需要它.

文章说,因为proc在命名空间中是全局的,所以要创建一个本地proc,你可以创建嵌套的proc.

    proc parent {} {
        proc child {} {
            puts "Inside child proc";
        }
        ...   
    }
Run Code Online (Sandbox Code Playgroud)

现在,我能想到的一种用法就像

    proc parent {} {
        proc child {intVal} {
            puts "intVal is $intVal";
        }
        puts "[::child 10]";
        ... #some processing
        puts "[::child 20]";
        ... #some processing
        puts "[::child 30]";
        ... #some processing
        puts "[::child 40]";
        ... #some processing
        puts "[::child 50]";
        ... #some processing
    }
Run Code Online (Sandbox Code Playgroud)

所以现在子proc是父proc的本地,只能在parent proc中使用.而且据我所知,当你想在父proc中的多个地方进行相同的处理时它很有用.

现在我的困惑是,这是嵌套proc的唯一用途还是还有其他我不理解的东西??? 我的意思是嵌套proc似乎是一种私有过程.

所以请详细说明并帮助我理解嵌套过程的使用.

nested tcl procedures

4
推荐指数
1
解决办法
3007
查看次数

如何在tcl中执行子串提取和替换

我试图从Tcl中的字符串中提取子字符串.我编写了代码并且能够做到,但我想知道是否还有其他有效的方法可以做到这一点.所以确切的问题是我有一个字符串

name_ext_10a.string_10a.string.string.string

我想提取" name_ext",然后删除" _"并将其替换为" ."; 我终于希望输出为" name.ext".我写了这样的东西:

set _File "[string replace $_File [string last "_" $_File] [string length $_File] "" ]"
set _File "[string replace $_File [string last "_" $_File] [string length $_File] "" ]"
set _File "[string replace $_File [string last "_" $_File] [string last "_" $_File] "." ]"
Run Code Online (Sandbox Code Playgroud)

这给了我想要的确切输出,但我想知道在Tcl中是否还有其他有效的方法可以做到这一点.

string tcl

3
推荐指数
1
解决办法
6001
查看次数

tcl中的正则表达式无法正常工作

这个东西杀了我,我想我在tcl正则表达式中缺少非常基本的概念.我有以下代码

foreach line $data {
    if {[regexp {^(\#|\s)} $line]} {continue;} else {[lappend $puneet "$line"];}
}
Run Code Online (Sandbox Code Playgroud)

所以我有可变行,它可以有一个' #'作为它的第一个字符,或' \s'空格或普通的字母数字字符.现在我想要的是创建一个仅包含字母数字字符作为第一个字符的行列表.

但由于某些我无法找到的语法问题,上面的代码似乎没有给出所需的输出.这是非常基本的,但由于我仍然是正则表达式的新手,我不确定我是否遗漏了上述表达式中的任何括号.

regex tcl

3
推荐指数
1
解决办法
142
查看次数

只读模式下的 tk 条目背景颜色更改

嗨,我有一个要求,我需要创建表格并且单元格是只读的。但是随着只读模式,单元格需要有彩色背景。现在有了给定的选项,我尝试做类似下面的事情,但没有运气。由于我正在学习 GUI 设计,我不确定使用给定命令是否可以使用只读模式获取彩色背景:

package require Tk
set val1 "12";
set cols 5;
set rows 5;
set cell 0;

set mytable [table .tb -cols $cols -rows $rows]; 
set myentry [entry .e1 -textvariable val1 -state readonly -background red];
#set myentry [entry .e1 -textvariable val1 -background red];
set myentry1 [entry .e2 -textvariable val1 -state readonly -background yellow];
#set myentry1 [entry .e2 -textvariable val1 -background yellow];

$mytable window configure 0,1 -window $myentry;
$mytable window configure 3,0 -window $myentry1;

pack $mytable -fill both -expand true; …
Run Code Online (Sandbox Code Playgroud)

tk-toolkit tcl gtkentry

3
推荐指数
1
解决办法
2168
查看次数

如何检查文件是否已在 tcl 中打开

我有一个 tcl 程序,在其中打开一个文件,如果不存在则创建用于写入。现在我正在其中记录一些 put 语句以进行调试。现在,在此过程结束时,我关闭该文件。但在中间我正在调用另一个过程,我也需要在该过程中的这个打开的文件中写入一些内容。所以我想做这样的事情:

proc ::myproc {args} { 
  set fp [open "C:\\log.txt" w+];
  puts $fp "Checkpoint 1";
  set retVal [::myprocII];
  puts $fp "Checkpoint 2";
  close $fp;
  return 1;
}

proc ::myprocII {} {
  set fp [open "C:\\log.txt" w+];
  puts $fp "Checkpoint 3";
  close $fp;
  return 1;
}
Run Code Online (Sandbox Code Playgroud)

那么,当我在 myprocII 中打开同一文件并记录数据并关闭它时,这不是导致错误或异常的原因吗?然后,即使在关闭 myprocII 中的文件后,我仍在调用 proc myproc 中记录数据。我尝试对此进行测试,但由于我是从批处理文件运行它,因此在我弄清楚错误是什么之前窗口会关闭。

所以我想知道这是否正确,或者如果不正确,我如何继续将来自不同程序的数据附加到同一日志文件中。

file-io tcl

1
推荐指数
1
解决办法
3057
查看次数

在tcl中连接两个字符串

我需要在tcl中连接两个字符串,然后修改连接字符串,如果有任何不需要的字符,如'_'.字符串存储在tcl变量中,我面临的问题是我需要连接这两个字符串"$str1_$str2".基本上将两个字符串连接'_'在它们之间.我找到了如下方法.

    set str1 "mystring1";  #string 1
    set str2 "mystring2";  #string 2. This string could be Empty String as well.

    set outString [append outString "_" $str2];
    set outString [string trimright '_'];
Run Code Online (Sandbox Code Playgroud)

这给了我outString的值如下:

    puts $outString;  
    mystring1_mystring2    #if $str2 is not empty
    mystring1              #if $str2 is empty. 
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种更优化的方式来完成我的任务.我试着简单地加入两个字符串

    set outString "$str1_$str2"
Run Code Online (Sandbox Code Playgroud)

但我得到的错误是"没有像$ str1_这样的变量",因为'_'下划线可以是变量名的一部分.

任何建议,将不胜感激.

string tcl string-concatenation

1
推荐指数
1
解决办法
1806
查看次数

c ++中的结构体结构中的模板问题

我在c ++中有一个结构,它是这样的:

struct mystruct {
  template <typename T>
  T myproc() {
    std::cout << "RETURNING T";
    return T();
  }
};
Run Code Online (Sandbox Code Playgroud)

现在这个结构已经存在(这只是精确结构的示例副本),我需要使用它.我想要做的是调用如下方法myproc():

    int _tmain(int argc, _TCHAR* argv[])
    {
      mystruct dummystruct;
      int y = dummystruct.myproc();
      return 0;
    }
Run Code Online (Sandbox Code Playgroud)

但它给了我这个编译错误:

    error C2783: 'T mystruct::myproc(void)' : could not deduce template argument for 'T'
    see declaration of 'mystruct::myproc'
Run Code Online (Sandbox Code Playgroud)

我知道是因为编译器无法知道是什么T.

所以我的问题是,结构中的函数声明是否合适?我不这么认为,但是这段代码已经存在于我们的一个旧代码中,所以我认为我应该得到别人的意见.

所以我知道这是错的,但如果有人认为它是正确的,请解释我如何使用它.

c++ templates struct

0
推荐指数
2
解决办法
83
查看次数

在tcl中创建和附加现有数组

大家好我需要一些关于tcl数组的帮助.我在tcl中有两个程序,如下所示:

    proc A {} {
      set lst_A [list];
      if {true} {
        lappend lst_A [::B $file1];
      } else {
        foreach id $allId {
          lappend lst_A [::B $id];
        }
      }
      return $lst_A;
    }

    proc B {fileID} {
      set fileName [::getFileName $fileID];  # getFileName returns filename from fileid
      set tcName "[set ItemName]_[set ItemId]";
      array set tcArrayName {$fileName $tcSpec};
      return $tcArrayName;
    }
Run Code Online (Sandbox Code Playgroud)

现在我想创建一个数组,它将是一个键值对,其中key是某种文件id,value是与该id相关联的名称.现在问题是在proc A中,如果条件为真,我想创建只有一个键值对的数组,然后将该数组附加到lst_A,在这种情况下,它只包含一个项,即返回的数组.但是如果条件是假的,那么我遍历一些id并且对于每个id,我调用proc B并创建数组,然后将其附加到lst_A,在这种情况下,它将包含多个键值配对数组.

所以我编写了上面两个程序,并在阅读了tcl教程中的数组后创建了数组.但不确定这是正确的方式还是最优化的方式.

我的最终目标是创建一个lst_A或者我会说应该是一个数组,如果条件为真,它将只包含一个键值对,否则将是一个具有多个键值对的数组.因为我在proc B中创建数组,所以我只能想到将proc B中的键值对作为数组返回,然后将该数组附加到列表中,即proc A中的lst_A.

有什么建议???

arrays tcl

0
推荐指数
1
解决办法
5748
查看次数