Octave отказывается иметь дело со строками, которые я передаю csvread () - PullRequest
1 голос
/ 13 января 2012

Итак, я работаю над сценарием 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 Ответ

3 голосов
/ 17 января 2012

Проблема в том, что вы создаете исполняемый скрипт Octave, который ожидает аргументы, но не предоставляет никаких аргументов.

Прежде всего, я бы запустил файл как

#!/usr/bin/octave -qf

Тогда можнозапустите скрипт как

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

Но, на мой взгляд, argv () ведет себя немного странно, потому что, когда аргументы -say myscript.sh- не передаются, он возвращает имя исполняемого скрипта, но когдадан один или несколько аргументов, он содержит только аргументы.

Вы можете обратиться к Разделу 2.6 документации для "Исполняемых программ Octave".

...