使用Matlab创建文本文件

时间:2015-11-16 23:10:25

标签: matlab

我试图在降水数据列表中进行一些更改。 数据采用以下格式的*.txt文件:

50810,200301010600,0.0
50810,200301010601,0.0
50810,200301010800,0.0
50810,200301010938,0.1
50810,200301010947,0.1
50810,200301010957,0.1

我所拥有的每个文件都包含1年内每分钟的降水数据。 第一个数字只是站号,对于文件中的每一行都是相等的。 在我的原始文件中,我每行都有一行数据。

我想创建一个包含以下内容的新文件:

  • 只有降水量不为零的线,所以我想删除 最后一个数字为零的所有行。我已经弄明白了。
  • 如果有一整个小时没有降水,我想删除所有 零线并创建一条新线说: 50810,200301010600,0.0。如果6到7之间没有降水 上午。在01.01。

    clear all
    
    data = load('jan-31des_2003.txt'); %opens file with data
    fid=fopen('50810_2003','w'); %opens empty file to write
    [nrow, ncol] = size(data); %size of data
    fprintf(fid,'%5s %12s %5s \r\n','Snr','Dato - Tid','RR_01') %Header
    
    for row = 1:nrow 
    
        y = data(row,2); %year
        m = data(row,3); % month
        d = data(row,4); % date
        h = data(row,5); % hour
        M = data(row,6); % minute
        p = data(row,8); % precipitation
    
        if p > 0
         fprintf(fid,'50810,%04d%02d%02d%02d%02d,%.1f \r\n',[y,m,d,h,M,p]);
        end
        if p==0 
            HERE I NEED SOME HELP
        end
    
    end
    
    fclose(fid);
    

if p==0条件下我想要的格式代码是什么?

1 个答案:

答案 0 :(得分:0)

假设您已经将数据导入为名为infile的M * 3数组,并且M可以被60整除,并且您的数据从一小时的第一分钟开始,并且您有一个数组输出文件将写入新的文件:

outfile = []
while ~isempty(infile)
    block = infile(1:60,:);          % Take one hour's worth of data
    if sum (block(:,3)==0) == 60     % Check if the last column are all zero
        outfile = cat(1, outfile, [block(1,1:2), 0]);  % If so, put one line to new array
    else
        filter = block(:,3)~=0;      % Otherwise, pick out only rows that the last column is not zeros
        outfile = cat(1, outfile, block(filter,:));    % Put these rows into the new array
    end
    infile(1:60,:) = [];             % Remove already processed data from original array
end

然后将整个outfile数组写入文件。