从文件夹中的多个csv文件中读取时间序列:MATLAB

时间:2017-10-12 15:16:24

标签: matlab csv

我在一个文件夹中有以下格式的一堆csv文件,我想从每个文件夹中提取完整的时间序列(第17行的数字部分),识别重复记录并按照年份按升序合并它们日期。 特定的csv文件可通过下面的谷歌驱动器链接访问

    wnsnum  1           
    paroms  Waterhoogte                                                             
    loccod  HOEKVHLD                                                                
    locoms  Hoek van Holland                                                        
    rks_begdat  1993 07 09          
    rks_begtyd  00:00           
    rks_enddat  2014 31 12          
    rks_endtyd  23:50           
    begdat  begtyd  enddat  endtyd  rkssta
    1993 07 09  00:00   2007 31 12  23:50   D     
    2008 01 01  00:00   2009 30 12  23:50   G     
    2009 31 12  00:00   2009 31 12  23:50   O     
    2010 01 01  00:00   2011 17 06  18:40   G     
    2011 17 06  18:50   2011 18 06  18:50   O     
    2011 18 06  19:00   2014 31 12  23:50   G     
    datum   tijd    bpgcod  waarde  kwlcod
    1993 07 09  00:00       -70 0
    1993 07 09  00:10       -69 0
    1993 07 09  00:20       -68 0
    1993 07 09  00:30       -67 0
    1993 07 09  00:40       -68 0
    1993 07 09  00:50       -70 0
    1993 07 09  01:00       -69 0
    1993 07 09  01:10       -69 0
    1993 07 09  01:20       -68 0
    1993 07 09  01:30       -67 0
    1993 07 09  01:40       -65 0
    1993 07 09  01:50       -64 0
    1993 07 09  02:00       -62 0
    1993 07 09  02:10       -61 0
    1993 07 09  02:20       -61 0
    1993 07 09  02:30       -59 0
    1993 07 09  02:40       -58 0
    1993 07 09  02:50       -55 0

现在我的代码以下列方式工作:

SL_files = dir(sprintf('%s%s%s',fullfile(dirName),'\','*.csv'));
for idx = 1:size(SL_files,1)
    disp(SL_files(idx,1).name)
    fid = fopen(sprintf('%s%s%s',fullfile(dirName),'\',SL_files(idx,1).name)); 
    data = textscan(fid, '%s %f %f %f %f %f %f', ...
      'Delimiter',',', 'MultipleDelimsAsOne',1,'headerlines',16);

    fclose(fid);
end

现在我可以阅读该文件了。现在我的问题是如何将多个文件的数据组合成一个矩阵,并根据年和日值按升序排列它们。谢谢!

1 个答案:

答案 0 :(得分:0)

我终于解决了我的问题。这是代码:

numMat_All = [];
for idx = 1:size(SL_files,1)
    disp(SL_files(idx,1).name)
    fid = fopen(sprintf('%s%s%s',fullfile(dirName),'\',SL_files(idx,1).name)); 
    data = textscan(fid, '%s %f %f %f %f %f %f', ...
      'Delimiter',',', 'MultipleDelimsAsOne',1,'headerlines',16);
    fclose(fid);

    CharCell = data{1,1};
    result = regexprep(CharCell,'[\s;:]+',' ');
    numMat = cell2mat(cellfun(@str2num, result(:,1:end), 'UniformOutput', false));

    numMat_All = [numMat_All;numMat];
    data = []; CharCell = []; result = []; numMat = []; 
end

dt = datetime([numMat_All(:,1:5), repmat(0,length(numMat_All),1)]);
T = table(dt,numMat_All(:,[6:7]));    
T1 = sortrows(T,'dt');