#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 обратную косую черту (
). Вместо этого рассмотрите либо
- Использование
filesep
для системного разделителя файлов
filename = [selpath, filesep, filename];
- Или используйте
fullfile
для построения пути для вас
filename = fullfile(selpath, filename);