TCL在将csv数据写入命名空间内的矩阵时抛出无效的命令名

TCL在将csv数据写入命名空间内的矩阵时抛出无效的命令名,csv,tcl,Csv,Tcl,这是一个我似乎无法理解的奇怪问题。我正在使用TCL 8.5,我正在尝试使用CSV::read2matrix命令将数据从CSV文件读取到矩阵中。但是,每次我这样做时,它都会说我试图写入的矩阵是无效的命令。我正在做的事情的片段: package require csv package require struct::matrix namespace eval ::iostandards { namespace export * } proc iostandards::parse_stds

这是一个我似乎无法理解的奇怪问题。我正在使用TCL 8.5,我正在尝试使用
CSV::read2matrix
命令将数据从CSV文件读取到矩阵中。但是,每次我这样做时,它都会说我试图写入的矩阵是无效的命令。我正在做的事情的片段:

package require csv
package require struct::matrix

namespace eval ::iostandards {
    namespace export *
}

proc iostandards::parse_stds { io_csv } {
    # Create matrix
    puts "Creating matrix..."
    struct::matrix iostdm

    # Add columns
    puts "Adding columns to matrix..."
    iostdm add columns 6

    # Open File
    set fid [open $io_csv r]
    puts $fid

    # Read CSV to matrix
    puts "Reading data into matrix..."
    csv::read2matrix $fid iostdm {,}

    close $fid
}
在Tcsh中运行此代码时,会出现以下错误:

invalid command name "iostdm"
据我所知,我的代码是正确的(当我没有将其放入命名空间时)。我尝试了
命名空间导入::csv::*::struct::matrix::*
,但它没有做任何事情


这些包有什么我不知道的吗?wiki.tcl.tk网站上没有提到类似的内容,包的所有man包都没有提到在另一个名称空间中被调用的任何内容。

问题是,iostdm是在iostandards名称空间中定义的。这意味着uld被引用为iostandards::iostdm,这就是您应该如何传递到
csv::read2matrix

    csv::read2matrix $fid iostandards::iostdm {,}
更新 我注意到您在阅读之前硬编码了向矩阵添加6列。更好的方法是告诉
csv::read2matrix
自动展开矩阵:

    csv::read2matrix $fid iostandards::iostdm , auto

我想补充海武的回答

根据我的测试,对于csv::read2matrix和csv::write2matrix等命令,如果您有嵌套的名称空间,那么似乎必须转到最高的名称空间

我有一个案例,结构是

csv::read2matrix $fid ::highest::higher::high::medium::low::iostdm , auto

谢谢你的回复!我应该知道得更清楚。谢谢你的评论。这有助于解释我在一些嵌入式包装中看到的很多东西。