Для сценария MATLAB действительно ли возможно вести себя по-другому в зависимости от ОС, на которой это выполняется?

6
задан Ethan White 15 October 2009 в 21:41
поделиться

5 ответов

Вы можете использовать ispc / isunix / ismac функции для определения платформы или даже использование функции computer для получения дополнительной информации о машине

if ispc
    datafile = csvread('C:\Documents and Settings\Me\MyPath\inputfile.csv');
else
    datafile = csvread('/home/Me/MyPath/inputfile.csv');
end
7
ответ дан 8 December 2019 в 12:21
поделиться

Чтобы добавить незначительный момент к существующим хорошим ответам, я обычно использую fileparts и fullfile при построении путей, которые должны работать на обоих Варианты UNIX и Windows, так как они умеют правильно работать с косой чертой.

3
ответ дан 8 December 2019 в 12:21
поделиться

Если структуры каталогов находятся в вашем домашнем каталоге, вы можете попробовать создать один путь, который можно использовать на обеих платформах, следующим образом (мой Matlab немного груб, поэтому некоторые синтаксисы могут быть 100%):

  1. См. здесь , чтобы узнать, как получить домашний каталог для пользователя
  2. Создайте путь следующим образом (filesep - это функция, которая возвращает разделитель файлов для платформы, на которой вы работаете )

    filepath = [userdir filesep 'MyPath' filesep 'inputfile.csv']

  3. Прочтите файл

    datafile = csvread (filepath)

В противном случае используйте ответ Амроса. Это проще.

2
ответ дан 8 December 2019 в 12:21
поделиться

Чтобы продолжить ответ Амро, Я собирался просто сделать комментарий, но боролся с форматированием кода.

Я бы предпочел отделить выбор ОС от прочитанного файла.

if ispc 
    strFile = 'C:\Documents and Settings\Me\MyPath\inputfile.csv'; 
else 
    strFile = '/home/Me/MyPath/inputfile.csv'; 
end 

try
    datafile = csvread(strFile);
catch
    % setup any error handling
    error(['Error reading file : ',strFile]);
end

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

4
ответ дан 8 December 2019 в 12:21
поделиться

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

Некоторые идеи:

  • Установите переменную fileRoot в некоторую раннюю точку входа или в файл конфигурации. Используйте fullfile или любой другой метод для построения полного пути.
  • Всегда используйте относительные пути относительно того, где работает пользователь. Это может упростить для пользователя размещение ввода / вывода где угодно.
  • Параметризуйте пути ввода и вывода в записях функций (например, через объект контекста, специфичный для системы).
3
ответ дан 8 December 2019 в 12:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: