1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ファイル名一致と時間差

1
Posted at

[題]
テキストファイル1とテキストファイル2がある
テキストファイル1のファイル名は(7桁のユーザID_YYMMDDHHMMSS),
テキストファイル2のファイル名は(7桁のユーザID_YY-MM-DD-HH-MM-SS)
である。
テキストファイル1のファイル名にあるユーザIDと時刻にから一致するテキストファイル2のファイル名を導きだしたい
なお、テキスト1とテキスト2の時刻は一致していないのでテキストファイル1の時刻から60秒以内のファイルを同一ファイルとみなす

[答]

folder1 = "Folder1";
folder2 = "Folder2";

files1 = dir(fullfile(folder1,"*.txt"));
files2 = dir(fullfile(folder2,"*.txt"));

%% ファイル2を解析
user2 = strings(numel(files2),1);
time2 = NaT(numel(files2),1);

for i = 1:numel(files2)

    name = erase(files2(i).name,".txt");

    token = regexp(name,...
        '^(\d{7})_(\d{2})-(\d{2})-(\d{2})-(\d{2})-(\d{2})-(\d{2})$',...
        'tokens','once');

    user2(i) = token{1};

    yy = str2double(token{2});
    MM = str2double(token{3});
    dd = str2double(token{4});
    HH = str2double(token{5});
    mm = str2double(token{6});
    ss = str2double(token{7});

    time2(i) = datetime(2000+yy,MM,dd,HH,mm,ss);

end

%% 対応付け
result = cell(numel(files1),4);

for i = 1:numel(files1)

    name1 = erase(files1(i).name,".txt");

    token = regexp(name1,...
        '^(\d{7})_(\d{12})$',...
        'tokens','once');

    user1 = token{1};

    t = token{2};

    yy = str2double(t(1:2));
    MM = str2double(t(3:4));
    dd = str2double(t(5:6));
    HH = str2double(t(7:8));
    mm = str2double(t(9:10));
    ss = str2double(t(11:12));

    time1 = datetime(2000+yy,MM,dd,HH,mm,ss);

    % 同じユーザIDのみ検索
    idx = find(user2==user1);

    if isempty(idx)
        result(i,:) = {files1(i).name,"",NaN,false};
        continue;
    end

    % 時刻差(秒)
    diffSec = abs(seconds(time2(idx)-time1));

    [minDiff,pos] = min(diffSec);

    if minDiff <= 60
        result(i,:) = { ...
            files1(i).name,...
            files2(idx(pos)).name,...
            minDiff,...
            true};
    else
        result(i,:) = { ...
            files1(i).name,...
            "",...
            minDiff,...
            false};
    end

end
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?