2017-10-12 24 views
0

フォルダー内に次の形式のcsvファイルがたくさんあるので、それぞれから完全な時系列を抽出する(行番号17の数字部分)、重複レコードを識別する年月日に応じて昇順にマージします。 特定のcsvファイル今、私のコードは次のように働いているフォルダ内の複数のcsvファイルからtimeseriesを読み込む:

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 

以下のGoogleドライブリンクを介してアクセス可能である:

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

データを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'); 
関連する問題