我有多个文本文件,每个都是模拟的结果。该文件的内容如下:
Parameter_1 = value
Parameter_2 = value
.....
Test 1
Min: value
Max: value
Average: value
Test 2
Min: value
Max: value
Average: value
每个文件包含具有不同值的相同类型的参数,当然测试值也不同。
我需要能够将此数据导入Matlab。我想在Matlab中做的是能够创建参数图表(x轴)和测试结果。例如,Test 1 Min
更改时Parameter_1
值的图表意味着选择只有Parameter_1不同的n个文件,并比较Test 1 Min结果。
这是我的问题:如何在我的文本文件中组织这些数据,以便轻松导入Matlab?我是Matlab的新手,所以我不知道什么是最好的方法。
任何可以帮助我入门的想法都会很棒。谢谢!
答案 0 :(得分:3)
您的文件没有任何根本错误。您需要编写解析器。但不要担心这不是太难。
Regexp对此非常有用。我需要一点阅读才能掌握它 - 但它的功能非常强大。
我会使用这样的代码:
fid = fopen('myfile.txt');
result = {};
result_entry=[];
while 1
tline = fgetl(fid);
if ~ischar(tline), break, end
r = regexp(tline,'^(?<key>\w+)\W*=\W*(?<value>.*?)\W*$','names');
if ~isempty(r)
parameter_list.(r.key) = r.value;
continue
end
% does a new entry start?
r = regexp(tline,'^Test\W+(?<num>\d+)\W*$','names');
if ~isempty(r)
result = [result,{result_entry}];
result_entry = struct('TestNumber',r.num);
continue
end
r = regexp(tline,'^(?<key>\w+)\W*:\W*(?<value>.*?)\W*$','names');
if ~isempty(r)
result_entry.(r.key) = r.value;
end
end
fclose(fid);
答案 1 :(得分:2)
“组织数据的最佳方式”是一个非常有争议的问题。如果你问10个人,你会得到11个不同的答案。它通常取决于您可用于导入和导出数据的数据和功能。
话虽这么说,Matlab在导入纯粹的数字数据时表现出色(哈,没有双关语)。如果您可以将文件组织为仅由数字组成,则快速“加载”,“dlmread”或“csvread”命令将导入它们。包括文本数据会使事情变得更加复杂。
例如,如果文件非常一致,您可以组织这样的文件:
Param1Value,Param2Value,Param3Value
1,Test1min,test1max,test1average
2,Test2min,test2max,test2average
其中示例中的所有文本都只是数值(整数或浮点数),导入Matlab非常容易。您会知道第一行包含您的参数值
data = csvread('input.csv');
params = data(1,:);
您可以快速提取测试数字,最小值,最大值和平均值。
tests = data(2:end,1);
mins = data(2:end,2);
maxs = data(2:end,3);
avgs = data(2:end,4);
但这一切都取决于你在输出方面的灵活性。
答案 2 :(得分:0)
只是一个想法 - 类似于JSON,您可以将您的保存作为有效的matlab m文件。这样你就可以拥有所有结构特征,matlab提供了一个相当快速的阅读。