MATLAB脚本是否可能根据正在执行的操作系统的不同而表现不同?

时间:2009-10-15 21:41:18

标签: matlab cross-platform operating-system

我在Linux和Windows XP上运行MATLAB。我的文件在我使用的所有计算机中同步,但由于Linux和Windows之间的目录结构不同,我必须为不同的操作系统分别设置导入和导出行。目前我只是为错误的操作系统注释了这一行,但我想知道是否可以编写类似的内容:

if OS == Windows
    datafile = csvread('C:\Documents and Settings\Me\MyPath\inputfile.csv');
else
    datafile = csvread('/home/Me/MyPath/inputfile.csv');
end

这也是一个更普遍的问题,适用于需要使用system('command')在MATLAB中执行系统命令的情况。

5 个答案:

答案 0 :(得分:7)

您可以使用 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

答案 1 :(得分:4)

为了跟进Amro的回答,我只是发表评论,但对代码的格式化感到困惑。

我更喜欢从文件读取中分离操作系统选择。

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

这样,如果我需要改变文件的读取方式,可能还有另一个函数,它只需改变一行。它还使错误处理保持简单和本地,一个错误语句可以处理任何一种格式。

答案 2 :(得分:3)

只是为现有的好答案添加一个小点,在构建需要适用于UNIX和Windows变体的路径时,我倾向于使用filepartsfullfile,因为那些知道如何处理斜线正确。

答案 3 :(得分:3)

除了使用此处的各种技术来处理路径和文件分隔符差异之外,您还应该考虑简单地尝试避免在脚本的绝对路径中进行编码。如果必须使用它们,请尝试将它们放在尽可能少的文件中。这将使您的移植工作变得最简单。

一些想法:

  • 在某个早期入口点或配置文件中设置fileRoot变量。使用fullfile或任何其他技术构建完整路径。
  • 始终使用相对于用户操作位置的相对路径。这可以使用户轻松将输入/输出放在任何需要的位置。
  • 参数化函数条目的输入和输出路径(例如,通过系统特定的上下文对象)。

答案 4 :(得分:2)

如果目录结构在你的主目录中,你可以尝试构建一个可以在两个平台上使用的单一路径,如下所示(我的Matlab有点粗糙,因此一些语法可能不是100%):

  1. 有关如何获取用户的主目录的信息,请参阅here
  2. 按如下方式创建路径(filesep是一个返回正在运行的平台的文件分隔符的函数)

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

  3. 阅读文件

    datafile = csvread(filepath)

  4. 否则请使用Amros的答案。它更简单。