0

我正在查询一台旧的 Tektronix 11801B 采样示波器。当我查询任何内容时,它总是返回我的结果,然后是一个设备上的“ÿ”或另一台设备上的“ÿ..”(均为同一型号)的无尽字符串。因此,我决定在查询时点击“ÿ”之前阅读所有内容。

以下是我尝试过的两种方法:

# Issue command
puts ${ChannelId} ${Command}

# Set loop variables
set Result [list]
set Byte [read ${ChannelId} 1]
set BadByte ÿ

# Loop until BadByte is found
while {![string equal -nocase ${Byte} ${BadByte}]} {

    # Append good bytes to a list
    lappend Result ${Byte}

    # Read next byte
    set Byte ::visa::read ${ChannelId} 1]
}

# Join and return result list
return [join ${Result}]

和:

# Set loop variable
set Result [list]

# Read channel 1 byte at a time until ÿ is found
while {![string equal -nocase [set Character [read ${ChannelId} 1]] "ÿ"]} {

    # Append non ÿ characters to a list
    lappend Result ${Character}
}

# Join the result and return it
return [join ${Result}]

在这两种情况下,我的循环总是返回 true 并变为无限。但是,如果我逐行运行命令行,希望一切正常。

4

1 回答 1

2

我相信问题在于您如何获取文件。默认情况下,它使用encoding system,如果您将文件保存为UTF-8 ,这是一个问题。你可以看到 Tcl 如何看到ÿchar;您可以尝试以下脚本:

binary scan ÿ c* bytes
puts $bytes

如果输出不是-1,那么情况确实如此。

避免这种情况的最好方法是\xff改用(编码 ASCII 范围之外的每个字符)。这是我不仅推荐给 Tcl 的东西,也推荐给许多其他语言,如 Java、C# 等。

因此,您有以下选择:

  • \xff改为使用ÿ
  • 使用系统编码保存您的文件(在 Tcl 中使用正确的编码打开两个文件 & fcopy 可以完成这项工作)
  • 使用正确的编码获取文件。如果使用 tclsh 调用,请使用tclsh -encoding utf-8 yourfile.tcl. 如果你使用source命令,那么source -encoding utf-8 yourfile.tcl

如果所有这些都不起作用,您可以尝试对binary scan输入进行 aÿ并查看它的外观。

于 2013-03-19T12:15:03.873 回答