Хорошо. Кажется, я решил большую часть проблемы, мне просто нужен экспертный глаз, чтобы определить мою ошибку, когда я застрял.
У меня есть файл длиной [125 X 27]
, и я хочу преобразовать его в файл длиной [144 x 27]
. Теперь я хочу заменить отсутствующие файлы (временные метки) рядами нулей. (в идеале это среднее значение за 10 минут, поэтому длина файла должна составлять 144)
Вот код, который я использую:
fid = fopen('test.csv', 'rt');
data = textscan(fid, ['%s' repmat('%f',1,27)], 'HeaderLines', 1, 'Delimiter', ',');
fclose(fid);
%//Make time a datenum of the first column
time = datenum(data{1} , 'mm/dd/yyyy HH:MM')
%//Find the difference in minutes from each row
timeDiff = round(diff(datenum(time)*(24*60)))
%//the rest of the data
data = cell2mat(data(2:28));
newdata=zeros(144,27);
for n=1:length(timeDiff)
if timeDiff(n)==10
newdata(n,:)=data(n,:);
newdata(n+1,:)=data(n+1,:);
else
p=timeDiff(n)/10
n=n+p;
end
end
Может кто-нибудь помочь мне найти ошибку в моем цикле for
. Мой выходной файл, кажется, пропускает несколько значений с метками времени.
% ********************************************** ************************************************** ************************************************** ***********************************
Может кто-нибудь помочь мне разобраться в uiget для чтения вышеуказанного файла ??
я заменяю
fid = fopen ('test.csv', 'rt');
data = textcan (fid, ['s% repmat ('% f ', 1,27)],' HeaderLines ', 1,' Delimiter ',', ');
fclose (FID);
С
[c, pathc] = uigetfile ({'*. Txt'}, 'Выберите файл', 'C: \ data');
file = [pathc c];
file = textcan (c, ['% s' repmat ('% f', 1,27)], 'HeaderLines', 1, 'Delimiter', ',');
И это не работает
%
НОВОЕ ДОБАВЛЕНИЕ к старому вопросу
р = 1; % индекса в пункт назначения
для n = 1: длина (timeDiff)
% if timeDiff (n) == 10
% newfile (p, :) = file (n,:);
% newfile (p + 1,:) = файл (n + 1,:);
% p = p + 1;
% else
% p = p + (timeDiff (n) / 10);
% end
* +1054 * д = cumsum (TimeDiff (п) / 10);
если q == 1
NewFile (р,:) = файл (п,:);
р = р + 1;
еще
p = p + (timeDiff (n) / 10);
конец
конец
xlswrite ( 'testnewws11.xls', NewFile);
даже с командой cumsum этот код завершается ошибкой, когда мой файл имеет 1,2 метки времени в середине длинных пропущенных
пример
8/16/2009 0:00 5,34
16.08.2009 0:10 3,23
16.08.2009 0:20 2,23
16.08.2009 0:30 1.23
16.08.2009 0:50 70
16.08.2009 2:00 5.23
16.08.2009 2:20 544
16.08.2009 2:30 42.23
16.08.2009 3:00 71,23
16.08.2009 3:10 3,23
Мой вывод выглядит как
5,34
3,23
2,23
0
0
0
0
0
0
0
0
0
5,23
544.
42,23
0
0
0
3,23
Есть идеи?