我有一个包含两列的.txt文件:第一个包含日期,第二个包含该日期的降水浮点值(ppt)。我想通读降水柱并总结每次风暴的降水量。风暴由零沉降时期分隔。因此,我基本上想告诉Matlab读取ppt列,将值加起来直到它读取0,将总和放入向量的单元格中,然后继续读取和重复。我知道我需要一个带有条件语句的循环。以下是我认为成功的代码可能基于我对Matlab的有限知识的相似性:
fid = fopen(12hr_ppt.txt');
C = textscan(fid);
l = length(fid);
? = 0;
for i=1:l;
if fid(i)>0;
?=fid(i)+?;
else
?=0;
endif
fprintf(?);
end
所以我基本上想要?是一个保持总降水量的矢量。拥有与事件相对应的日期也是非常好的,但是现在我只想解决这个问题。非常感谢任何帮助!
答案 0 :(得分:0)
您可以使用以下内容:
clear;
close;
clc;
date_ppt = importdata('testcase.txt');
num_rows = size(date_ppt.data,1);
end_storm = find(date_ppt.data == 0);
if(end_storm(1) == 1)
end_storm = end_storm(2:end);
end
if(end_storm(end) ~= num_rows)
end_storm = [end_storm;num_rows];
end
begin_storm = [1;(end_storm(1:(end-1)) + 1)];
accumulated_ppt = zeros(size(begin_storm));
for i = 1:numel(accumulated_ppt)
accumulated_ppt(i) = sum(date_ppt.data(begin_storm(i):end_storm(i)));
end
accumulated_ppt
这里,我的“testcase.txt”包含以下内容:
Date PPT
01/01/13 0.276
02/01/13 0.6797
03/01/13 0.6551
04/01/13 0.1626
05/01/13 0
06/01/13 0.4984
07/01/13 0.9597
08/01/13 0.3404
09/01/13 0.5853
10/01/13 0.2238
11/01/13 0.7513
12/01/13 0.2551
13/01/13 0.506
14/01/13 0.6991
15/01/13 0.8909
16/01/13 0.9593
17/01/13 0.5472
18/01/13 0
19/01/13 0.1493
20/01/13 0.2575
21/01/13 0.8407
22/01/13 0.2543
23/01/13 0.8143
24/01/13 0.2435
25/01/13 0.9293
26/01/13 0.35
27/01/13 0.1966
28/01/13 0.2511
29/01/13 0.616
30/01/13 0.4733
31/01/13 0.3517
01/02/13 0.8308
02/02/13 0.5853
03/02/13 0.5497
04/02/13 0.9172
05/02/13 0.2858
06/02/13 0.7572
07/02/13 0.7537
08/02/13 0.3804
09/02/13 0.5678
10/02/13 0.0759
11/02/13 0
12/02/13 0.5308
13/02/13 0.7792
14/02/13 0.934
15/02/13 0.1299
16/02/13 0.5688
17/02/13 0.4694
18/02/13 0.0119
19/02/13 0.3371
获得的输出是:
accumulated_ppt =
1.7734
7.2165
11.4314
3.7611
此外,“日期”列值存储在date_ppt.textdata(:,1)
中。如果你只想要与end_storm
对应的日期,你可以简单地使用`date_ppt.textdata(end_storm,1)':
>> date_ppt.textdata(end_storm,1)
ans =
'04/01/13'
'17/01/13'
'10/02/13'
'18/02/13'