티스토리 뷰
답부터 보여주기
d = dir('./**');
d = d(~ismember({d.name}, {'.', '..'}));
d = d([d.isdir] == 0 & endsWith({d.name}, '.txt'));
for i = 1:length(d)
ifile = fullfile(d(i).folder, d(i).name);
fid = fopen(ifile);
s = fscanf(fid, '%c');
fclose(fid);
if contains(s, 'pattern')
keyboard
end
end
나는 메모할 것이 있으면 일단 텍스트 파일에 적어둔다. 그리고 정기적으로 텍스트 파일들을 정리한다. 지울 것은 지우고, 합칠 것은 합치고, 당장 안 볼 것 같은 파일은 저장하고 닫는다. Notepad++가 참 좋은 앱이다. 그런데 문제가 있다. 메모를 너무 많이 한다. 그리고 어디에 무엇을 적어뒀는지 까먹는다.
인상깊게 봤던 영상이 하나 있었다. 영상을 보면서 무언가 적어둔 것이 있는데, 어느 파일에 적어뒀는지 기억이 나지 않았다. 분명 영상 링크를 같이 적어두었을 것이므로, 영상 id인 "OfW4huYVNQc"가 들어있는 텍스트 파일을 찾으면 된다. 그런데 파일이 어느 폴더에 들어있는지도 모르겠다면?
1. 텍스트 파일이 있을 법한 폴더 하위의 모든 파일을 찾는다.
2. 그 중 확장자가 txt인 것만 걸러낸다.
3. fscanf로 열어서 찾고자 하는 문구가 있는지 확인한다.
현재 폴더 아래의 모든 하위 폴더 검색하기 글을 쓴 적이 있다.
d = dir('./**');
d = d(~ismember({d.name}, {'.', '..'}));
d = d([d.isdir]);
지금은 파일을 찾는 것이므로 마지막 줄은 아래처럼 바뀌어야 한다. 이 작업들은 Variables 창을 띄워놓고 하면 결과를 바로바로 볼 수 있어서 편하다.
d = dir('./**');
d = d(~ismember({d.name}, {'.', '..'}));
d = d([d.isdir] == 0);
이제 확장자가 txt인 것을 찾으면 된다. endsWith 함수는 문자열이 특정 패턴으로 끝나는지를 확인한다.
>> endsWith('D:\downloads\qna.txt', '.txt')
ans =
logical
1
>>
그런데 endsWith의 첫 번째 인자로 파일명이 들어가야 하는데, 파일명이 구조체의 필드로 들어가 있어서 문제가 된다. 방법이 있다. 구조체 배열 전체의 특정 필드를 반환 받으면서 { }로 감싸면 해당 필드가 모두 들어간 셀 배열이 반환된다.
>> d.name
ans =
'4peg_hanoi.gif'
ans =
'IMG_4662.PNG'
ans =
'Python basics.pdf'
ans =
'udemy.txt'
ans =
'visualizing_imaginary_unit.m'
ans =
'잡노트.txt'
ans =
'회로그리기.gif'
>> {d.name}
ans =
1×7 cell array
Columns 1 through 2
{'4peg_hanoi.gif'} {'IMG_4662.PNG'}
Columns 3 through 4
{'Python basics.pdf'} {'udemy.txt'}
Columns 5 through 6
{'visualizing_imaginary_unit.m'} {'잡노트.txt'}
Column 7
{'회로그리기.gif'}
>>
이제 endsWith는 셀 배열의 각 원소가 특정 패턴으로 끝나는지를 logical 1 또는 0으로 알려준다.
>> endsWith({d.name}, '.txt')
ans =
1×7 logical array
0 0 0 1 0 1 0
>>
폴더가 아닌 것을 확인하는 부분과 합치면 아래와 같다.
d = dir('./**');
d = d(~ismember({d.name}, {'.', '..'}));
d = d([d.isdir] == 0 & endsWith({d.name}, '.txt'));
이제 fscanf로 파일을 열어서 내가 찾는 문자열이 있는지 확인하면 된다.
for i = 1:length(d)
ifile = fullfile(d(i).folder, d(i).name);
fid = fopen(ifile);
s = fscanf(fid, '%c');
fclose(fid);
if contains(s, 'OfW4huYVNQc')
keyboard
end
end
내가 찾던 그 영상에 대한 코멘트는 '교육철학 시리즈.txt'라는 파일에 들어있었다. 왜...
끗
'matlab' 카테고리의 다른 글
자기 자신도 palindrome인 palindrome 확인 코드 (0) | 2024.08.04 |
---|---|
왜 gradient가 가장 가파른 방향일까? (0) | 2024.07.16 |
nchoosek, string, unique를 이용한 경우의 수 문제 풀이 (0) | 2024.06.25 |
깃헙의 매트랩 파일을 MATLAB Online에서 여는 버튼 만들기 (0) | 2024.06.16 |
매트랩에서 텍스트를 컬러풀하게 (0) | 2024.06.10 |