Команда Matlab fopen отвечает на строку, но не на переменную, равную той же строке - PullRequest
2 голосов
/ 01 апреля 2011

Мне интересно, сможет ли кто-нибудь пролить свет на следующую проблему с помощью команды Matlab fopen:

>> [stat myjob] = unix('echo $PBS_NODEFILE'); % gets PBS file name with allocated nodes  
>> myjob

myjob =

/opt/torque/aux//66058.crunch.local


>> fid = fopen('/opt/torque/aux//66058.crunch.local')

fid =

     3

>> fgetl(fid)

ans =

compute-9-2

>> fclose(fid);

Мне нужны имена узлов, которые я должен контролировать для некоторых последующих решений в сценарии. Вышесказанное может работать, если я нахожусь в интерактивной работе PBS, но по большей части, хотя мне нужно запустить эти задания без вмешательства. Когда я пытаюсь сделать это по сохраненному имени файла:

>> fid = fopen(myjob) % returns invalid                               

fid =

    -1

>> fgetl(fid)                                        
??? Error using ==> fgetl at 44
Invalid file identifier.  Use fopen to generate a valid file identifier.

Почему, когда я непосредственно ввожу значение, сохраненное в myjob, я получаю действительный идентификатор, но когда я добавляю myjob, он не работает?

Спасибо, Andrew

1 Ответ

3 голосов
/ 01 апреля 2011

Попробуйте сделать следующее:

fid = fopen(deblank(myjob));

Если посмотреть, как ваш вывод отформатирован выше, появляется дополнительная пустая строка, появляющаяся после отображения значения myjob, которое указывает, что может бытьсимвол новой строки, появляющийся в конце строки.Эта новая строка приведет к тому, что имя файла не будет распознано, так что вы можете удалить любой завершающий пробел, как этот, из строки с функцией DEBLANK (или вы можете удалить конечные и начальные пробелы с помощьюфункция STRTRIM ).

...