대충 눈으로 보기엔 동영상 폴더에 있는 파일리스트를 정렬해 가져와 그대로 자막리스트에 붙여넣는 것으로 생각할 수 있다.


하지만 이 프로그램은 참으로 쓰잘데기 없이 더럽게 복잡하고 구현하기 조잡한 알고리즘을 사용한다.


그 방법은 다음과 같다.


첫 번째로 StrCmpLogicalW와 IComparer를 이용해 동영상 파일과 자막파일 이름들을 정렬한다.

(전체과정은 그냥 여기서 파일 숫자만 같으면 붙여넣기하면 끝난다.)


두 번째로 자막과 동영상파일들의 각각 동일하지 않은 패턴이 있는지 검사한다. 네 번째에서 자세히 설명한다.


세 번째로 자막 파일의 모든 파일의 확장자가 같은지 검사한다.

일단 확장자가 다른게 있다면 이 프로그램에선 변형시키지 않는다. 왜 이렇게 설계했을까


네 번째로 동영상과, 자막파일의 토큰들을 분리한다. 여기서 말하는 토큰은 숫자, 문자, 기호가 있다.

가령 Rakudai 10 s.smi라는 이름은 문자+기호+숫자+기호+문자+기호+문자 패턴 토큰들로 나누어진다.

두 번째에선 단순한 패턴 토큰들의 일치여부만을 따지고, 여기선 그 토큰들을 분리한다는 것이 차이점이다.

그 다음 모든 분리된 토큰들에 대하여 다른 부분을 찾는다.

가령 Rakudai 10 s.smi, Rakudai 09 s.smi 에선 숫자 토큰들이 다르니 토큰 분석알고리즘은 이 부분들을 찾아낼 것이다.

특별한 방법은 없다. 첫 번째 패턴 토큰들을 한 곳에 박아놓고 다른 부분을 찾는 것이다.

그다음, 틀린 패턴 중 최대인 항목을 찾는다.


다섯 번째. 이제 자막 패턴 토큰들 중 가장 많이 다른 한 토큰 배열을 고르고, 동영상 패턴 토큰들 중 가장 많이 다른 한 토큰을 제외한 배열을 고른다.

전자를 후자에 넣는 작업을 파일 개수만큼 반복한다.


이제 메세지 박스를 띄우고 사용자의 응답을 받아 파일이름을 바꾼다. 최대 25개 까지만 표시된다.


--------------------------------------------------------------------------------------------------------------------------------


이 프로그램은 vb.net으로 작성되었으며 그 소스는 

https://github.com/rollrat/subtitle-renamer 에서 얻을 수 있다.


참고로 간단했던 복사 알고리즘은 프로그램을 다만들고 다듬는 과정중에 생각이 났다.

이전에 Renamer Tool의 아이디어를 빌려와 만든 것인데 그것 때문에 넓게 보지 못한 것이 화근이 된 것같다.


조금 덧붙이면 이 알고리즘의 핵심인 네 번째 부분의 토큰 분리-합치기는 사진에서 보이는 것과 같이 마지막 파일의 문자 토큰 중 RAW RAW ... END의 순서를 갖는 형식을 처리하기 위해 어렵게 구현했던 것이다.

결국 쓸모 없었다.