2

这是一个奇怪的问题,我似乎无法弄清楚。我正在使用 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
}

当我在 TCLSH 中运行此代码时,我收到此错误:

invalid command name "iostdm"

据我所知,我的代码是正确的(当我没有将它放在命名空间中时。我尝试了namespace import ::csv::* ::struct::matrix::*它并没有做任何事情。

这些包裹有什么我缺少的吗?wiki.tcl.tk 网站上没有任何内容提及此类内容,并且所有软件包的 man 包都没有提及在另一个名称空间中调用的任何内容。

4

2 回答 2

2

问题是iostdm是在iostandards命名空间内定义的。这意味着,它应该被引用为iostandards::iostdm,这就是你应该如何传递给csv::read2matrix

    csv::read2matrix $fid iostandards::iostdm {,}

更新

我注意到您在阅读之前对矩阵添加 6 列进行了硬编码。更好的方法是告诉csv::read2matrix自动扩展矩阵:

    csv::read2matrix $fid iostandards::iostdm , auto
于 2013-02-19T08:20:20.570 回答
1

我想添加到 Hai Vu 的答案

根据我的测试,对于诸如 csv::read2matrix 和 csv::write2matrix 之类的命令,如果您有嵌套的命名空间,看来您必须转到最高的命名空间。

我有一个结构是......

csv::read2matrix $fid ::highest::higher::high::medium::low::iostdm , auto
于 2013-09-10T15:42:32.830 回答