Проблема скрипта Matlab между Linux и Windows

#linux #matlab

#linux #matlab

Вопрос:

Я написал скрипт в Matlab в системе Windows. Теперь я перешел на систему Linux и попытался использовать свой скрипт на Linux и в matlab. Но это не работает.

У меня возникла проблема с частью импорта данных моего скрипта:

 data = {};            
for i = 1:numel(filelist)  
  filename = filelist{i}; 
  filename = [selpath '' filename];
  delimiter = ',';
  startRow = 2;
  formatSpec = '%*q%*q%*q%q%[^nr]';
  fileID = fopen(filename,'r');
  dataArray = textscan(fileID, formatSpec, 'Delimiter', delimiter, 'TextType', 'string', 'HeaderLines' ,startRow-1, 'ReturnOnError', false, 'EndOfLine', 'rn');
  fclose(fileID);
  tmp_data = str2double(dataArray{1}); 
  data{i} = tmp_data; 
end 
 

Если я запускаю свой скрипт, я получаю следующую ошибку от matlab:

 Error using textscan
Invalid file identifier. Use fopen to generate a valid file   identifier.

Error in justus_tem (line 21)
dataArray = textscan(fileID, formatSpec, 'Delimiter', delimiter, 'TextType', 'string', 'HeaderLines' ,startRow-1, 'ReturnOnError',
false, 'EndOfLine', 'rn');
 

Когда я запускаю тот же скрипт в Windows, я не получаю сообщение об ошибке. В системе Linux fileID всегда -1
У кого-нибудь есть совет или знает, что я делаю не так? Я пробовал разные разрешения fopen , но это тоже не работает.

Комментарии:

1. Вы пытались посмотреть, что filename содержит переменная в Linux?

2. Поэтому большинство языков программирования имеют что-то вроде mathworks.com/help/matlab/ref/filesep.html

Ответ №1:

Linux использует косую черту ( / ) в качестве разделителя файлов, вы жестко запрограммировали совместимую с Windows обратную косую черту ( ). Вместо этого рассмотрите либо

  1. Использование filesep для системного разделителя файлов
 filename = [selpath, filesep, filename];
 
  1. Или используйте fullfile для построения пути для вас
 filename = fullfile(selpath, filename);