2010-10-06 31 views
1

關於我想要的內容摘要:如果我將文件名作爲函數的參數,如何將該文件名包含在路徑位置中,使得路徑位置中的文件名是一個用戶輸入的。如果你不明白我在說什麼,然後閱讀下面的解釋:如何在Matlab中將通用文件名稱作爲函數參數包含在路徑位置中?

二次說明:

我提出這要求呼叫被叫CMG軟件的通用功能。該軟件需要一個.dat文件,其名稱作爲函數中的參數,其參數中的通用名稱爲ReservoirModel_CMGBuilder。正如您在下面的部分代碼中看到的,這個ReservoirModel_CMGBuilder文件保存在我輸入的路徑位置的文件夾中。但是,問題在於文件名是用引號引起的,所以它不能識別代碼中的文件名。我想要的是從用戶那裏獲取CMG所需的.dat文件名的名稱,並將其存儲在名稱ReservoirModel_CMGBuilder中,然後在路徑位置使用該名稱來提取該文件。

同樣我想爲Reportq_rwdReportq_rwo做這件事。我怎樣才能做到這一點?

function [q_yearly,Swav_yearly]=q_from_CMG_general(nModel,nCell,T,ReservoirModel_CMGBuilder,poro_models_gslib_file,perm_models_gslib_file,Reportq) 

ReservoirModel_CMGBuilder=[ReservoirModel_CMGBuilder '.dat']; % string concatenation 
Reportq_rwd=[Reportq '.rwd']; 
Reportq_rwo=[Reportq '.rwo']; 

poro_models=gslib_file_to_matlab_var(nModel,nCell,poro_models_gslib_file); 
perm_models=gslib_file_to_matlab_var(nModel,nCell,perm_models_gslib_file); 

%% loop to run all nModel 

for model_no=1:nModel 

    %% Writing the porosity and permeability model one at a time in .inc file, which will be read and will work as input to porosity and permeability models in CMG 

    dlmwrite('poro_model.inc',poro_models(:,model_no),'delimiter','\n'); 
    dlmwrite('perm_model.inc',perm_models(:,model_no),'delimiter','\n'); 

    %% Prior to driling an exploratory well or acquiring a seismic with just 5 producing wells 

    %# Calls CMG 
    system('mx200810.exe -f "C:\Documents and Settings\HSingh2\Desktop\Work\Model - SGEMS, CMG and MATLAB\ReservoirModel_CMGBuilder"') % Calls CMG 

    %# Calls parameter report file and generates output file 
    system('report.exe /f Reportq_rwd /o Reportq_rwo') 

回答

3

如果您連接是這樣的:

['foo"' bar '"baz'] 

你得到一個字符串是這樣的:foo"bar"baz

因此,對於你的問題:

system(['mx200810.exe -f "C:\Documents and Settings\HSingh2\Desktop\Work\Model - SGEMS, CMG and MATLAB\' ReservoirModel_CMGBuilder '"']) % Calls CMG 

%# Calls parameter report file and generates output file 
system(['report.exe /f "' Reportq_rwd '" /o "' Reportq_rwo '"']) 

這可能是更容易使用sprintf

system(sprintf('mx200810.exe -f "%s"', ... 
    fullfile('c:', 'Documents and Settings', 'HSingh2', ... 
      'Desktop', 'Work', 'Model - SGEMS, CMG and MATLAB', ... 
      ReservoirModel_CMGBuilder))); 

還沒有使用fullfile來構造路徑名 - 它會自動插入正確的路徑分隔符。請注意,如果您想在sprintf中使用\,則需要使用反斜槓進行轉義。

+0

太快了!謝謝 :) – Pupil 2010-10-06 01:14:43

相關問題