[題]
テキストファイル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