我是Matlab的新手,并一直在努力使用Google。但现在我似乎已经碰壁了。
我有一个文本文件,如下所示:
Information is for illustration reasons only
Aggregated Results
Date;$/Val1;Total $;Exp. Val1;Act. Val1
01-Oct-2008; -5.20; -1717; 330; 323
02-Oct-2008; -1.79; -595; 333; 324
03-Oct-2008; -2.29; -765; 334; 321
04-Oct-2008; -2.74; -917; 335; 317
Total Period; -0.80; -8612; 10748; 10276
Aggregated Results for location State PA
Date;$/Val1;Total $;Exp. Val1;Act. Val1
01-Oct-2008; -5.20; -1717; 330; 323
02-Oct-2008; -1.79; -595; 333; 324
03-Oct-2008; -2.29; -765; 334; 321
Total Period; -0.80; -8612; 10748; 10276
Results for account A1
Date;$/Val1;Total $;Exp. Val1;Act. Val1
01-Oct-2008; -7.59; -372; 49; 51
Total Period; -0.84; -1262; 1502; 1431
Results for account A2
Date;$/MWh;Total $;Exp. MWh;Act. MWh
01-Oct-2008; -8.00; -392; 49; 51
02-Oct-2008; 0.96; 47; 49; 51
03-Oct-2008; -0.75; -37; 50; 48
04-Oct-2008; 1.28; 53; 41; 40
Total Period; -0.36; -534; 1502; 1431
我想以单元格/矩阵格式提取以下信息,以便我以后可以选择使用它来选择性地执行帐户A1和A2的平均值或PA和A1的平均值等操作。
PA -0.8
A1 -0.84
A2 -0.036
答案 0 :(得分:1)
我会这样:
fid = fopen(filename,'r');
A = textscan(fid,'%s','delimiter','\r');
A = A{:};
str_i = 'Total Period';
ix = find(strncmp(A,str_i,length(str_i)));
res = arrayfun(@(i) str2num(A{ix(i)}(length(str_i)+2:end)),1:numel(ix),'UniformOutput',false);
res = cat(2,res{:});
这样,您将获得矩阵中字符串“总周期”后的所有数值,以便您可以选择所需的值。
同样,您可以使用字符串PA
,A1
和A2
进行操作。
答案 1 :(得分:1)
在处理凌乱的数据时,Matlab并不是那么好。您可能希望先对它进行预处理。
但是,这是一种简单的通用方法,可以在Matlab中为有限数量的正常大小的文件导入混合数字和非数字数据。
步骤1:将文件内容复制到excel中并将其另存为xls或xlsx
第2步:使用xlsread
[NUM,TXT,RAW]=xlsread('test.xlsx')
从那里解析应该是可以解决的。
希望他们将来会向csvread
或dlmread
添加非数字支持。