Как включить общее имя файла, принимаемое в качестве аргумента функции в Matlab, в расположение пути? - PullRequest
1 голос
/ 06 октября 2010

КРАТКОЕ ОПИСАНИЕ ЧЕГО Я ХОЧУ: Если я возьму имя файла в качестве аргумента функции, как мне включить это имя файла в местоположение пути, чтобы имя файла находилось в месте пути это один пользователь входит. Если вы не поняли, о чем я говорю, прочтите объяснение ниже:

ВТОРИЧНОЕ ПОЯСНЕНИЕ:

Я делаю общую функцию, которая требует вызова программного обеспечения под названием CMG. Программному обеспечению необходим файл .dat, имя которого я принимаю в качестве аргумента в функции с общим именем в качестве аргумента ReservoirModel_CMGBuilder. Как вы можете видеть из приведенного ниже частичного кода, этот файл ReservoirModel_CMGBuilder хранится в папке, путь к которой я указал. Однако проблема в том, что имя файла в кавычках, поэтому оно не идентифицирует имя файла в коде. Я хочу взять у пользователя имя файла .dat, необходимое для CMG, и сохранить его под именем ReservoirModel_CMGBuilder, а затем использовать это имя в пути, чтобы подобрать этот файл.

Точно так же я хочу сделать это для Reportq_rwd и Reportq_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')

1 Ответ

3 голосов
/ 06 октября 2010

Если вы объедините что-то вроде этого:

['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, вам нужно экранировать его с обратной косой чертой.

...