У меня есть текстовый файл с разделителями табуляции.
Это выглядит как
3 5 2011-05-30.01:22:02.558151+00
1 3 2014-01-10.16:25:20.992213+00
3-й столбец - столбец даты. Я хочу получить строки с датами 2011-05-30, 2011-05-31, 2011-06-01 или 2011-06-02.
Я начинаю код с
fid = fopen('input.txt');
input = textscan(fid, '%f %f %*s','delimiter','\t','HeaderLines',0);
Что я пробовал
Я думаю, что мне нужно использовать findstr. Но я мог закодировать это только тогда, когда использую оператор if. Так что код был слишком медленным.
Вместо этого, используя python, я просто заменил «-» ничем, а затем удалил вещи после «даты».
Например, я изменил
2011-05-17.01:22:02.558151+00
to
20110517
Тогда input.txt целиком состоит только из числа, а не из строки.
Таким образом, в MatLab становится легко манипулировать.
Поэтому я импортировал этот измененный файл input.txt в MatLab.
Затем я выбрал строку с третьим столбцом 20110517 или 20110518.
Но это решение утомительно.
Я попробовал следующее решение, но оно не сработало.
%// Read in the text file
textArray = textread('input.txt', '%s', 'delimiter', '\n');
%// Space split
spacesGone = cellfun(@(x) regexp(x, ' ', 'split'), textArray, 'uni', false);
%// Extract only the dates
thirdColumn = cellfun(@(x) x{3}, spacesGone);
%// Get only the date now, not the time
splitDates = cellfun(@(x) regexp(x, ' ', 'split'), thirdColumn, 'uni', false);
datesFinal = cellfun(@(x) x{1}, splitDates, 'uni', false);
%// Convert to datenum format
dateNums = datenum(datesFinal);
%// Filter
validDates = dateNums >= 734653 & dateNums <= 734656;
%// Get final dates
finalDates = textArray(validDates);
datenum
илиdatevec
? Покажите нам, что вы пробовали до сих пор - person rayryeng   schedule 22.07.2014regexp
должным образом. Проверьте это. - person rayryeng   schedule 24.07.2014