2013-08-06 114 views
-2

我有一個文件在一個月內達到30個文件在一個月中。每個文件包含86400行,具有以下數據格式,如下所示: 小時最小秒值1值2值3 ..... 但是,該文件包含很多缺失的行。因此,通過使用interpolation.later檢查每個文件 插入缺少的行變得單調乏味,我必須將一個文件追加到另一個文件以便爲每個月創建一個大文件= 86400 * 30行)。謹建議我可以補償時間和人力的任何代碼。在matlab中處理數據

+0

你有什麼嘗試? –

+0

已手動檢查每個文件以確保不應有缺失的行。然後,我運行這個程序A1 = load('file1.txt'); ------------------ ----------------- A30 = load('file30.txt'); B = [A1; A2 ....... A30]。 B包含86400 * 30行.......... – Bunnies

回答

1

要閱讀所有的文件和堆棧數據,以形成B, 可以用在文件名的循環:

for d = 1:30 
    filename = sprintf('file%d.txt', d); 
    A{ d } = load(filename); 
    % complete missing values in A{d} here, for example using interpMissingRows below 
    A{ d } = interpMissingRows(A{ d }); 
end 
B = vertcat(A{:}); 

爲了計算缺少項,您可以插值:

function interpData = interpMissingRows(data) 
% compute seconds from 00:00:00 (assuming first entry is 0, 0, 0, val1 val2... 
absSec = data(:,1:3) * [ 3600; 60; 1]; % matrix multiplication! 
numValues = size(data,2) - 3; % number of colums to interpolate 
totSec = 24*3600; % number of seconds in 24Hours 
interpData = zeros(totSec, 3 + numValues); % pre-allocate 
interpData(:,1) = floor((0:totSec-1)'/3600); % hours 
interpData(:,2) = floor(((0:totSec-1)' - interpData(:,1)*3600)/60); % minutes 
interpData(:,3) = mod( (0:totSec-1)', 60); % seconds 
interpData(:, 4:end) = interp1(absSec, data(:, 4:end), (0:totSec-1)', 'linear','extrap'); 
+0

@Shai ...我已經成功地運行了1或2個文件的代碼。但是我仍然發現在matlab中有嚴重的錯誤評論as.Please Kindly rectify它..... ???錯誤使用==> interp1在259 X的值應該是不同的。 (0,totSec-1)','線性','extrap')中的錯誤== ==> interpMissingRows 10 interpData(:, 4:end)= interp1(absSec,data(:, 4:end) ; 錯誤在==> catenation at 8 A {d} = interpMissingRows(A {d}); – Bunnies

+0

@PrasantaChingtham看起來你的文件似乎有一個重複的行:這是具有相同小時,分鐘,秒值的兩個條目。 – Shai

+0

@Shai ...我用獨特的方法刪除行中的重複... A {d} =唯一(A {d},'rows');它不起作用。任何替代方法都可以刪除重複的行.. – Bunnies