1

次のように構成された「test.txt」というテキストファイルをMatlabに読み込んでいます。

$variable1 = answer1; 
$variable2 = answer2;
$variable3 = answer3;

次のコードセグメントを使用して、テキストファイルをMatlabに1行ずつ読み込みます。

fid = fopen('test.txt.');
tline = fgetl(fid);
tracks = {};
while ischar(tline)
    tracks{end+1} = regexp(tline, '(?<=^.*\=\s*)(.*)(?=\s*;$)', 'match', 'once');
    tline = fgetl(fid);
end
fclose(fid);

このコードは、各変数の値を1行ずつ返し、次のように出力します。

answer1
answer2
answer3

私がやりたいのは、取得する変数の名前を指定して、指定された変数に割り当てられた値をMatlabに出力させることができるように、正規表現式を変更することです。

たとえば、コードで$ variable2の値を見つけるように指定すると、Matlabは次のように返します。

answer2

よろしく

4

1 に答える 1

2

考えられる解決策の1つ:

function [tracks] = GetAnswer(Filename, VariableName)
fid = fopen(Filename);
tline = fgetl(fid);
tracks = {};

% prefix all $ in VariableName with \ for `regexp` and `regexprep`
VariableName = regexprep(VariableName, '\$', '\\$');

while ischar(tline)
    if (regexp(tline, [ '(', VariableName, ')', '( = )', '(.*)', '(;)' ]))
        tracks{end+1} = regexprep(tline, [ '(', VariableName, ')', '( = )', '(.*)', '(;)' ], '$3');
        % if you want all matches (not only the 1st one),
        % remove the following `break` line.
        break;
    end
    tline = fgetl(fid);
end

fclose(fid);
return

あなたはそれをこのように呼ぶことができます:

Answer = GetAnswer('test.txt', '$variable2')

Answer = 
'answer2'
于 2012-04-16T18:26:52.153 に答える