从matlab中的文本文件中提取变量

时间:2014-04-09 16:33:09

标签: matlab

我有一个大文本文件(~3500行),其中包含来自仪器的输出数据。这包括来自不同测量的重复输入,其格式如下:

* LogFrame Start *

variablename1:value

variablename2:value

...

variablename35:value

* LogFrame End *

每个逻辑框包含35个变量。从这些我想提取两个,'VName'和'EMGMARKER'并将相关的值放在matlab数组的列中(即数组应该是(VName,EMGMARKER),然后我可以将其与另一个输出文件中的数据相关联我已经在matlab数组中了。我不知道从哪里开始为了从这个文件中提取变量,因此到目前为止我在互联网上的搜索都没有成功。对此的任何建议都将非常感激。

2 个答案:

答案 0 :(得分:0)

您可以使用textscan:

C = textscan(file_id,'%s %f');

然后你像这样提取感兴趣的变量:

VName_indices = strcmp(C{1},'VName:');
VName = C{2}(VName_indices);

答案 1 :(得分:0)

如果变量名称,那么' VName'和' EMGMARKER' ,总是一样的,你可以只读取文件并搜索包含它们的行并从那里提取数据。我不知道它们包含哪些值,因此在提取它们时可能不得不使用单元格而不是数组。

fileID = fopen([target_path fname]); % open .txt file

% read the first line of the specified .txt file
current_line = fgetl(fileID);
counter = 1;

% go through the whole file
while(ischar(current_line))

if ~isempty(strfind(current_line, VName))
     % now you find the location of the white space delimiter between name and value
     d_loc = strfind(current_line,char(9));% if it's tab separated - so \t
     d_loc = strfind(current_line,' ');% if it's a simple white space
     variable_name{counter} = strtok(current_line);% strtok returns everything up until        the first white space
     variable_value{counter} = str2double(strtok(current_line(d_loc(1):end)));% returns everything form first to second white space and converts it into a double
end


% same block for EMGMARKER

counter = counter+1;
current_line = fgetl(fileID);% next line
end

您对EMGMARKER执行相同的操作,并且您的单元格包含您需要的数据。