2009-10-15 45 views
5

我在Linux和Windows XP上運行MATLAB。我的文件在所有使用的計算機之間同步,但由於Linux和Windows之間的目錄結構不同,我必須爲不同的操作系統分別導入和導出行。目前,我只是註釋掉了錯誤的OS行了,但我想知道是否可以寫類似:根據正在執行的操作系統,MATLAB腳本可能有不同的行爲?

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

這也是適用於其中一個要執行的情況更普遍的問題系統命令從MATLAB內部使用system('command')

+0

感謝大家的出色答案。雖然Amro是我的問題的直接解決方案,但我從迄今爲止的4個答案(Amro,Mark,Edric和Adrian的答案)中學到並實施了一些東西。 – 2009-10-16 22:12:11

回答

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 
+0

謝謝Amro!這正是我所期待的。 – 2009-10-15 22:17:24

2

如果目錄結構中你的主目錄你可以嘗試建立一個可以在兩個平臺上使用的單一路徑,如下所示(我的Matlab有點粗糙,所以一些語法可能不是10 0%):

  1. here如何獲得主目錄爲用戶
  2. 創建路徑如下(filesep是返回文件分隔符爲你所運行的平臺功能)

    文件路徑= [USERDIR filesep 'mypath中' filesep 'inputfile.csv']

  3. 讀取文件

    數據文件= csvread(文件路徑)

否則與Amros答案。它更簡單。

+0

謝謝馬克。在這種情況下,由於Dropbox將其命名爲Linux和Windows上的目錄,路徑並不完全相同,但這是解決問題的良好通用解決方案,也是我非常欣賞的事情。 – 2009-10-15 22:23:58

3

只是爲了一個小點添加到現有的很好的答案,我傾向於構建需要在UNIX和Windows變種工作路徑時,那些知道如何正確處理斜槓使用filepartsfullfile

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 

,如果我需要更改文件的閱讀方式,或許與另外一個新功能的方式,它只是一個來換行。此外,它保持錯誤處理簡單和本地,一個錯誤語句可以處理任何格式。

3

除了在此處使用各種技術來處理路徑和文件分隔符差異之外,您應該考慮簡單地嘗試避免將絕對路徑編碼到腳本中。如果你必須使用它們,儘量把它們放在儘可能少的文件中。這將使您的移植工作變得最簡單。

一些想法:

  • 在一些早期的入口點或配置文件設置一個fileRoot變量。使用fullfile或任何其他技術來構建完整路徑。
  • 始終使用相對路徑,相對於用戶的操作位置。這可以使用戶輕鬆地將輸入/輸出放在任何需要的地方。
  • 參數化您的函數條目處的輸入和輸出路徑(例如,通過系統特定的上下文對象)。
相關問題