我在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中执行系统命令的情况。
答案 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变体的路径时,我倾向于使用fileparts
和fullfile
,因为那些知道如何处理斜线正确。
答案 3 :(得分:3)
除了使用此处的各种技术来处理路径和文件分隔符差异之外,您还应该考虑简单地尝试避免在脚本的绝对路径中进行编码。如果必须使用它们,请尝试将它们放在尽可能少的文件中。这将使您的移植工作变得最简单。
一些想法:
fileRoot
变量。使用fullfile
或任何其他技术构建完整路径。答案 4 :(得分:2)
如果目录结构在你的主目录中,你可以尝试构建一个可以在两个平台上使用的单一路径,如下所示(我的Matlab有点粗糙,因此一些语法可能不是100%):
按如下方式创建路径(filesep是一个返回正在运行的平台的文件分隔符的函数)
filepath = [userdir filesep'MyPath'filesep'inputfile.csv']
阅读文件
datafile = csvread(filepath)
否则请使用Amros的答案。它更简单。