2012-04-16 37 views
1

我讀的文本文件到Matlab返回一個變量的值稱爲「test.txt的」,這是結構如下:在Matlab使用正則表達式從文本文件

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

我讀的文本文件到Matlab逐行使用下面的代碼段:

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); 

這一段代碼由線返回每個可變線的值,並且將輸出:

answer1 
answer2 
answer3 

我想要做的是修改我的regexp表達式,以便我可以指定要檢索的變量的名稱並使Matlab輸出分配給指定變量的值。

E.g.如果我在我的代碼找到$變量2的值來指定,MATLAB將返回:

answer2 

問候

回答

2

一個可能的解決方案:

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'