TCL在将csv数据写入命名空间内的矩阵时抛出无效的命令名
这是一个我似乎无法理解的奇怪问题。我正在使用TCL 8.5,我正在尝试使用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
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
谢谢你的回复!我应该知道得更清楚。谢谢你的评论。这有助于解释我在一些嵌入式包装中看到的很多东西。