Octave拒绝处理我传递给csvread()的字符串

时间:2012-01-13 02:56:40

标签: octave

所以我正在研究Octave脚本(我对该语言相对缺乏经验),我正在尝试打开两个csv文件,这些文件的名称我作为命令行参数传递给我的脚本。这是我的剧本:

    #!/usr/bin/env octave

    function plotregs(fig, regs)
      figure(fig);
      title('Foo');
      xlabel('Value');
      ylabel('Cycle #');
      grid on;

      plot(rows(regs(:, 1)), regs(:, 1),
           rows(regs(:, 2)), regs(:, 2),
           rows(regs(:, 3)), regs(:, 3),
           rows(regs(:, 4)), regs(:, 4),
           rows(regs(:, 5)), regs(:, 5),
           rows(regs(:, 6)), regs(:, 6),
           rows(regs(:, 7)), regs(:, 7),
           rows(regs(:, 8)), regs(:, 8));

      legend('A', 'B', 'C', 'D', 'E', 'F', 'H', 'L');
    endfunction  

    args = argv ();
    filename = strcat(cellstr(args(1)));
    typeinfo filename
    regs = csvread(filename);

    graphics_toolkit("gnuplot");

    plotregs(1, regs);

    filename = strcat(cellstr(args(2)));
    regs = csvread(filename);

    plotregs(2, regs);

    pause

这是我运行脚本时得到的输出:

    ans = sq_string
    error: dlmread: FILE argument must be a string or file id
    error: called from:
    error:   /usr/share/octave/3.4.3/m/io/csvread.m at line 34, column 5
    error:   /home/tnecniv/Code/Octave/regigraph/regigraph.m at line 25, column 6

任何建议都将不胜感激

1 个答案:

答案 0 :(得分:3)

问题是您创建了一个可执行的Octave脚本,该脚本需要参数但不提供任何参数。

首先,我将文件作为

启动
#!/usr/bin/octave -qf

然后可以将脚本作为

运行
$ ./myscript.sh datafile1.csv datafile2.csv

但是在我看来argv()的行为有点奇怪,因为当没有给-say myscript.sh-赋予参数时,它返回执行脚本的文件名,但是当给出一个或多个参数时它包含参数仅

您可以参考“可执行的八度程序”文档的第2.6节。