MATLAB: удаление 4 строк заголовка, повторяемого каждые 14 строк и сохранение 2/3 столбцов данных в текстовом файле - PullRequest
1 голос
/ 17 марта 2012

В основном у меня есть куча повторяющихся данных в куче текстовых файлов, которые выглядят следующим образом (показаны два раздела):

t0  1/20/2012  05:41:05.068750
delta t 0.100000

time    Y
1/20/2012  05:41:05.068750  0.925883
1/20/2012  05:41:05.168750  0.926540
1/20/2012  05:41:05.268750  0.926540
1/20/2012  05:41:05.368750  0.926540
1/20/2012  05:41:05.468750  0.926869
1/20/2012  05:41:05.568750  0.925225
1/20/2012  05:41:05.668750  0.926540
1/20/2012  05:41:05.768750  0.928185
1/20/2012  05:41:05.868750  0.925554
1/20/2012  05:41:05.968750  0.925225
t0  1/20/2012  05:41:06.068750
delta t 0.100000

time    Y
1/20/2012  05:41:06.068750  0.926212
1/20/2012  05:41:06.168750  0.924567
1/20/2012  05:41:06.268750  0.926540
1/20/2012  05:41:06.368750  0.925883
1/20/2012  05:41:06.468750  0.914371
1/20/2012  05:41:06.568750  0.907135
1/20/2012  05:41:06.668750  0.906806
1/20/2012  05:41:06.768750  0.903188
1/20/2012  05:41:06.868750  0.902201
1/20/2012  05:41:06.968750  0.906148

Мне нужен способ в MATLAB хранить только 10 строк данных во втором и третьем столбцах (время без даты и значение y) и сохранять все это в переменной, чтобы я мог записать его в новый текст или файл xls. Мне даже не нужно значение времени, так как каждое значение y берется с шагом 0,1 секунды. Любая помощь будет высоко ценится.

1 Ответ

1 голос
/ 18 марта 2012

Пакетный процесс:

% Slurp in all lines.
f = fopen('foo.txt');
c = textscan(f,'%s','Delimiter','\n');
lines = c{1};
fclose(f);

% Remove headers.
lines(1:14:end) = [];
lines(1:13:end) = [];
lines(1:12:end) = [];
lines(1:11:end) = [];

% Extract data.
output = zeros(numel(lines),2);
for i = 1:numel(lines)
    x = lines{i};
    output(i,1) = datenum(x(1:19),'mm/dd/yyyy  HH:MM:SS') + ...
        str2double(x(20:26));
    output(i,2) = str2double(x(28:end));
end

Или как конечный автомат:

f = fopen('foo.txt');
output = [];
while true
    for i = 1:4
        x = fgetl(f);
        if x == -1
            break
        end
    end
    for i = 1:10
        x = fgetl(f);
        if x == -1
            break
        end
        time = datenum(x(1:19),'mm/dd/yyyy  HH:MM:SS') + ...
            str2double(x(20:26));
        val = str2double(x(28:end));
        output(end+1,1:2) = [time,val];
    end
    if x == -1
        break
    end
end
fclose(f);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...