2017-10-12 278 views
0

我在以下格式的文件夹中有一堆csv文件,我想从每个文件(第17行的数字部分)中提取完整的时间序列,识别重复记录并按照年份和日期从小到大的顺序合并它们。 具体csv文件是通过以下从一个文件夹中的多个csv文件读取时间序列:MATLAB

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 

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

+0

我将您的数据复制到一个csv文件中,发现没有问题。可能在您的原始文件中,这些空格并不总是“空格”。你能上传你的文件吗? – Yvon

+0

如果您查看参数'MultipleDelimsAsOne',它可能会有所帮助。无论如何,我无法解决你的问题。 – Yvon

+0

我建议你看看函数'csvread()'https://www.mathworks.com/help/matlab/ref/csvread.html。您可以选择要开始阅读的行,以及要提取的列。 – xrr

回答

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'); 
相关问题