2

これは私には理解できない奇妙な問題です。TCL 8.5 を使用しており、コマンドを使用して CSV ファイルからマトリックスにデータを読み込もうとしていますcsv::read2matrix。ただし、これを行うたびに、書き込もうとしているマトリックスは無効なコマンドであると表示されます。私がやっていることのスニペット:

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 の Web サイトには、この種のものについては何も言及されておらず、パッケージのすべての 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 に答える